forked from OSchip/llvm-project
225 lines
5.4 KiB
C++
225 lines
5.4 KiB
C++
//===-- PythonDataObjects.h----------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef liblldb_PythonDataObjects_h_
|
|
#define liblldb_PythonDataObjects_h_
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
#include "lldb/lldb-defines.h"
|
|
#include "lldb/Core/ConstString.h"
|
|
#include "lldb/Core/Flags.h"
|
|
#include "lldb/Interpreter/OptionValue.h"
|
|
#include "lldb/lldb-python.h"
|
|
|
|
namespace lldb_private {
|
|
|
|
class PythonObject
|
|
{
|
|
public:
|
|
PythonObject () :
|
|
m_py_obj(NULL)
|
|
{
|
|
}
|
|
|
|
explicit PythonObject (PyObject* py_obj) :
|
|
m_py_obj(NULL)
|
|
{
|
|
Reset (py_obj);
|
|
}
|
|
|
|
PythonObject (const PythonObject &rhs) :
|
|
m_py_obj(NULL)
|
|
{
|
|
Reset (rhs.m_py_obj);
|
|
}
|
|
|
|
explicit PythonObject (const lldb::ScriptInterpreterObjectSP &script_object_sp);
|
|
|
|
virtual
|
|
~PythonObject ()
|
|
{
|
|
Reset (NULL);
|
|
}
|
|
|
|
bool
|
|
Reset (const PythonObject &object)
|
|
{
|
|
return Reset(object.get());
|
|
}
|
|
|
|
virtual bool
|
|
Reset (PyObject* py_obj = NULL)
|
|
{
|
|
if (py_obj != m_py_obj)
|
|
{
|
|
Py_XDECREF(m_py_obj);
|
|
m_py_obj = py_obj;
|
|
Py_XINCREF(m_py_obj);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void
|
|
Dump () const
|
|
{
|
|
if (m_py_obj)
|
|
_PyObject_Dump (m_py_obj);
|
|
else
|
|
puts ("NULL");
|
|
}
|
|
|
|
void
|
|
Dump (Stream &strm) const;
|
|
|
|
PyObject*
|
|
get () const
|
|
{
|
|
return m_py_obj;
|
|
}
|
|
|
|
PythonString
|
|
Repr ();
|
|
|
|
PythonString
|
|
Str ();
|
|
|
|
explicit operator bool () const
|
|
{
|
|
return m_py_obj != NULL;
|
|
}
|
|
|
|
protected:
|
|
PyObject* m_py_obj;
|
|
};
|
|
|
|
class PythonString: public PythonObject
|
|
{
|
|
public:
|
|
|
|
PythonString ();
|
|
PythonString (PyObject *o);
|
|
PythonString (const PythonObject &object);
|
|
PythonString (const lldb::ScriptInterpreterObjectSP &script_object_sp);
|
|
PythonString (const char* string);
|
|
virtual ~PythonString ();
|
|
|
|
virtual bool
|
|
Reset (PyObject* py_obj = NULL);
|
|
|
|
const char*
|
|
GetString() const;
|
|
|
|
size_t
|
|
GetSize() const;
|
|
|
|
void
|
|
SetString (const char* string);
|
|
};
|
|
|
|
class PythonInteger: public PythonObject
|
|
{
|
|
public:
|
|
|
|
PythonInteger ();
|
|
PythonInteger (PyObject* py_obj);
|
|
PythonInteger (const PythonObject &object);
|
|
PythonInteger (const lldb::ScriptInterpreterObjectSP &script_object_sp);
|
|
PythonInteger (int64_t value);
|
|
virtual ~PythonInteger ();
|
|
|
|
virtual bool
|
|
Reset (PyObject* py_obj = NULL);
|
|
|
|
int64_t
|
|
GetInteger();
|
|
|
|
void
|
|
SetInteger (int64_t value);
|
|
};
|
|
|
|
class PythonList: public PythonObject
|
|
{
|
|
public:
|
|
|
|
PythonList (bool create_empty);
|
|
PythonList (PyObject* py_obj);
|
|
PythonList (const PythonObject &object);
|
|
PythonList (const lldb::ScriptInterpreterObjectSP &script_object_sp);
|
|
PythonList (uint32_t count);
|
|
virtual ~PythonList ();
|
|
|
|
virtual bool
|
|
Reset (PyObject* py_obj = NULL);
|
|
|
|
uint32_t
|
|
GetSize();
|
|
|
|
PythonObject
|
|
GetItemAtIndex (uint32_t index);
|
|
|
|
void
|
|
SetItemAtIndex (uint32_t index, const PythonObject &object);
|
|
|
|
void
|
|
AppendItem (const PythonObject &object);
|
|
};
|
|
|
|
class PythonDictionary: public PythonObject
|
|
{
|
|
public:
|
|
|
|
explicit PythonDictionary (bool create_empty);
|
|
PythonDictionary (PyObject* object);
|
|
PythonDictionary (const PythonObject &object);
|
|
PythonDictionary (const lldb::ScriptInterpreterObjectSP &script_object_sp);
|
|
virtual ~PythonDictionary ();
|
|
|
|
virtual bool
|
|
Reset (PyObject* object = NULL);
|
|
|
|
uint32_t GetSize();
|
|
|
|
PythonObject
|
|
GetItemForKey (const PythonString &key) const;
|
|
|
|
const char *
|
|
GetItemForKeyAsString (const PythonString &key, const char *fail_value = NULL) const;
|
|
|
|
int64_t
|
|
GetItemForKeyAsInteger (const PythonString &key, int64_t fail_value = 0) const;
|
|
|
|
PythonObject
|
|
GetItemForKey (const char *key) const;
|
|
|
|
typedef bool (*DictionaryIteratorCallback)(PythonString* key, PythonDictionary* dict);
|
|
|
|
PythonList
|
|
GetKeys () const;
|
|
|
|
PythonString
|
|
GetKeyAtPosition (uint32_t pos) const;
|
|
|
|
PythonObject
|
|
GetValueAtPosition (uint32_t pos) const;
|
|
|
|
void
|
|
SetItemForKey (const PythonString &key, PyObject *value);
|
|
|
|
void
|
|
SetItemForKey (const PythonString &key, const PythonObject& value);
|
|
};
|
|
|
|
} // namespace lldb_private
|
|
|
|
#endif // liblldb_PythonDataObjects_h_
|