[Lldb-commits] [PATCH] D15209: Fix script import --allow-reload on Python 3

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Thu Dec 3 14:18:53 PST 2015


zturner created this revision.
zturner added reviewers: granata.enrico, tfiala.
zturner added a subscriber: lldb-commits.

I think this patch may require some xcode changes.  This is because of the `from six.moves import reload_module`.  In the CMake build as part of the swig wrapper python script we symlink the `six` module from `lldb/third_party/Python/modules/six` to be in LLDB's private `lib/site-packages` directory.  This way we can `import six` from within lldb.  

This may not be happening on the Xcode build yet, which if so this will fail on Xcode build.  Would someone mind helping me out with this part?  LMK if I should submit as is and you fix up the xcode build later, or you want to do it as one patch.

http://reviews.llvm.org/D15209

Files:
  source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp

Index: source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
===================================================================
--- source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
+++ source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
@@ -286,10 +286,15 @@
     PyRun_SimpleString (run_string.GetData());
 
     run_string.Clear();
-
     run_string.Printf ("run_one_line (%s, 'import copy, keyword, os, re, sys, uuid, lldb')", m_dictionary_name.c_str());
     PyRun_SimpleString (run_string.GetData());
 
+    // Reloading modules requires a different syntax in Python 2 and Python 3.  This provides
+    // a consistent syntax no matter what version of Python.
+    run_string.Clear();
+    run_string.Printf("run_one_line (%s, 'from six.moves import reload_module')", m_dictionary_name.c_str());
+    PyRun_SimpleString(run_string.GetData());
+
     // WARNING: temporary code that loads Cocoa formatters - this should be done on a per-platform basis rather than loading the whole set
     // and letting the individual formatter classes exploit APIs to check whether they can/cannot do their task
     run_string.Clear();
@@ -2626,9 +2631,9 @@
         if (was_imported)
         {
             if (!was_imported_locally)
-                command_stream.Printf("import %s ; reload(%s)",basename.c_str(),basename.c_str());
+                command_stream.Printf("import %s ; reload_module(%s)",basename.c_str(),basename.c_str());
             else
-                command_stream.Printf("reload(%s)",basename.c_str());
+                command_stream.Printf("reload_module(%s)",basename.c_str());
         }
         else
             command_stream.Printf("import %s",basename.c_str());


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15209.41802.patch
Type: text/x-patch
Size: 1743 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20151203/9f633b23/attachment.bin>


More information about the lldb-commits mailing list