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

Reply via email to