PythonDataObjects.cpp revision 52ebc0aab1fdecb634801deceeddd71a14c2148c
1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//===-- PythonDataObjects.cpp ------------------------------------*- C++ -*-===// 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// The LLVM Compiler Infrastructure 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This file is distributed under the University of Illinois Open Source 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// License. See LICENSE.TXT for details. 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//===----------------------------------------------------------------------===// 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// In order to guarantee correct working with Python, Python.h *MUST* be 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// the *FIRST* header file included here. 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef LLDB_DISABLE_PYTHON 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Python is disabled in this build 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if defined (__APPLE__) 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <Python/Python.h> 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <Python.h> 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "lldb/Interpreter/PythonDataObjects.h" 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "lldb/Interpreter/ScriptInterpreter.h" 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovusing namespace lldb_private; 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovusing namespace lldb; 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------- 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// PythonObject 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------- 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonObject::PythonObject (const lldb::ScriptInterpreterObjectSP &script_object_sp) : 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_py_obj (NULL) 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (script_object_sp) 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Reset ((PyObject *)script_object_sp->GetObject()); 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------- 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// PythonString 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------- 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString::PythonString (PyObject *py_obj) : 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(py_obj) 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString::PythonString (const PythonObject &object) : 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(object.GetPythonObject()) 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString::PythonString (const lldb::ScriptInterpreterObjectSP &script_object_sp) : 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject (script_object_sp) 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString::PythonString (const char* string) : 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(PyString_FromString(string)) 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString::PythonString () : 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject() 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString::~PythonString () 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString::Reset (PyObject *py_obj) 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (py_obj && PyString_Check(py_obj)) 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonObject::Reset(py_obj); 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject::Reset(NULL); 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return py_obj == NULL; 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovconst char* 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString::GetString() const 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj) 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PyString_AsString(m_py_obj); 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovsize_t 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString::GetSize() const 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj) 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PyString_Size(m_py_obj); 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString::SetString (const char* string) 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject::Reset(PyString_FromString(string)); 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------- 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// PythonInteger 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------- 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonInteger::PythonInteger (PyObject *py_obj) : 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(py_obj) 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonInteger::PythonInteger (const PythonObject &object) : 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(object.GetPythonObject()) 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonInteger::PythonInteger (const lldb::ScriptInterpreterObjectSP &script_object_sp) : 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject (script_object_sp) 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonInteger::PythonInteger (int64_t value) : 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(PyInt_FromLong(value)) 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonInteger::~PythonInteger () 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonInteger::Reset (PyObject *py_obj) 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (py_obj && PyInt_Check(py_obj)) 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonObject::Reset(py_obj); 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject::Reset(NULL); 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return py_obj == NULL; 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint64_t 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonInteger::GetInteger() 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj) 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PyInt_AsLong(m_py_obj); 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return UINT64_MAX; 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonInteger::SetInteger (int64_t value) 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject::Reset(PyInt_FromLong(value)); 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------- 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// PythonList 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------- 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::PythonList () : 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(PyList_New(0)) 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::PythonList (uint32_t count) : 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(PyList_New(count)) 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::PythonList (PyObject *py_obj) : 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(py_obj) 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::PythonList (const PythonObject &object) : 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(object.GetPythonObject()) 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::PythonList (const lldb::ScriptInterpreterObjectSP &script_object_sp) : 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject (script_object_sp) 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::~PythonList () 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::Reset (PyObject *py_obj) 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (py_obj && PyList_Check(py_obj)) 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonObject::Reset(py_obj); 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject::Reset(NULL); 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return py_obj == NULL; 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovuint32_t 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::GetSize() 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj) 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PyList_GET_SIZE(m_py_obj); 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonObject 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::GetItemAtIndex (uint32_t index) 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj) 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonObject(PyList_GetItem(m_py_obj, index)); 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::SetItemAtIndex (uint32_t index, const PythonObject & object) 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj && object) 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PyList_SetItem(m_py_obj, index, object.GetPythonObject()); 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList::AppendItem (const PythonObject &object) 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj && object) 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PyList_Append(m_py_obj, object.GetPythonObject()); 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------- 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// PythonDictionary 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------- 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::PythonDictionary () : 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(PyDict_New()) 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::PythonDictionary (PyObject *py_obj) : 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(py_obj) 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::PythonDictionary (const PythonObject &object) : 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject(object.GetPythonObject()) 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::PythonDictionary (const lldb::ScriptInterpreterObjectSP &script_object_sp) : 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject (script_object_sp) 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::~PythonDictionary () 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::Reset (PyObject *py_obj) 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (py_obj && PyDict_Check(py_obj)) 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonObject::Reset(py_obj); 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonObject::Reset(NULL); 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return py_obj == NULL; 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovuint32_t 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::GetSize() 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj) 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PyDict_Size(m_py_obj); 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonObject 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::GetItemForKey (const char *key) const 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (key && key[0]) 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PythonString python_key(key); 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return GetItemForKey(python_key); 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonObject 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::GetItemForKey (const PythonString &key) const 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj && key) 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonObject(PyDict_GetItem(m_py_obj, key.GetPythonObject())); 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonObject(); 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovconst char * 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::GetItemForKeyAsString (const PythonString &key, const char *fail_value) const 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj && key) 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PyObject *py_obj = PyDict_GetItem(m_py_obj, key.GetPythonObject()); 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (py_obj && PyString_Check(py_obj)) 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PyString_AsString(py_obj); 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return fail_value; 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint64_t 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::GetItemForKeyAsInteger (const PythonString &key, int64_t fail_value) const 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj && key) 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PyObject *py_obj = PyDict_GetItem(m_py_obj, key.GetPythonObject()); 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (py_obj && PyInt_Check(py_obj)) 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PyInt_AsLong(py_obj); 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return fail_value; 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonList 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::GetKeys () const 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj) 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonList(PyDict_Keys(m_py_obj)); 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonList(); 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonString 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::GetKeyAtPosition (uint32_t pos) const 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PyObject *key, *value; 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Py_ssize_t pos_iter = 0; 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj) 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov while (PyDict_Next(m_py_obj, &pos_iter, &key, &value)) 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pos-- == 0) 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonString(key); 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonString(); 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonObject 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::GetValueAtPosition (uint32_t pos) const 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PyObject *key, *value; 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Py_ssize_t pos_iter = 0; 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!m_py_obj) 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov while (PyDict_Next(m_py_obj, &pos_iter, &key, &value)) { 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pos-- == 0) 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonObject(value); 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PythonObject(); 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPythonDictionary::SetItemForKey (const PythonString &key, const PythonObject &value) 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_py_obj && key && value) 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PyDict_SetItem(m_py_obj, key.GetPythonObject(), value.GetPythonObject()); 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov