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

Reply via email to