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