Files
clang-p2996/lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.h
Zachary Turner 0641ca1a2d Remove ScriptInterpreterObject.
This removes ScriptInterpreterObject from the codebase completely.
Places that used to rely on ScriptInterpreterObject now use
StructuredData::Object and its derived classes.  To support this,
a new type of StructuredData object is introduced, called
StructuredData::Generic, which stores a void*.  Internally within
the python library, StructuredPythonObject subclasses this
StructuredData::Generic class so that it can addref and decref
the python object on construction and destruction.

Additionally, all of the classes in PythonDataObjects.h such
as PythonList, PythonDictionary, etc now provide a method to
create an instance of the corresponding StructuredData type.  For
example, there is PythonDictionary::CreateStructuredDictionary.
To eliminate dependencies on PythonDataObjects for external
callers, all ScriptInterpreter methods now return only
StructuredData classes

The rest of the changes in this CL are focused on fixing up
users of PythonDataObjects classes to use the new StructuredData
classes.

llvm-svn: 232534
2015-03-17 20:04:04 +00:00

112 lines
3.7 KiB
C++

//===-- OperatingSystemPython.h ---------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef LLDB_DISABLE_PYTHON
#ifndef liblldb_OperatingSystemPython_h_
#define liblldb_OperatingSystemPython_h_
// C Includes
// C++ Includes
// Other libraries and framework includes
#include "lldb/Core/StructuredData.h"
#include "lldb/Target/OperatingSystem.h"
class DynamicRegisterInfo;
namespace lldb_private
{
class ScriptInterpreter;
}
class OperatingSystemPython : public lldb_private::OperatingSystem
{
public:
//------------------------------------------------------------------
// Static Functions
//------------------------------------------------------------------
static lldb_private::OperatingSystem *
CreateInstance (lldb_private::Process *process, bool force);
static void
Initialize();
static void
Terminate();
static lldb_private::ConstString
GetPluginNameStatic();
static const char *
GetPluginDescriptionStatic();
//------------------------------------------------------------------
// Class Methods
//------------------------------------------------------------------
OperatingSystemPython (lldb_private::Process *process,
const lldb_private::FileSpec &python_module_path);
virtual
~OperatingSystemPython ();
//------------------------------------------------------------------
// lldb_private::PluginInterface Methods
//------------------------------------------------------------------
virtual lldb_private::ConstString
GetPluginName();
virtual uint32_t
GetPluginVersion();
//------------------------------------------------------------------
// lldb_private::OperatingSystem Methods
//------------------------------------------------------------------
virtual bool
UpdateThreadList (lldb_private::ThreadList &old_thread_list,
lldb_private::ThreadList &real_thread_list,
lldb_private::ThreadList &new_thread_list);
virtual void
ThreadWasSelected (lldb_private::Thread *thread);
virtual lldb::RegisterContextSP
CreateRegisterContextForThread (lldb_private::Thread *thread,
lldb::addr_t reg_data_addr);
virtual lldb::StopInfoSP
CreateThreadStopReason (lldb_private::Thread *thread);
//------------------------------------------------------------------
// Method for lazy creation of threads on demand
//------------------------------------------------------------------
virtual lldb::ThreadSP
CreateThread (lldb::tid_t tid, lldb::addr_t context);
protected:
bool IsValid() const
{
return m_python_object_sp && m_python_object_sp->IsValid();
}
lldb::ThreadSP CreateThreadFromThreadInfo(lldb_private::StructuredData::Dictionary &thread_dict,
lldb_private::ThreadList &core_thread_list, lldb_private::ThreadList &old_thread_list,
std::vector<bool> &core_used_map, bool *did_create_ptr);
DynamicRegisterInfo *
GetDynamicRegisterInfo ();
lldb::ValueObjectSP m_thread_list_valobj_sp;
std::unique_ptr<DynamicRegisterInfo> m_register_info_ap;
lldb_private::ScriptInterpreter *m_interpreter;
lldb_private::StructuredData::ObjectSP m_python_object_sp;
};
#endif // #ifndef liblldb_OperatingSystemPython_h_
#endif // #ifndef LLDB_DISABLE_PYTHON