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());
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());
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits