PythonDataObjects.cpp revision c66662664c44f34f891f39e4e416f766c7347f3c
1c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata//===-- PythonDataObjects.cpp ------------------------------------*- C++ -*-===// 2c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// 3c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// The LLVM Compiler Infrastructure 4c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// 5c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// This file is distributed under the University of Illinois Open Source 6c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// License. See LICENSE.TXT for details. 7c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// 8c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata//===----------------------------------------------------------------------===// 9c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 10c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// In order to guarantee correct working with Python, Python.h *MUST* be 11c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// the *FIRST* header file included here. 12c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#ifdef LLDB_DISABLE_PYTHON 13c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 14c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// Python is disabled in this build 15c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 16c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#else 17c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 18c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#if defined (__APPLE__) 19c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#include <Python/Python.h> 20c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#else 21c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#include <Python.h> 22c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#endif 23c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 24c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#include "PythonDataObjects.h" 25c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 26c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatausing namespace lldb_private; 27c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatausing namespace lldb; 28c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 29c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject::PythonDataObject (PyObject* object) : m_object(object) 30c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 31c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 32c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 33c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataString* 34c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject::GetStringObject () 35c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 36c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return new PythonDataString(GetPythonObject()); 37c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 38c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 39c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataInteger* 40c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject::GetIntegerObject () 41c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 42c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return new PythonDataInteger(GetPythonObject()); 43c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 44c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 45c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray* 46c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject::GetArrayObject() 47c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 48c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return new PythonDataArray(GetPythonObject()); 49c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 50c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 51c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary* 52c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject::GetDictionaryObject() 53c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 54c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return new PythonDataDictionary(GetPythonObject()); 55c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 56c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 57c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataInteger::PythonDataInteger (PyObject* object) : m_object(object) 58c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 59c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (!PyInt_Check(GetPythonObject())) 60c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset(); 61c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 62c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 63c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataInteger::~PythonDataInteger () 64c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 65c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 66c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 67c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataInteger::PythonDataInteger (int64_t value) : m_object(PyInt_FromLong(value)) 68c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 69c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 70c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 71c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granataint64_t 72c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataInteger::GetInteger() 73c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 74c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 75c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return PyInt_AsLong(GetPythonObject()); 76c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata else 77c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return UINT64_MAX; 78c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 79c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 80c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 81c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataInteger::SetInteger (int64_t value) 82c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 83c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset(PyInt_FromLong(value)); 84c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 85c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 86c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataString::PythonDataString (PyObject* object) : m_object(object) 87c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 88c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (!PyString_Check(GetPythonObject())) 89c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset();} 90c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 91c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataString::PythonDataString (const char* string) : m_object(PyString_FromString(string)) 92c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 93c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 94c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 95c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataString::~PythonDataString () 96c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 97c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 98c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 99c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granataconst char* 100c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataString::GetString() 101c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 102c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 103c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return PyString_AsString(GetPythonObject()); 104c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 105c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 106c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 107c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 108c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataString::SetString (const char* string) 109c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 110c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset(PyString_FromString(string)); 111c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 112c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 113c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray::PythonDataArray (uint32_t count) : m_object(PyList_New(count)) 114c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 115c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 116c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 117c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray::PythonDataArray (PyObject* object) : m_object(object) 118c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 119c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (!PyList_Check(GetPythonObject())) 120c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset(); 121c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 122c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 123c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray::~PythonDataArray () 124c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 125c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 126c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 127c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatauint32_t 128c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray::GetSize() 129c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 130c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 131c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return PyList_GET_SIZE(GetPythonObject()); 132c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return 0; 133c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 134c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 135c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject* 136c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray::GetItemAtIndex (uint32_t index) 137c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 138c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 139c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return new PythonDataObject(PyList_GetItem(GetPythonObject(), index)); 140c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 141c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 142c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 143c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 144c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray::SetItemAtIndex (uint32_t index, PythonDataObject* object) 145c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 146c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object && object && *object) 147c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata PyList_SetItem(GetPythonObject(), index, object->GetPythonObject()); 148c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 149c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 150c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 151c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray::AppendItem (PythonDataObject* object) 152c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 153c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object && object && *object) 154c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata PyList_Append(GetPythonObject(), object->GetPythonObject()); 155c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 156c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 157c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::PythonDataDictionary () : m_object(PyDict_New()) 158c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 159c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 160c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 161c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::PythonDataDictionary (PyObject* object) : m_object(object) 162c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 163c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (!PyDict_Check(GetPythonObject())) 164c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset(); 165c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 166c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 167c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::~PythonDataDictionary () 168c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 169c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 170c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 171c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatauint32_t 172c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::GetSize() 173c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 174c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 175c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return PyDict_Size(GetPythonObject()); 176c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return 0; 177c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 178c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 179c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject* 180c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::GetItemForKey (PythonDataString* key) 181c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 182c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object && key && *key) 183c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return new PythonDataObject(PyDict_GetItem(GetPythonObject(), key->GetPythonObject())); 184c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 185c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 186c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 187c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray* 188c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::GetKeys () 189c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 190c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 191c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return new PythonDataArray(PyDict_Keys(GetPythonObject())); 192c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 193c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 194c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 195c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataString* 196c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::GetKeyAtPosition (uint32_t pos) 197c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 198c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata PyObject *key, *value; 199c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata Py_ssize_t pos_iter = 0; 200c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 201c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (!m_object) 202c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 203c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 204c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata while (PyDict_Next(GetPythonObject(), &pos_iter, &key, &value)) { 205c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (pos-- == 0) 206c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return new PythonDataString(key); 207c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata } 208c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 209c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 210c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 211c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject* 212c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::GetValueAtPosition (uint32_t pos) 213c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 214c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata PyObject *key, *value; 215c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata Py_ssize_t pos_iter = 0; 216c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 217c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (!m_object) 218c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 219c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 220c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata while (PyDict_Next(GetPythonObject(), &pos_iter, &key, &value)) { 221c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (pos-- == 0) 222c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return new PythonDataObject(value); 223c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata } 224c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 225c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 226c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 227c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 228c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::SetItemForKey (PythonDataString* key, PythonDataObject* value) 229c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 230c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object && key && value && *key && *value) 231c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata PyDict_SetItem(GetPythonObject(), key->GetPythonObject(), value->GetPythonObject()); 232c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 233c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 234c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#endif 235