diff options
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python')
-rw-r--r-- | lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp | 23 | ||||
-rw-r--r-- | lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.h | 13 |
2 files changed, 32 insertions, 4 deletions
diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp index 86cceebb531..d4485cc001e 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp @@ -412,7 +412,7 @@ void ScriptInterpreterPython::IOHandlerInputComplete(IOHandler &io_handler, if (!bp_options) continue; - auto data_ap = llvm::make_unique<BreakpointOptions::CommandData>(); + auto data_ap = llvm::make_unique<CommandDataPython>(); if (!data_ap) break; data_ap->user_source.SplitIntoLines(data); @@ -1231,10 +1231,26 @@ void ScriptInterpreterPython::SetBreakpointCommandCallbackFunction( bp_options, oneliner.c_str()); } +Error ScriptInterpreterPython::SetBreakpointCommandCallback( + BreakpointOptions *bp_options, + std::unique_ptr<BreakpointOptions::CommandData> &cmd_data_up) { + Error error; + error = GenerateBreakpointCommandCallbackData(cmd_data_up->user_source, + cmd_data_up->script_source); + if (error.Fail()) { + return error; + } + auto baton_sp = + std::make_shared<BreakpointOptions::CommandBaton>(std::move(cmd_data_up)); + bp_options->SetCallback(ScriptInterpreterPython::BreakpointCallbackFunction, + baton_sp); + return error; +} + // Set a Python one-liner as the callback for the breakpoint. Error ScriptInterpreterPython::SetBreakpointCommandCallback( BreakpointOptions *bp_options, const char *command_body_text) { - auto data_ap = llvm::make_unique<BreakpointOptions::CommandData>(); + auto data_ap = llvm::make_unique<CommandDataPython>(); // Split the command_body_text into lines, and pass that to // GenerateBreakpointCommandCallbackData. That will @@ -2054,8 +2070,7 @@ void ScriptInterpreterPython::Clear() { bool ScriptInterpreterPython::BreakpointCallbackFunction( void *baton, StoppointCallbackContext *context, user_id_t break_id, user_id_t break_loc_id) { - BreakpointOptions::CommandData *bp_option_data = - (BreakpointOptions::CommandData *)baton; + CommandDataPython *bp_option_data = (CommandDataPython *)baton; const char *python_function_name = bp_option_data->script_source.c_str(); if (!context) diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.h b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.h index fa12bf81988..7b0e1b000d6 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.h +++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.h @@ -25,6 +25,7 @@ // Other libraries and framework includes // Project includes #include "PythonDataObjects.h" +#include "lldb/Breakpoint/BreakpointOptions.h" #include "lldb/Core/IOHandler.h" #include "lldb/Host/Terminal.h" #include "lldb/Interpreter/ScriptInterpreter.h" @@ -37,6 +38,13 @@ namespace lldb_private { class ScriptInterpreterPython : public ScriptInterpreter, public IOHandlerDelegateMultiline { public: + class CommandDataPython : public BreakpointOptions::CommandData { + public: + CommandDataPython() : BreakpointOptions::CommandData() { + interpreter = lldb::eScriptLanguagePython; + } + }; + #if PY_MAJOR_VERSION >= 3 typedef PyObject *(*SWIGInitCallback)(void); #else @@ -362,6 +370,11 @@ public: void SetBreakpointCommandCallbackFunction(BreakpointOptions *bp_options, const char *function_name) override; + /// This one is for deserialization: + Error SetBreakpointCommandCallback( + BreakpointOptions *bp_options, + std::unique_ptr<BreakpointOptions::CommandData> &data_up) override; + /// Set a one-liner as the callback for the watchpoint. void SetWatchpointCommandCallback(WatchpointOptions *wp_options, const char *oneliner) override; |