summaryrefslogtreecommitdiffstats
path: root/lldb/source/Interpreter/ScriptInterpreterPython.cpp
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2013-05-02 23:57:33 +0000
committerEnrico Granata <egranata@apple.com>2013-05-02 23:57:33 +0000
commitbfa9fb134bd951b4b6fff94d0df07f5bb277fd21 (patch)
treeda53cd3e077a3e9f5b906d74c0c67e7033333e74 /lldb/source/Interpreter/ScriptInterpreterPython.cpp
parent48bd5fddf3da126b5852d84149bd22728bd38f76 (diff)
downloadbcm5719-llvm-bfa9fb134bd951b4b6fff94d0df07f5bb277fd21.tar.gz
bcm5719-llvm-bfa9fb134bd951b4b6fff94d0df07f5bb277fd21.zip
<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 llvm-svn: 180975
Diffstat (limited to 'lldb/source/Interpreter/ScriptInterpreterPython.cpp')
-rw-r--r--lldb/source/Interpreter/ScriptInterpreterPython.cpp59
1 files changed, 32 insertions, 27 deletions
diff --git a/lldb/source/Interpreter/ScriptInterpreterPython.cpp b/lldb/source/Interpreter/ScriptInterpreterPython.cpp
index 263261e9f47..8d41f71d83d 100644
--- a/lldb/source/Interpreter/ScriptInterpreterPython.cpp
+++ b/lldb/source/Interpreter/ScriptInterpreterPython.cpp
@@ -2594,42 +2594,47 @@ ScriptInterpreterPython::LoadScriptingModule (const char* pathname,
{
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).SetSetLLDBGlobals(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).SetSetLLDBGlobals(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
OpenPOWER on IntegriCloud