[Lldb-commits] [lldb] r180975 - <rdar://problem/11558812>
Malea, Daniel
daniel.malea at intel.com
Fri May 3 10:54:03 PDT 2013
Can you please put test cases in the 'test' directory, instead of the
commit message. It's not exactly convenient to run it this way.
Dan
On 2013-05-02 7:57 PM, "Enrico Granata" <egranata at apple.com> wrote:
>Author: enrico
>Date: Thu May 2 18:57:33 2013
>New Revision: 180975
>
>URL: http://llvm.org/viewvc/llvm-project?rev=180975&view=rev
>Log:
><rdar://problem/11558812>
>
>Allow command script import to load packages.
>
>e.g.:
>egranata$ ./lldb
>(lldb) command script import lldb.macosx.crashlog
>"crashlog" and "save_crashlog" command installed, use the "--help" option
>for detailed help
>"malloc_info", "ptr_refs", "cstr_refs", and "objc_refs" commands have
>been installed, use the "--help" options on these commands for detailed
>help.
>The "unwind-diagnose" command has been installed, type "help
>unwind-diagnose" for detailed help.
>(lldb)
>
>./lldb
>(lldb) command script import theFoo
>I am happy
>(lldb) fbc
>àèìòù
>(lldb)
>
>egranata$ ls theFoo/
>__init__.py theBar.py
>
>egranata$ cat theFoo/__init__.py
>import lldb
>import theBar
>
>def __lldb_init_module(debugger, internal_dict):
> print "I am happy"
> debugger.HandleCommand("command script add -f theFoo.theBar.theCommand
>fbc")
> return None
>
>egranata$ cat theFoo/theBar.py
>#encoding=utf-8
>
>def theCommand(debugger, command, result, internal_dict):
> result.PutCString(u"àèìòù")
> return None
>
>
>Modified:
> lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
>
>Modified: lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
>URL:
>http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/ScriptIn
>terpreterPython.cpp?rev=180975&r1=180974&r2=180975&view=diff
>==========================================================================
>====
>--- lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp (original)
>+++ lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp Thu May 2
>18:57:33 2013
>@@ -2594,42 +2594,47 @@ ScriptInterpreterPython::LoadScriptingMo
> {
> FileSpec target_file(pathname, true);
>
>- // TODO: would we want to reject any other value?
>- if (target_file.GetFileType() == FileSpec::eFileTypeInvalid ||
>- target_file.GetFileType() == FileSpec::eFileTypeUnknown)
>- {
>- error.SetErrorString("invalid pathname");
>- return false;
>- }
>-
>- const char* directory = target_file.GetDirectory().GetCString();
>- std::string basename(target_file.GetFilename().GetCString());
>+ std::string basename;
>+ StreamString command_stream;
>
> // Before executing Pyton code, lock the GIL.
> Locker py_lock (this,
> Locker::AcquireLock | (init_session ?
>Locker::InitSession : 0),
> Locker::FreeAcquiredLock | (init_session ?
>Locker::TearDownSession : 0));
>
>- // now make sure that Python has "directory" in the search path
>- StreamString command_stream;
>- command_stream.Printf("if not (sys.path.__contains__('%s')):\n
> sys.path.insert(1,'%s');\n\n",
>- directory,
>- directory);
>- bool syspath_retval =
>ExecuteMultipleLines(command_stream.GetData(),
>ScriptInterpreter::ExecuteScriptOptions().SetEnableIO(false).SetSetLLDBGlo
>bals(false));
>- if (!syspath_retval)
>+ if (target_file.GetFileType() == FileSpec::eFileTypeInvalid ||
>+ target_file.GetFileType() == FileSpec::eFileTypeUnknown ||
>+ target_file.GetFileType() == FileSpec::eFileTypeDirectory )
> {
>- error.SetErrorString("Python sys.path handling failed");
>- return false;
>+ // if not a filename, try to just plain import
>+ basename = pathname;
> }
>-
>- // strip .py or .pyc extension
>- ConstString extension = target_file.GetFileNameExtension();
>- if (extension)
>+ else
> {
>- if (::strcmp(extension.GetCString(), "py") == 0)
>- basename.resize(basename.length()-3);
>- else if(::strcmp(extension.GetCString(), "pyc") == 0)
>- basename.resize(basename.length()-4);
>+ const char* directory =
>target_file.GetDirectory().GetCString();
>+ std::string basename(target_file.GetFilename().GetCString());
>+
>+ // now make sure that Python has "directory" in the search
>path
>+ StreamString command_stream;
>+ command_stream.Printf("if not
>(sys.path.__contains__('%s')):\n sys.path.insert(1,'%s');\n\n",
>+ directory,
>+ directory);
>+ bool syspath_retval =
>ExecuteMultipleLines(command_stream.GetData(),
>ScriptInterpreter::ExecuteScriptOptions().SetEnableIO(false).SetSetLLDBGlo
>bals(false));
>+ if (!syspath_retval)
>+ {
>+ error.SetErrorString("Python sys.path handling failed");
>+ return false;
>+ }
>+
>+ // strip .py or .pyc extension
>+ ConstString extension = target_file.GetFileNameExtension();
>+ if (extension)
>+ {
>+ if (::strcmp(extension.GetCString(), "py") == 0)
>+ basename.resize(basename.length()-3);
>+ else if(::strcmp(extension.GetCString(), "pyc") == 0)
>+ basename.resize(basename.length()-4);
>+ }
> }
>
> // check if the module is already import-ed
>
>
>_______________________________________________
>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