<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
			
			
This commit is contained in:
		
							parent
							
								
									48bd5fddf3
								
							
						
					
					
						commit
						bfa9fb134b
					
				| 
						 | 
				
			
			@ -2594,22 +2594,26 @@ 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));
 | 
			
		||||
        
 | 
			
		||||
        if (target_file.GetFileType() == FileSpec::eFileTypeInvalid ||
 | 
			
		||||
            target_file.GetFileType() == FileSpec::eFileTypeUnknown ||
 | 
			
		||||
            target_file.GetFileType() == FileSpec::eFileTypeDirectory )
 | 
			
		||||
        {
 | 
			
		||||
            // if not a filename, try to just plain import
 | 
			
		||||
            basename = pathname;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            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",
 | 
			
		||||
| 
						 | 
				
			
			@ -2631,6 +2635,7 @@ ScriptInterpreterPython::LoadScriptingModule (const char* pathname,
 | 
			
		|||
                else if(::strcmp(extension.GetCString(), "pyc") == 0)
 | 
			
		||||
                    basename.resize(basename.length()-4);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // check if the module is already import-ed
 | 
			
		||||
        command_stream.Clear();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue