ScriptInterpreter.h revision d1c2dcac1c8509a77e6d9227c1285f96cbfadeb3
15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//===-- ScriptInterpreter.h -------------------------------------*- C++ -*-===//
25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//
35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//                     The LLVM Compiler Infrastructure
45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//
55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner// This file is distributed under the University of Illinois Open Source
65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner// License. See LICENSE.TXT for details.
75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//
85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//===----------------------------------------------------------------------===//
95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef liblldb_ScriptInterpreter_h_
115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define liblldb_ScriptInterpreter_h_
125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "lldb/lldb-private.h"
145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "lldb/Core/Broadcaster.h"
155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "lldb/Utility/PseudoTerminal.h"
165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnernamespace lldb_private {
185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerclass ScriptInterpreter
205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerpublic:
225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    typedef enum
245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    {
255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eCharPtr,
265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eBool,
275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eShortInt,
285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eShortIntUnsigned,
295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eInt,
305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eIntUnsigned,
315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eLongInt,
322c538c86c15d597cc875dc926e4e39285c5625dfDavid 'Digit' Turner        eLongIntUnsigned,
335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eLongLong,
345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eLongLongUnsigned,
355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eFloat,
365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eDouble,
375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        eChar
385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } ReturnType;
395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ScriptInterpreter (lldb::ScriptLanguage script_lang);
425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    virtual ~ScriptInterpreter ();
445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    virtual bool
465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ExecuteOneLine (CommandInterpreter &interpreter, const char *command, CommandReturnObject *result) = 0;
475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    virtual void
492c538c86c15d597cc875dc926e4e39285c5625dfDavid 'Digit' Turner    ExecuteInterpreterLoop (CommandInterpreter &interpreter) = 0;
505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
51cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    virtual bool
525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ExecuteOneLineWithReturn (const char *in_string, ReturnType return_type, void *ret_value)
535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    {
545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        return true;
555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    virtual bool
585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ExecuteMultipleLines (const char *in_string)
595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    {
605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        return true;
615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    virtual bool
645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ExportFunctionDefinitionToInterpreter (StringList &function_def)
655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    {
665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        return false;
675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    virtual bool
705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    GenerateBreakpointCommandCallbackData (StringList &input, StringList &output)
715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    {
725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        return false;
735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
75cc330d4169441727fecf1da08aee806fc021c4e2David 'Digit' Turner    virtual void
766af6765e2f3bc930d0dce21d752bea570a1b1362David 'Digit' Turner    CollectDataForBreakpointCommandCallback (CommandInterpreter &interpreter,
7734c48ff1e3ad5cd2084ca40188754d45f423750bDavid 'Digit' Turner                                             BreakpointOptions *bp_options,
787a78db75ad42aea283f5073f51891464104a9fc3David 'Digit' Turner                                             CommandReturnObject &result);
79e7216d82dbaa19892ad62b07402d512234559a6eDavid 'Digit' Turner
8034c48ff1e3ad5cd2084ca40188754d45f423750bDavid 'Digit' Turner    /// Set a one-liner as the callback for the breakpoint command.
81e1e03df288d5a44bfbffbd86588395c7cbbc27dfDavid 'Digit' Turner    virtual void
825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    SetBreakpointCommandCallback (CommandInterpreter &interpreter,
8328a09b6fe8d8f3e92ffee9263609a6da881b8818David 'Digit' Turner                                  BreakpointOptions *bp_options,
845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                  const char *oneliner)
85cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    {
8628a09b6fe8d8f3e92ffee9263609a6da881b8818David 'Digit' Turner        return;
87622b8f4c760b8c4479d28430f978bad8bb9ea32cTim Baverstock    }
885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    const char *
905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    GetScriptInterpreterPtyName ();
91986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
92986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    int
93986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    GetMasterFileDescriptor ();
94986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
95986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    CommandInterpreter *
96986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    GetCommandInterpreter ();
97986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    static std::string
995973c775c853e26f684de58ad28c267281aaffd6David 'Digit' Turner    LanguageToString (lldb::ScriptLanguage);
1005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerprivate:
102986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    lldb::ScriptLanguage m_script_lang;
103986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
104986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    // Scripting languages may need to use stdin for their interactive loops;
105986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    // however we don't want them to grab the real system stdin because that
106986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    // resource needs to be shared among the debugger UI, the inferior process and these
107986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    // embedded scripting loops.  Therefore we need to set up a pseudoterminal and use that
108986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    // as stdin for the script interpreter interactive loops/prompts.
109986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
110986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    lldb_utility::PseudoTerminal m_interpreter_pty;
111986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    std::string m_pty_slave_name;
112986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner};
113986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
114986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner} // namespace lldb_private
115986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
116986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner#endif // #ifndef liblldb_ScriptInterpreter_h_
117986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner