<rdar://problem/13010007>
authorGreg Clayton <gclayton@apple.com>
Fri, 18 Jan 2013 23:41:08 +0000 (23:41 +0000)
committerGreg Clayton <gclayton@apple.com>
Fri, 18 Jan 2013 23:41:08 +0000 (23:41 +0000)
commita4d8747d0f52e12b905b1dd61b117605021b14db
treefcad3a3fbeddb9594377b956508d1e548461995c
parent162b22c155876b2e63468fbb10865a1063114da7
<rdar://problem/13010007>

Added the ability for OS plug-ins to lazily populate the thread this. The python OS plug-in classes can now implement the following method:

class OperatingSystemPlugin:
  def create_thread(self, tid, context):
    # Return a dictionary for a new thread to create it on demand

This will add a new thread to the thread list if it doesn't already exist. The example code in lldb/examples/python/operating_system.py has been updated to show how this call us used.

Cleaned up the code in PythonDataObjects.cpp/h:
- renamed all classes that started with PythonData* to be Python*.
- renamed PythonArray to PythonList. Cleaned up the code to use inheritance where
- Centralized the code that does ref counting in the PythonObject class to a single function.
- Made the "bool PythonObject::Reset(PyObject *)" function be virtual so each subclass can correctly check to ensure a PyObject is of the right type before adopting the object.
- Cleaned up all APIs and added new constructors for the Python* classes to they can all construct form:
- PyObject *
- const PythonObject &
- const lldb::ScriptInterpreterObjectSP &

Cleaned up code in ScriptInterpreterPython:
- Made calling python functions safer by templatizing the production of value formats. Python specifies the value formats based on built in C types (long, long long, etc), and code often uses typedefs for uint32_t, uint64_t, etc when passing arguments down to python. We will now always produce correct value formats as the templatized code will "do the right thing" all the time.
- Fixed issues with the ScriptInterpreterPython::Locker where entering the session and leaving the session had a bunch of issues that could cause the "lldb" module globals lldb.debugger, lldb.target, lldb.process, lldb.thread, and lldb.frame to not be initialized.

llvm-svn: 172873
17 files changed:
lldb/examples/python/operating_system.py
lldb/include/lldb/API/SBProcess.h
lldb/include/lldb/Interpreter/PythonDataObjects.h
lldb/include/lldb/Interpreter/ScriptInterpreter.h
lldb/include/lldb/Interpreter/ScriptInterpreterPython.h
lldb/include/lldb/Target/OperatingSystem.h
lldb/include/lldb/Target/Process.h
lldb/include/lldb/lldb-forward.h
lldb/scripts/Python/interface/SBProcess.i
lldb/source/API/SBProcess.cpp
lldb/source/Interpreter/PythonDataObjects.cpp
lldb/source/Interpreter/ScriptInterpreterPython.cpp
lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.cpp
lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.h
lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp
lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.h
lldb/source/Target/Process.cpp