[Lldb-commits] [lldb] r218834 - 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

jingham at apple.com jingham at apple.com
Wed Oct 1 15:32:06 PDT 2014


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 <egranata at apple.com> 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
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits




More information about the lldb-commits mailing list