]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/llvm/tools/lldb/include/lldb/Interpreter/PythonDataObjects.h
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
[FreeBSD/stable/10.git] / contrib / llvm / tools / lldb / include / lldb / Interpreter / PythonDataObjects.h
1 //===-- PythonDataObjects.h----------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef liblldb_PythonDataObjects_h_
11 #define liblldb_PythonDataObjects_h_
12
13 // C Includes
14 // C++ Includes
15
16 // Other libraries and framework includes
17 // Project includes
18 #include "lldb/lldb-defines.h"
19 #include "lldb/Core/ConstString.h"
20 #include "lldb/Core/Flags.h"
21 #include "lldb/Interpreter/OptionValue.h"
22 #if defined (__APPLE__)
23 #include <Python/Python.h>
24 #else
25 #include <Python.h>
26 #endif
27
28 namespace lldb_private {
29     
30     class PythonObject
31     {
32     public:
33         PythonObject () :
34             m_py_obj(NULL)
35         {
36         }
37         
38         PythonObject (PyObject* py_obj) :
39             m_py_obj(NULL)
40         {
41             Reset (py_obj);
42         }
43         
44         PythonObject (const PythonObject &rhs) :
45             m_py_obj(NULL)
46         {
47             Reset (rhs.m_py_obj);
48         }
49         
50         PythonObject (const lldb::ScriptInterpreterObjectSP &script_object_sp);
51
52         virtual
53         ~PythonObject ()
54         {
55             Reset (NULL);
56         }
57
58         const PythonObject &
59         operator = (const PythonObject &rhs)
60         {
61             if (this != &rhs)
62                 Reset (rhs.m_py_obj);
63             return *this;
64         }
65
66         bool
67         Reset (const PythonObject &object)
68         {
69             return Reset(object.GetPythonObject());
70         }
71
72         virtual bool
73         Reset (PyObject* py_obj = NULL)
74         {
75             if (py_obj != m_py_obj)
76             {
77                 Py_XDECREF(m_py_obj);
78                 m_py_obj = py_obj;
79                 Py_XINCREF(m_py_obj);
80             }
81             return true;
82         }
83         
84         void
85         Dump () const
86         {
87             if (m_py_obj)
88                 _PyObject_Dump (m_py_obj);
89             else
90                 puts ("NULL");
91         }
92         
93         void
94         Dump (Stream &strm) const;
95
96         PyObject*
97         GetPythonObject () const
98         {
99             return m_py_obj;
100         }
101         
102         PythonString
103         Repr ();
104         
105         PythonString
106         Str ();
107         
108         operator bool () const
109         {
110             return m_py_obj != NULL;
111         }
112         
113     protected:
114         PyObject* m_py_obj;
115     };
116     
117     class PythonString: public PythonObject
118     {
119     public:
120         
121         PythonString ();
122         PythonString (PyObject *o);
123         PythonString (const PythonObject &object);
124         PythonString (const lldb::ScriptInterpreterObjectSP &script_object_sp);
125         PythonString (const char* string);
126         virtual ~PythonString ();
127         
128         virtual bool
129         Reset (PyObject* py_obj = NULL);
130
131         const char*
132         GetString() const;
133
134         size_t
135         GetSize() const;
136
137         void
138         SetString (const char* string);        
139     };
140     
141     class PythonInteger: public PythonObject
142     {
143     public:
144         
145         PythonInteger ();
146         PythonInteger (PyObject* py_obj);
147         PythonInteger (const PythonObject &object);
148         PythonInteger (const lldb::ScriptInterpreterObjectSP &script_object_sp);
149         PythonInteger (int64_t value);
150         virtual ~PythonInteger ();
151         
152         virtual bool
153         Reset (PyObject* py_obj = NULL);
154         
155         int64_t
156         GetInteger();
157         
158         void
159         SetInteger (int64_t value);
160     };
161     
162     class PythonList: public PythonObject
163     {
164     public:
165         
166         PythonList ();
167         PythonList (PyObject* py_obj);
168         PythonList (const PythonObject &object);
169         PythonList (const lldb::ScriptInterpreterObjectSP &script_object_sp);
170         PythonList (uint32_t count);
171         virtual ~PythonList ();
172         
173         virtual bool
174         Reset (PyObject* py_obj = NULL);
175         
176         uint32_t
177         GetSize();
178         
179         PythonObject
180         GetItemAtIndex (uint32_t index);
181         
182         void
183         SetItemAtIndex (uint32_t index, const PythonObject &object);
184         
185         void
186         AppendItem (const PythonObject &object);
187     };
188     
189     class PythonDictionary: public PythonObject
190     {
191     public:
192         
193         PythonDictionary ();
194         PythonDictionary (PyObject* object);
195         PythonDictionary (const PythonObject &object);
196         PythonDictionary (const lldb::ScriptInterpreterObjectSP &script_object_sp);
197         virtual ~PythonDictionary ();
198         
199         virtual bool
200         Reset (PyObject* object = NULL);
201         
202         uint32_t GetSize();
203         
204         PythonObject
205         GetItemForKey (const PythonString &key) const;
206         
207         const char *
208         GetItemForKeyAsString (const PythonString &key, const char *fail_value = NULL) const;
209
210         int64_t
211         GetItemForKeyAsInteger (const PythonString &key, int64_t fail_value = 0) const;
212
213         PythonObject
214         GetItemForKey (const char *key) const;
215
216         typedef bool (*DictionaryIteratorCallback)(PythonString* key, PythonDictionary* dict);
217         
218         PythonList
219         GetKeys () const;
220         
221         PythonString
222         GetKeyAtPosition (uint32_t pos) const;
223         
224         PythonObject
225         GetValueAtPosition (uint32_t pos) const;
226         
227         void
228         SetItemForKey (const PythonString &key, const PythonObject& value);
229     };
230     
231 } // namespace lldb_private
232
233 #endif  // liblldb_PythonDataObjects_h_