Author: enrico Date: Wed Oct 1 16:53:32 2014 New Revision: 218835 URL: http://llvm.org/viewvc/llvm-project?rev=218835&view=rev <http://llvm.org/viewvc/llvm-project?rev=218835&view=rev> Log: Add documentation about the new SBExecutionContext for Python commands feature. This marks the end of rdar://18142728 <rdar://18142728>
Modified: lldb/trunk/www/python-reference.html I jotted down a few lines on how this works, and the updated function prototype (since argument order changes when you do this) - but feel free to update my wording > On Oct 1, 2014, at 3:32 PM, [email protected] wrote: > > Excellent!!! Thanks for adding this, Enrico! Can you also add something to > the Python Tutorial describing this and why it's a good idea to do it this > way? > > Jim > >> On Oct 1, 2014, at 2:47 PM, Enrico Granata <[email protected]> wrote: >> >> Author: enrico >> Date: Wed Oct 1 16:47:29 2014 >> New Revision: 218834 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=218834&view=rev >> Log: >> Allow Python commands to optionally take an SBExecutionContext argument in >> case they need to handle 'where they want to act' separately from the notion >> of 'currently-selected entity' that is associated to the debugger. Do this >> in an (hopefully) non-breaking way by running an argcount check before >> passing in the new argument. Update the test case to also check for this new >> feature. www update to follow >> >> Modified: >> lldb/trunk/include/lldb/API/SBExecutionContext.h >> lldb/trunk/include/lldb/Interpreter/ScriptInterpreter.h >> lldb/trunk/include/lldb/Interpreter/ScriptInterpreterPython.h >> lldb/trunk/scripts/Python/python-swigsafecast.swig >> lldb/trunk/scripts/Python/python-wrapper.swig >> lldb/trunk/source/API/SBCommandInterpreter.cpp >> lldb/trunk/source/API/SBExecutionContext.cpp >> lldb/trunk/source/Commands/CommandObjectCommands.cpp >> lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp >> lldb/trunk/test/functionalities/command_script/TestCommandScript.py >> lldb/trunk/test/functionalities/command_script/py_import >> lldb/trunk/test/functionalities/command_script/welcome.py >> >> Modified: lldb/trunk/include/lldb/API/SBExecutionContext.h >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBExecutionContext.h?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/include/lldb/API/SBExecutionContext.h (original) >> +++ lldb/trunk/include/lldb/API/SBExecutionContext.h Wed Oct 1 16:47:29 2014 >> @@ -25,6 +25,8 @@ public: >> >> SBExecutionContext (const lldb::SBExecutionContext &rhs); >> >> + SBExecutionContext (lldb::ExecutionContextRefSP exe_ctx_ref_sp); >> + >> SBExecutionContext (const lldb::SBTarget &target); >> >> SBExecutionContext (const lldb::SBProcess &process); >> >> Modified: lldb/trunk/include/lldb/Interpreter/ScriptInterpreter.h >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/ScriptInterpreter.h?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/include/lldb/Interpreter/ScriptInterpreter.h (original) >> +++ lldb/trunk/include/lldb/Interpreter/ScriptInterpreter.h Wed Oct 1 >> 16:47:29 2014 >> @@ -127,7 +127,8 @@ public: >> const char >> *session_dictionary_name, >> >> lldb::DebuggerSP& debugger, >> const char* >> args, >> - >> lldb_private::CommandReturnObject& cmd_retobj); >> + >> lldb_private::CommandReturnObject& cmd_retobj, >> + >> lldb::ExecutionContextRefSP exe_ctx_ref_sp); >> >> typedef bool (*SWIGPythonCallModuleInit) (const char >> *python_module_name, >> const char >> *session_dictionary_name, >> @@ -502,7 +503,8 @@ public: >> const char* args, >> ScriptedCommandSynchronicity synchronicity, >> lldb_private::CommandReturnObject& cmd_retobj, >> - Error& error) >> + Error& error, >> + const lldb_private::ExecutionContext& exe_ctx) >> { >> return false; >> } >> >> Modified: lldb/trunk/include/lldb/Interpreter/ScriptInterpreterPython.h >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/ScriptInterpreterPython.h?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/include/lldb/Interpreter/ScriptInterpreterPython.h (original) >> +++ lldb/trunk/include/lldb/Interpreter/ScriptInterpreterPython.h Wed Oct 1 >> 16:47:29 2014 >> @@ -146,7 +146,8 @@ public: >> const char* args, >> ScriptedCommandSynchronicity synchronicity, >> lldb_private::CommandReturnObject& cmd_retobj, >> - Error& error); >> + Error& error, >> + const lldb_private::ExecutionContext& exe_ctx); >> >> Error >> GenerateFunction(const char *signature, const StringList &input); >> >> Modified: lldb/trunk/scripts/Python/python-swigsafecast.swig >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/Python/python-swigsafecast.swig?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/scripts/Python/python-swigsafecast.swig (original) >> +++ lldb/trunk/scripts/Python/python-swigsafecast.swig Wed Oct 1 16:47:29 >> 2014 >> @@ -126,3 +126,10 @@ SBTypeToSWIGWrapper (lldb::SBCommandRetu >> { >> return SWIG_NewPointerObj((void *) cmd_ret_obj_sb, >> SWIGTYPE_p_lldb__SBCommandReturnObject, 0); >> } >> + >> +template <> >> +PyObject* >> +SBTypeToSWIGWrapper (lldb::SBExecutionContext* ctx_sb) >> +{ >> + return SWIG_NewPointerObj((void *) ctx_sb, >> SWIGTYPE_p_lldb__SBExecutionContext, 0); >> +} >> >> Modified: lldb/trunk/scripts/Python/python-wrapper.swig >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/Python/python-wrapper.swig?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/scripts/Python/python-wrapper.swig (original) >> +++ lldb/trunk/scripts/Python/python-wrapper.swig Wed Oct 1 16:47:29 2014 >> @@ -770,13 +770,15 @@ LLDBSwigPythonCallCommand >> const char *session_dictionary_name, >> lldb::DebuggerSP& debugger, >> const char* args, >> - lldb_private::CommandReturnObject& cmd_retobj >> + lldb_private::CommandReturnObject& cmd_retobj, >> + lldb::ExecutionContextRefSP exe_ctx_ref_sp >> ) >> { >> >> lldb::SBCommandReturnObject cmd_retobj_sb(&cmd_retobj); >> SBCommandReturnObjectReleaser cmd_retobj_sb_releaser(cmd_retobj_sb); >> lldb::SBDebugger debugger_sb(debugger); >> + lldb::SBExecutionContext exe_ctx_sb(exe_ctx_ref_sp); >> >> bool retval = false; >> >> @@ -791,7 +793,12 @@ LLDBSwigPythonCallCommand >> // pass the pointer-to cmd_retobj_sb or watch the underlying object >> disappear from under you >> // see comment above for SBCommandReturnObjectReleaser for further >> details >> PyObject* pvalue = NULL; >> - pvalue = pfunc(debugger_sb, args, &cmd_retobj_sb, session_dict = >> FindSessionDictionary(session_dictionary_name)); >> + >> + PyCallable::argc argc = pfunc.GetNumArguments(); >> + if (argc.num_args == 5 || argc.varargs == true) >> + pvalue = pfunc(debugger_sb, args, exe_ctx_sb, &cmd_retobj_sb, >> session_dict = FindSessionDictionary(session_dictionary_name)); >> + else >> + pvalue = pfunc(debugger_sb, args, &cmd_retobj_sb, session_dict >> = FindSessionDictionary(session_dictionary_name)); >> >> Py_XINCREF (session_dict); >> Py_XDECREF (pvalue); >> >> Modified: lldb/trunk/source/API/SBCommandInterpreter.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBCommandInterpreter.cpp?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/source/API/SBCommandInterpreter.cpp (original) >> +++ lldb/trunk/source/API/SBCommandInterpreter.cpp Wed Oct 1 16:47:29 2014 >> @@ -479,7 +479,8 @@ LLDBSwigPythonCallCommand (const char *p >> const char *session_dictionary_name, >> lldb::DebuggerSP& debugger, >> const char* args, >> - lldb_private::CommandReturnObject &cmd_retobj); >> + lldb_private::CommandReturnObject &cmd_retobj, >> + lldb::ExecutionContextRefSP exe_ctx_ref_sp); >> >> extern "C" bool >> LLDBSwigPythonCallModuleInit (const char *python_module_name, >> >> Modified: lldb/trunk/source/API/SBExecutionContext.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBExecutionContext.cpp?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/source/API/SBExecutionContext.cpp (original) >> +++ lldb/trunk/source/API/SBExecutionContext.cpp Wed Oct 1 16:47:29 2014 >> @@ -29,6 +29,11 @@ m_exe_ctx_sp(rhs.m_exe_ctx_sp) >> { >> } >> >> +SBExecutionContext::SBExecutionContext (lldb::ExecutionContextRefSP >> exe_ctx_ref_sp) : >> +m_exe_ctx_sp(exe_ctx_ref_sp) >> +{ >> +} >> + >> SBExecutionContext::SBExecutionContext (const lldb::SBTarget &target) : >> m_exe_ctx_sp(new ExecutionContextRef()) >> { >> >> Modified: lldb/trunk/source/Commands/CommandObjectCommands.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectCommands.cpp?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/source/Commands/CommandObjectCommands.cpp (original) >> +++ lldb/trunk/source/Commands/CommandObjectCommands.cpp Wed Oct 1 16:47:29 >> 2014 >> @@ -1366,7 +1366,8 @@ protected: >> raw_command_line, >> m_synchro, >> result, >> - error) == false) >> + error, >> + m_exe_ctx) == >> false) >> { >> result.AppendError(error.AsCString()); >> result.SetStatus(eReturnStatusFailed); >> >> Modified: lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp (original) >> +++ lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp Wed Oct 1 >> 16:47:29 2014 >> @@ -2510,7 +2510,8 @@ ScriptInterpreterPython::RunScriptBasedC >> const char* args, >> ScriptedCommandSynchronicity >> synchronicity, >> >> lldb_private::CommandReturnObject& cmd_retobj, >> - Error& error) >> + Error& error, >> + const >> lldb_private::ExecutionContext& exe_ctx) >> { >> if (!impl_function) >> { >> @@ -2525,6 +2526,7 @@ ScriptInterpreterPython::RunScriptBasedC >> } >> >> lldb::DebuggerSP debugger_sp = >> m_interpreter.GetDebugger().shared_from_this(); >> + lldb::ExecutionContextRefSP exe_ctx_ref_sp(new >> ExecutionContextRef(exe_ctx)); >> >> if (!debugger_sp.get()) >> { >> @@ -2548,7 +2550,8 @@ ScriptInterpreterPython::RunScriptBasedC >> m_dictionary_name.c_str(), >> debugger_sp, >> args, >> - cmd_retobj); >> + cmd_retobj, >> + exe_ctx_ref_sp); >> } >> >> if (!ret_val) >> >> Modified: lldb/trunk/test/functionalities/command_script/TestCommandScript.py >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/command_script/TestCommandScript.py?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/test/functionalities/command_script/TestCommandScript.py >> (original) >> +++ lldb/trunk/test/functionalities/command_script/TestCommandScript.py Wed >> Oct 1 16:47:29 2014 >> @@ -40,6 +40,7 @@ class CmdPythonTestCase(TestBase): >> self.runCmd('command script delete tell_async', check=False) >> self.runCmd('command script delete tell_curr', check=False) >> self.runCmd('command script delete bug11569', check=False) >> + self.runCmd('command script delete takes_exe_ctx', check=False) >> >> # Execute the cleanup function during test case tear down. >> self.addTearDownHook(cleanup) >> @@ -108,6 +109,9 @@ class CmdPythonTestCase(TestBase): >> substrs = ['running async']) >> self.expect("tell_curr", >> substrs = ['I am running sync']) >> + >> +# check that the execution context is passed in to commands that ask for it >> + self.expect("takes_exe_ctx", substrs = ["a.out"]) >> >> # Test that a python command can redefine itself >> self.expect('command script add -f foobar welcome -h "just some >> help"') >> >> Modified: lldb/trunk/test/functionalities/command_script/py_import >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/command_script/py_import?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/test/functionalities/command_script/py_import (original) >> +++ lldb/trunk/test/functionalities/command_script/py_import Wed Oct 1 >> 16:47:29 2014 >> @@ -9,3 +9,4 @@ command script import mysto.py --allow-r >> command script add tell_sync --function welcome.check_for_synchro >> --synchronicity sync >> command script add tell_async --function welcome.check_for_synchro >> --synchronicity async >> command script add tell_curr --function welcome.check_for_synchro >> --synchronicity curr >> +command script add takes_exe_ctx --function welcome.takes_exe_ctx >> >> Modified: lldb/trunk/test/functionalities/command_script/welcome.py >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/command_script/welcome.py?rev=218834&r1=218833&r2=218834&view=diff >> ============================================================================== >> --- lldb/trunk/test/functionalities/command_script/welcome.py (original) >> +++ lldb/trunk/test/functionalities/command_script/welcome.py Wed Oct 1 >> 16:47:29 2014 >> @@ -30,3 +30,6 @@ def check_for_synchro(debugger, args, re >> if debugger.GetAsync() == False: >> print >>result, ('I am running sync') >> >> +def takes_exe_ctx(debugger, args, exe_ctx, result, dict): >> + print >>result, str(exe_ctx.GetTarget()) >> + >> >> >> _______________________________________________ >> lldb-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits > Thanks, - Enrico 📩 egranata@.com ☎️ 27683
_______________________________________________ lldb-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
