diff options
Diffstat (limited to 'lldb/scripts')
-rw-r--r-- | lldb/scripts/Python/python-wrapper.swig | 17 | ||||
-rw-r--r-- | lldb/scripts/interface/SBBreakpoint.i | 8 | ||||
-rw-r--r-- | lldb/scripts/interface/SBBreakpointLocation.i | 11 | ||||
-rw-r--r-- | lldb/scripts/interface/SBBreakpointName.i | 4 |
4 files changed, 37 insertions, 3 deletions
diff --git a/lldb/scripts/Python/python-wrapper.swig b/lldb/scripts/Python/python-wrapper.swig index 8bb74647741..b7af3422193 100644 --- a/lldb/scripts/Python/python-wrapper.swig +++ b/lldb/scripts/Python/python-wrapper.swig @@ -45,7 +45,8 @@ LLDBSwigPythonBreakpointCallbackFunction const char *python_function_name, const char *session_dictionary_name, const lldb::StackFrameSP& frame_sp, - const lldb::BreakpointLocationSP& bp_loc_sp + const lldb::BreakpointLocationSP& bp_loc_sp, + lldb_private::StructuredDataImpl *args_impl ) { lldb::SBFrame sb_frame (frame_sp); @@ -62,7 +63,19 @@ LLDBSwigPythonBreakpointCallbackFunction PythonObject frame_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_frame)); PythonObject bp_loc_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_bp_loc)); - PythonObject result = pfunc(frame_arg, bp_loc_arg, dict); + + PythonObject result; + // If the called function doesn't take extra_args, drop them here: + auto arg_info = pfunc.GetNumArguments(); + if (arg_info.count == 3) + result = pfunc(frame_arg, bp_loc_arg, dict); + else if (arg_info.count == 4) { + lldb::SBStructuredData *args_value = new lldb::SBStructuredData(args_impl); + PythonObject args_arg(PyRefType::Owned, SBTypeToSWIGWrapper(args_value)); + result = pfunc(frame_arg, bp_loc_arg, args_arg, dict); + } else { + return stop_at_breakpoint; + } if (result.get() == Py_False) stop_at_breakpoint = false; diff --git a/lldb/scripts/interface/SBBreakpoint.i b/lldb/scripts/interface/SBBreakpoint.i index 6df0b958085..a33aeea40b7 100644 --- a/lldb/scripts/interface/SBBreakpoint.i +++ b/lldb/scripts/interface/SBBreakpoint.i @@ -180,6 +180,14 @@ public: SetScriptCallbackFunction (const char *callback_function_name); %feature("docstring", " + Set the name of the script function to be called when the breakpoint is hit. + To use this variant, the function should take (frame, bp_loc, extra_args, dict) and + when the breakpoint is hit the extra_args will be passed to the callback function.") SetScriptCallbackFunction; + SBError + SetScriptCallbackFunction (const char *callback_function_name, + SBStructuredData &extra_args); + + %feature("docstring", " Provide the body for the script function to be called when the breakpoint is hit. The body will be wrapped in a function, which be passed two arguments: 'frame' - which holds the bottom-most SBFrame of the thread that hit the breakpoint diff --git a/lldb/scripts/interface/SBBreakpointLocation.i b/lldb/scripts/interface/SBBreakpointLocation.i index 90a23234862..44fd42b514f 100644 --- a/lldb/scripts/interface/SBBreakpointLocation.i +++ b/lldb/scripts/interface/SBBreakpointLocation.i @@ -73,11 +73,20 @@ public: void SetAutoContinue(bool auto_continue); %feature("docstring", " - Set the callback to the given Python function name.") SetScriptCallbackFunction; + Set the callback to the given Python function name. + The function takes three arguments (frame, bp_loc, dict).") SetScriptCallbackFunction; void SetScriptCallbackFunction (const char *callback_function_name); %feature("docstring", " + Set the name of the script function to be called when the breakpoint is hit. + To use this variant, the function should take (frame, bp_loc, extra_args, dict) and + when the breakpoint is hit the extra_args will be passed to the callback function.") SetScriptCallbackFunction; + SBError + SetScriptCallbackFunction (const char *callback_function_name, + SBStructuredData &extra_args); + + %feature("docstring", " Provide the body for the script function to be called when the breakpoint location is hit. The body will be wrapped in a function, which be passed two arguments: 'frame' - which holds the bottom-most SBFrame of the thread that hit the breakpoint diff --git a/lldb/scripts/interface/SBBreakpointName.i b/lldb/scripts/interface/SBBreakpointName.i index 42dd4236338..2a06d0a2105 100644 --- a/lldb/scripts/interface/SBBreakpointName.i +++ b/lldb/scripts/interface/SBBreakpointName.i @@ -84,6 +84,10 @@ public: void SetScriptCallbackFunction(const char *callback_function_name); + SBError + SetScriptCallbackFunction (const char *callback_function_name, + SBStructuredData &extra_args); + void SetCommandLineCommands(SBStringList &commands); bool GetCommandLineCommands(SBStringList &commands); |