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