PythonDataObjects.cpp revision 9565e9dde3e33483f127815b10d6e9d5b8f46049
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 189565e9dde3e33483f127815b10d6e9d5b8f46049Greg Clayton#include <stdio.h> 199565e9dde3e33483f127815b10d6e9d5b8f46049Greg Clayton 20c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#if defined (__APPLE__) 21c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#include <Python/Python.h> 22c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#else 23c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#include <Python.h> 24c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#endif 25e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton#include "lldb/Core/Stream.h" 26e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton#include "lldb/Host/File.h" 27b2e953d1d753bc725ea78f573c150493b99e2205Filipe Cabecinhas#include "lldb/Interpreter/PythonDataObjects.h" 2852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton#include "lldb/Interpreter/ScriptInterpreter.h" 29c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 30c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatausing namespace lldb_private; 31c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatausing namespace lldb; 32c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 3352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton//---------------------------------------------------------------------- 3452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton// PythonObject 3552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton//---------------------------------------------------------------------- 3652ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonObject::PythonObject (const lldb::ScriptInterpreterObjectSP &script_object_sp) : 3752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton m_py_obj (NULL) 38c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 3952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (script_object_sp) 4052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton Reset ((PyObject *)script_object_sp->GetObject()); 41c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 42c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 43e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Claytonvoid 44e15e58facd4814a2be1cc1aa385e9f9125b92993Greg ClaytonPythonObject::Dump (Stream &strm) const 45e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton{ 46e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton if (m_py_obj) 47e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton { 489565e9dde3e33483f127815b10d6e9d5b8f46049Greg Clayton FILE *file = ::tmpfile(); 49e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton if (file) 50e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton { 519565e9dde3e33483f127815b10d6e9d5b8f46049Greg Clayton ::PyObject_Print (m_py_obj, file, 0); 52e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton const long length = ftell (file); 53e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton if (length) 54e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton { 559565e9dde3e33483f127815b10d6e9d5b8f46049Greg Clayton ::rewind(file); 56e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton std::vector<char> file_contents (length,'\0'); 579565e9dde3e33483f127815b10d6e9d5b8f46049Greg Clayton const size_t length_read = ::fread (file_contents.data(), 1, file_contents.size(), file); 58e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton if (length_read > 0) 599565e9dde3e33483f127815b10d6e9d5b8f46049Greg Clayton strm.Write (file_contents.data(), length_read); 60e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton } 619565e9dde3e33483f127815b10d6e9d5b8f46049Greg Clayton ::fclose (file); 62e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton } 63e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton } 64e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton else 65e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton strm.PutCString ("NULL"); 66e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton} 67e15e58facd4814a2be1cc1aa385e9f9125b92993Greg Clayton 6852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton//---------------------------------------------------------------------- 6952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton// PythonString 7052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton//---------------------------------------------------------------------- 7152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 7252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString::PythonString (PyObject *py_obj) : 7352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(py_obj) 7412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 7512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 7612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 7752ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString::PythonString (const PythonObject &object) : 7852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(object.GetPythonObject()) 7912477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 8012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 8112477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 8252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString::PythonString (const lldb::ScriptInterpreterObjectSP &script_object_sp) : 8352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject (script_object_sp) 84c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 85c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 8652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 8752ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString::PythonString (const char* string) : 8852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(PyString_FromString(string)) 8952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton{ 9052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton} 9152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 9252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString::PythonString () : 9352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject() 94c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 95c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 96c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 9752ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString::~PythonString () 98c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 99c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 100c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 10152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Claytonbool 10252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString::Reset (PyObject *py_obj) 103c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 10452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (py_obj && PyString_Check(py_obj)) 10552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonObject::Reset(py_obj); 10652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 10752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject::Reset(NULL); 10852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return py_obj == NULL; 10912477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 11012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 11152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Claytonconst char* 11252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString::GetString() const 11312477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 11452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj) 11552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PyString_AsString(m_py_obj); 11652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return NULL; 117c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 118c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 11952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Claytonsize_t 12052ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString::GetSize() const 121c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 12252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj) 12352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PyString_Size(m_py_obj); 12452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return 0; 125c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 126c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 12752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Claytonvoid 12852ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString::SetString (const char* string) 129c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 13052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject::Reset(PyString_FromString(string)); 131c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 132c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 13352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton//---------------------------------------------------------------------- 13452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton// PythonInteger 13552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton//---------------------------------------------------------------------- 13612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 13752ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonInteger::PythonInteger (PyObject *py_obj) : 13852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(py_obj) 139c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 140c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 141c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 14252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonInteger::PythonInteger (const PythonObject &object) : 14352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(object.GetPythonObject()) 144c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 145c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 146c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 14752ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonInteger::PythonInteger (const lldb::ScriptInterpreterObjectSP &script_object_sp) : 14852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject (script_object_sp) 149c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 150c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 151c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 15252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonInteger::PythonInteger (int64_t value) : 15352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(PyInt_FromLong(value)) 15412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 15512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 15612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 15752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 15852ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonInteger::~PythonInteger () 159c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 16012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 161c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 16252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Claytonbool 16352ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonInteger::Reset (PyObject *py_obj) 164c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 16552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (py_obj && PyInt_Check(py_obj)) 16652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonObject::Reset(py_obj); 16752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 16852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject::Reset(NULL); 16952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return py_obj == NULL; 170c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 171c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 17252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Claytonint64_t 17352ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonInteger::GetInteger() 174c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 17552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj) 17652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PyInt_AsLong(m_py_obj); 17752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton else 17852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return UINT64_MAX; 179c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 180c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 18152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Claytonvoid 18252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonInteger::SetInteger (int64_t value) 183c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 18452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject::Reset(PyInt_FromLong(value)); 185c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 186c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 18752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton//---------------------------------------------------------------------- 18852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton// PythonList 18952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton//---------------------------------------------------------------------- 19052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 19152ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::PythonList () : 19252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(PyList_New(0)) 193b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg Clayton{ 194b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg Clayton} 195b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg Clayton 19652ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::PythonList (uint32_t count) : 19752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(PyList_New(count)) 198c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 199c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 200c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 20152ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::PythonList (PyObject *py_obj) : 20252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(py_obj) 203c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 204c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 205c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 20652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 20752ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::PythonList (const PythonObject &object) : 20852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(object.GetPythonObject()) 209c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 21012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 21112477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 21252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::PythonList (const lldb::ScriptInterpreterObjectSP &script_object_sp) : 21352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject (script_object_sp) 21412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 215c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 216c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 21752ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::~PythonList () 218c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 219c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 220c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 22152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Claytonbool 22252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::Reset (PyObject *py_obj) 22352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton{ 22452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (py_obj && PyList_Check(py_obj)) 22552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonObject::Reset(py_obj); 22652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 22752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject::Reset(NULL); 22852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return py_obj == NULL; 22952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton} 23052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 231c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatauint32_t 23252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::GetSize() 233c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 23452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj) 23552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PyList_GET_SIZE(m_py_obj); 236c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return 0; 237c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 238c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 23952ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonObject 24052ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::GetItemAtIndex (uint32_t index) 241c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 24252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj) 24352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonObject(PyList_GetItem(m_py_obj, index)); 244c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 245c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 246c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 247c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 24852ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::SetItemAtIndex (uint32_t index, const PythonObject & object) 249c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 25052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj && object) 25152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PyList_SetItem(m_py_obj, index, object.GetPythonObject()); 252c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 253c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 254c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 25552ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList::AppendItem (const PythonObject &object) 25652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton{ 25752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj && object) 25852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PyList_Append(m_py_obj, object.GetPythonObject()); 25952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton} 26052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 26152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton//---------------------------------------------------------------------- 26252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton// PythonDictionary 26352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton//---------------------------------------------------------------------- 26452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 26552ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::PythonDictionary () : 26652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(PyDict_New()) 267c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 268c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 269c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 27052ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::PythonDictionary (PyObject *py_obj) : 27152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(py_obj) 272c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 273c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 274c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 27552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 27652ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::PythonDictionary (const PythonObject &object) : 27752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject(object.GetPythonObject()) 278c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 279c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 280c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 28152ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::PythonDictionary (const lldb::ScriptInterpreterObjectSP &script_object_sp) : 28252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject (script_object_sp) 283c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 284c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 285c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 28652ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::~PythonDictionary () 28752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton{ 28852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton} 28952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 29052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Claytonbool 29152ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::Reset (PyObject *py_obj) 29252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton{ 29352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (py_obj && PyDict_Check(py_obj)) 29452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonObject::Reset(py_obj); 29552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 29652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonObject::Reset(NULL); 29752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return py_obj == NULL; 29852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton} 29952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 300c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatauint32_t 30152ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::GetSize() 302c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 30352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj) 30452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PyDict_Size(m_py_obj); 305c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return 0; 306c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 307c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 30852ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonObject 30952ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::GetItemForKey (const char *key) const 310c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 31112477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (key && key[0]) 31212477554ee676b775ec419575e1b091fa95bdc80Greg Clayton { 31352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PythonString python_key(key); 31412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return GetItemForKey(python_key); 31512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton } 316c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 317c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 318c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 31912477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 32052ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonObject 32152ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::GetItemForKey (const PythonString &key) const 32212477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 32352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj && key) 32452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonObject(PyDict_GetItem(m_py_obj, key.GetPythonObject())); 32552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonObject(); 32612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 32712477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 32888b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton 32988b980bfd735c4691b7f0771a45a78cb75033564Greg Claytonconst char * 33052ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::GetItemForKeyAsString (const PythonString &key, const char *fail_value) const 33188b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton{ 33252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj && key) 33388b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton { 33452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PyObject *py_obj = PyDict_GetItem(m_py_obj, key.GetPythonObject()); 33552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (py_obj && PyString_Check(py_obj)) 33652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PyString_AsString(py_obj); 33788b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton } 33888b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton return fail_value; 33988b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton} 34088b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton 34188b980bfd735c4691b7f0771a45a78cb75033564Greg Claytonint64_t 34252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::GetItemForKeyAsInteger (const PythonString &key, int64_t fail_value) const 34388b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton{ 34452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj && key) 34588b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton { 34652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PyObject *py_obj = PyDict_GetItem(m_py_obj, key.GetPythonObject()); 34736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (py_obj) 34836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton { 34936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (PyInt_Check(py_obj)) 35036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton return PyInt_AsLong(py_obj); 35136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton 35236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton if (PyLong_Check(py_obj)) 35336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton return PyLong_AsLong(py_obj); 35436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton } 35588b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton } 35688b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton return fail_value; 35788b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton} 35888b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton 35952ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonList 36052ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::GetKeys () const 361c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 36252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj) 36352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonList(PyDict_Keys(m_py_obj)); 36452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonList(); 365c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 366c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 36752ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonString 36852ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::GetKeyAtPosition (uint32_t pos) const 369c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 370c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata PyObject *key, *value; 371c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata Py_ssize_t pos_iter = 0; 372c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 37352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj) 37412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton { 37552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton while (PyDict_Next(m_py_obj, &pos_iter, &key, &value)) 37612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton { 37712477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (pos-- == 0) 37852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonString(key); 37912477554ee676b775ec419575e1b091fa95bdc80Greg Clayton } 380c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata } 38152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonString(); 382c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 383c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 38452ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonObject 38552ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::GetValueAtPosition (uint32_t pos) const 386c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 387c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata PyObject *key, *value; 388c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata Py_ssize_t pos_iter = 0; 389c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 39052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (!m_py_obj) 391c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 392c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 39352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton while (PyDict_Next(m_py_obj, &pos_iter, &key, &value)) { 394c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (pos-- == 0) 39552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonObject(value); 396c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata } 39752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return PythonObject(); 398c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 399c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 400c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 40152ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonPythonDictionary::SetItemForKey (const PythonString &key, const PythonObject &value) 402c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 40352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (m_py_obj && key && value) 40452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton PyDict_SetItem(m_py_obj, key.GetPythonObject(), value.GetPythonObject()); 405c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 406c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 407c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#endif 408