blob: 8d57156469f27546890aafc401c6e518ffede2b2 [file] [log] [blame]
Caroline Ticedac97f32010-09-22 23:01:29 +00001
2%extend lldb::SBAddress {
Greg Clayton81e871e2012-02-04 02:27:34 +00003 PyObject *lldb::SBAddress::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +00004 lldb::SBStream description;
5 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +00006 const char *desc = description.GetData();
7 size_t desc_len = description.GetSize();
8 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
9 --desc_len;
10 if (desc_len > 0)
11 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +000012 else
13 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +000014 }
15}
16%extend lldb::SBBlock {
Greg Clayton81e871e2012-02-04 02:27:34 +000017 PyObject *lldb::SBBlock::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +000018 lldb::SBStream description;
19 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +000020 const char *desc = description.GetData();
21 size_t desc_len = description.GetSize();
22 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
23 --desc_len;
24 if (desc_len > 0)
25 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +000026 else
27 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +000028 }
29}
30%extend lldb::SBBreakpoint {
Greg Clayton81e871e2012-02-04 02:27:34 +000031 PyObject *lldb::SBBreakpoint::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +000032 lldb::SBStream description;
Greg Clayton05faeb72010-10-07 04:19:01 +000033 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +000034 const char *desc = description.GetData();
35 size_t desc_len = description.GetSize();
36 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
37 --desc_len;
38 if (desc_len > 0)
39 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +000040 else
41 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +000042 }
Enrico Granatac3387332013-05-03 01:29:27 +000043
44 %pythoncode %{
45 def __eq__(self, rhs):
46 if not isinstance(rhs, type(self)):
47 return False
48
49 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
50
51 def __ne__(self, rhs):
52 if not isinstance(rhs, type(self)):
53 return True
54
55 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
56 %}
57
Caroline Ticedac97f32010-09-22 23:01:29 +000058}
59%extend lldb::SBBreakpointLocation {
Greg Clayton81e871e2012-02-04 02:27:34 +000060 PyObject *lldb::SBBreakpointLocation::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +000061 lldb::SBStream description;
Johnny Chenfc87e2d2011-04-25 20:23:05 +000062 $self->GetDescription (description, lldb::eDescriptionLevelFull);
Greg Clayton24155862012-02-01 02:30:27 +000063 const char *desc = description.GetData();
64 size_t desc_len = description.GetSize();
65 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
66 --desc_len;
67 if (desc_len > 0)
68 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +000069 else
70 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +000071 }
72}
Enrico Granatac3387332013-05-03 01:29:27 +000073
74%extend lldb::SBBroadcaster {
75 %pythoncode %{
76 def __eq__(self, rhs):
77 if not isinstance(rhs, type(self)):
78 return False
79
80 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
81
82 def __ne__(self, rhs):
83 if not isinstance(rhs, type(self)):
84 return True
85
86 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
87 %}
88}
89
Caroline Ticedac97f32010-09-22 23:01:29 +000090%extend lldb::SBCommandReturnObject {
Greg Clayton81e871e2012-02-04 02:27:34 +000091 PyObject *lldb::SBCommandReturnObject::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +000092 lldb::SBStream description;
93 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +000094 const char *desc = description.GetData();
95 size_t desc_len = description.GetSize();
96 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
97 --desc_len;
98 if (desc_len > 0)
99 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000100 else
101 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000102 }
Enrico Granataceba0712013-03-25 17:37:39 +0000103
104 /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage
105 they are meant to make an SBCommandReturnObject into a file-like object so that instructions of the sort
106 print >>sb_command_return_object, "something"
107 will work correctly */
108
Enrico Granata7d1f9392013-03-23 01:35:44 +0000109 void lldb::SBCommandReturnObject::write (const char* str)
110 {
111 if (str)
112 $self->Printf("%s",str);
113 }
114 void lldb::SBCommandReturnObject::flush ()
115 {}
Caroline Ticedac97f32010-09-22 23:01:29 +0000116}
117%extend lldb::SBCompileUnit {
Greg Clayton81e871e2012-02-04 02:27:34 +0000118 PyObject *lldb::SBCompileUnit::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000119 lldb::SBStream description;
120 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000121 const char *desc = description.GetData();
122 size_t desc_len = description.GetSize();
123 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
124 --desc_len;
125 if (desc_len > 0)
126 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000127 else
128 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000129 }
Enrico Granatac3387332013-05-03 01:29:27 +0000130 %pythoncode %{
131 def __eq__(self, rhs):
132 if not isinstance(rhs, type(self)):
133 return False
134
135 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
136
137 def __ne__(self, rhs):
138 if not isinstance(rhs, type(self)):
139 return True
140
141 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
142 %}
Caroline Ticedac97f32010-09-22 23:01:29 +0000143}
Enrico Granata9128ee22011-09-06 19:20:51 +0000144%extend lldb::SBData {
Greg Clayton81e871e2012-02-04 02:27:34 +0000145 PyObject *lldb::SBData::__str__ (){
Enrico Granata9128ee22011-09-06 19:20:51 +0000146 lldb::SBStream description;
147 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000148 const char *desc = description.GetData();
149 size_t desc_len = description.GetSize();
150 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
151 --desc_len;
152 if (desc_len > 0)
153 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000154 else
155 return PyString_FromString("");
Enrico Granata9128ee22011-09-06 19:20:51 +0000156 }
157}
Caroline Ticedac97f32010-09-22 23:01:29 +0000158%extend lldb::SBDebugger {
Greg Clayton81e871e2012-02-04 02:27:34 +0000159 PyObject *lldb::SBDebugger::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000160 lldb::SBStream description;
161 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000162 const char *desc = description.GetData();
163 size_t desc_len = description.GetSize();
164 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
165 --desc_len;
166 if (desc_len > 0)
167 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000168 else
169 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000170 }
171}
Enrico Granata10de0902012-10-10 22:54:17 +0000172%extend lldb::SBDeclaration {
173 PyObject *lldb::SBDeclaration::__str__ (){
174 lldb::SBStream description;
175 $self->GetDescription (description);
176 const char *desc = description.GetData();
177 size_t desc_len = description.GetSize();
178 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
179 --desc_len;
180 if (desc_len > 0)
181 return PyString_FromStringAndSize (desc, desc_len);
182 else
183 return PyString_FromString("");
184 }
Enrico Granatac3387332013-05-03 01:29:27 +0000185
186 %pythoncode %{
187 def __eq__(self, rhs):
188 if not isinstance(rhs, type(self)):
189 return False
190
191 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
192
193 def __ne__(self, rhs):
194 if not isinstance(rhs, type(self)):
195 return True
196
197 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
198 %}
199
Enrico Granata10de0902012-10-10 22:54:17 +0000200}
Caroline Ticedac97f32010-09-22 23:01:29 +0000201%extend lldb::SBError {
Greg Clayton81e871e2012-02-04 02:27:34 +0000202 PyObject *lldb::SBError::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000203 lldb::SBStream description;
204 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000205 const char *desc = description.GetData();
206 size_t desc_len = description.GetSize();
207 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
208 --desc_len;
209 if (desc_len > 0)
210 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000211 else
212 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000213 }
214}
215%extend lldb::SBFileSpec {
Greg Clayton81e871e2012-02-04 02:27:34 +0000216 PyObject *lldb::SBFileSpec::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000217 lldb::SBStream description;
218 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000219 const char *desc = description.GetData();
220 size_t desc_len = description.GetSize();
221 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
222 --desc_len;
223 if (desc_len > 0)
224 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000225 else
226 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000227 }
228}
229%extend lldb::SBFrame {
Greg Clayton81e871e2012-02-04 02:27:34 +0000230 PyObject *lldb::SBFrame::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000231 lldb::SBStream description;
232 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000233 const char *desc = description.GetData();
234 size_t desc_len = description.GetSize();
235 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
236 --desc_len;
237 if (desc_len > 0)
238 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000239 else
240 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000241 }
242}
243%extend lldb::SBFunction {
Greg Clayton81e871e2012-02-04 02:27:34 +0000244 PyObject *lldb::SBFunction::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000245 lldb::SBStream description;
246 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000247 const char *desc = description.GetData();
248 size_t desc_len = description.GetSize();
249 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
250 --desc_len;
251 if (desc_len > 0)
252 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000253 else
254 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000255 }
Enrico Granatac3387332013-05-03 01:29:27 +0000256
257 %pythoncode %{
258 def __eq__(self, rhs):
259 if not isinstance(rhs, type(self)):
260 return False
261
262 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
263
264 def __ne__(self, rhs):
265 if not isinstance(rhs, type(self)):
266 return True
267
268 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
269 %}
270
Caroline Ticedac97f32010-09-22 23:01:29 +0000271}
Greg Clayton1d273162010-10-06 03:09:58 +0000272%extend lldb::SBInstruction {
Greg Clayton81e871e2012-02-04 02:27:34 +0000273 PyObject *lldb::SBInstruction::__str__ (){
Greg Clayton1d273162010-10-06 03:09:58 +0000274 lldb::SBStream description;
275 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000276 const char *desc = description.GetData();
277 size_t desc_len = description.GetSize();
278 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
279 --desc_len;
280 if (desc_len > 0)
281 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000282 else
283 return PyString_FromString("");
Greg Clayton1d273162010-10-06 03:09:58 +0000284 }
285}
286%extend lldb::SBInstructionList {
Greg Clayton81e871e2012-02-04 02:27:34 +0000287 PyObject *lldb::SBInstructionList::__str__ (){
Greg Clayton1d273162010-10-06 03:09:58 +0000288 lldb::SBStream description;
289 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000290 const char *desc = description.GetData();
291 size_t desc_len = description.GetSize();
292 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
293 --desc_len;
294 if (desc_len > 0)
295 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000296 else
297 return PyString_FromString("");
Greg Clayton1d273162010-10-06 03:09:58 +0000298 }
299}
Caroline Ticedac97f32010-09-22 23:01:29 +0000300%extend lldb::SBLineEntry {
Greg Clayton81e871e2012-02-04 02:27:34 +0000301 PyObject *lldb::SBLineEntry::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000302 lldb::SBStream description;
303 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000304 const char *desc = description.GetData();
305 size_t desc_len = description.GetSize();
306 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
307 --desc_len;
308 if (desc_len > 0)
309 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000310 else
311 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000312 }
Enrico Granatac3387332013-05-03 01:29:27 +0000313
314 %pythoncode %{
315 def __eq__(self, rhs):
316 if not isinstance(rhs, type(self)):
317 return False
318
319 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
320
321 def __ne__(self, rhs):
322 if not isinstance(rhs, type(self)):
323 return True
324
325 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
326 %}
Caroline Ticedac97f32010-09-22 23:01:29 +0000327}
328%extend lldb::SBModule {
Greg Clayton81e871e2012-02-04 02:27:34 +0000329 PyObject *lldb::SBModule::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000330 lldb::SBStream description;
331 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000332 const char *desc = description.GetData();
333 size_t desc_len = description.GetSize();
334 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
335 --desc_len;
336 if (desc_len > 0)
337 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000338 else
339 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000340 }
Enrico Granatac3387332013-05-03 01:29:27 +0000341
342 %pythoncode %{
343 def __eq__(self, rhs):
344 if not isinstance(rhs, type(self)):
345 return False
346
347 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
348
349 def __ne__(self, rhs):
350 if not isinstance(rhs, type(self)):
351 return True
352
353 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
354 %}
Caroline Ticedac97f32010-09-22 23:01:29 +0000355}
356%extend lldb::SBProcess {
Greg Clayton81e871e2012-02-04 02:27:34 +0000357 PyObject *lldb::SBProcess::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000358 lldb::SBStream description;
359 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000360 const char *desc = description.GetData();
361 size_t desc_len = description.GetSize();
362 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
363 --desc_len;
364 if (desc_len > 0)
365 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000366 else
367 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000368 }
369}
Greg Claytond9dc52d2011-09-24 05:04:40 +0000370%extend lldb::SBSection {
Greg Clayton81e871e2012-02-04 02:27:34 +0000371 PyObject *lldb::SBSection::__str__ (){
Greg Claytond9dc52d2011-09-24 05:04:40 +0000372 lldb::SBStream description;
373 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000374 const char *desc = description.GetData();
375 size_t desc_len = description.GetSize();
376 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
377 --desc_len;
378 if (desc_len > 0)
379 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000380 else
381 return PyString_FromString("");
Greg Claytond9dc52d2011-09-24 05:04:40 +0000382 }
Enrico Granatac3387332013-05-03 01:29:27 +0000383
384 %pythoncode %{
385 def __eq__(self, rhs):
386 if not isinstance(rhs, type(self)):
387 return False
388
389 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
390
391 def __ne__(self, rhs):
392 if not isinstance(rhs, type(self)):
393 return True
394
395 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
396 %}
Greg Claytond9dc52d2011-09-24 05:04:40 +0000397}
Enrico Granataceba0712013-03-25 17:37:39 +0000398%extend lldb::SBStream {
399 /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage
400 they are meant to make an SBStream into a file-like object so that instructions of the sort
401 print >>sb_stream, "something"
402 will work correctly */
403
404 void lldb::SBStream::write (const char* str)
405 {
406 if (str)
407 $self->Printf("%s",str);
408 }
409 void lldb::SBStream::flush ()
410 {}
411}
Caroline Ticedac97f32010-09-22 23:01:29 +0000412%extend lldb::SBSymbol {
Greg Clayton81e871e2012-02-04 02:27:34 +0000413 PyObject *lldb::SBSymbol::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000414 lldb::SBStream description;
415 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000416 const char *desc = description.GetData();
417 size_t desc_len = description.GetSize();
418 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
419 --desc_len;
420 if (desc_len > 0)
421 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000422 else
423 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000424 }
Enrico Granatac3387332013-05-03 01:29:27 +0000425 %pythoncode %{
426 def __eq__(self, rhs):
427 if not isinstance(rhs, type(self)):
428 return False
429
430 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
431
432 def __ne__(self, rhs):
433 if not isinstance(rhs, type(self)):
434 return True
435
436 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
437 %}
Caroline Ticedac97f32010-09-22 23:01:29 +0000438}
439%extend lldb::SBSymbolContext {
Greg Clayton81e871e2012-02-04 02:27:34 +0000440 PyObject *lldb::SBSymbolContext::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000441 lldb::SBStream description;
442 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000443 const char *desc = description.GetData();
444 size_t desc_len = description.GetSize();
445 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
446 --desc_len;
447 if (desc_len > 0)
448 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000449 else
450 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000451 }
452}
Greg Clayton5569e642012-02-06 01:44:54 +0000453%extend lldb::SBSymbolContextList {
454 PyObject *lldb::SBSymbolContextList::__str__ (){
455 lldb::SBStream description;
456 $self->GetDescription (description);
457 const char *desc = description.GetData();
458 size_t desc_len = description.GetSize();
459 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
460 --desc_len;
461 if (desc_len > 0)
462 return PyString_FromStringAndSize (desc, desc_len);
463 else
464 return PyString_FromString("");
465 }
466}
Enrico Granatac3387332013-05-03 01:29:27 +0000467
Caroline Ticedac97f32010-09-22 23:01:29 +0000468%extend lldb::SBTarget {
Greg Clayton81e871e2012-02-04 02:27:34 +0000469 PyObject *lldb::SBTarget::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000470 lldb::SBStream description;
Caroline Ticeceb6b132010-10-26 03:11:13 +0000471 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
Greg Clayton24155862012-02-01 02:30:27 +0000472 const char *desc = description.GetData();
473 size_t desc_len = description.GetSize();
474 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
475 --desc_len;
476 if (desc_len > 0)
477 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000478 else
479 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000480 }
Enrico Granatac3387332013-05-03 01:29:27 +0000481
482 %pythoncode %{
483 def __eq__(self, rhs):
484 if not isinstance(rhs, type(self)):
485 return False
486
487 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
488
489 def __ne__(self, rhs):
490 if not isinstance(rhs, type(self)):
491 return True
492
493 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
494 %}
Caroline Ticedac97f32010-09-22 23:01:29 +0000495}
Enrico Granatac3387332013-05-03 01:29:27 +0000496
Greg Claytonda7bc7d2011-11-13 06:57:31 +0000497%extend lldb::SBType {
Greg Clayton81e871e2012-02-04 02:27:34 +0000498 PyObject *lldb::SBType::__str__ (){
Greg Claytonda7bc7d2011-11-13 06:57:31 +0000499 lldb::SBStream description;
500 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
Greg Clayton24155862012-02-01 02:30:27 +0000501 const char *desc = description.GetData();
502 size_t desc_len = description.GetSize();
503 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
504 --desc_len;
505 if (desc_len > 0)
506 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000507 else
508 return PyString_FromString("");
Greg Claytonda7bc7d2011-11-13 06:57:31 +0000509 }
510}
Enrico Granata061858c2012-02-15 02:34:21 +0000511%extend lldb::SBTypeCategory {
512 PyObject *lldb::SBTypeCategory::__str__ (){
513 lldb::SBStream description;
514 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
515 const char *desc = description.GetData();
516 size_t desc_len = description.GetSize();
517 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
518 --desc_len;
519 if (desc_len > 0)
520 return PyString_FromStringAndSize (desc, desc_len);
521 else
522 return PyString_FromString("");
523 }
524}
525%extend lldb::SBTypeFilter {
526 PyObject *lldb::SBTypeFilter::__str__ (){
527 lldb::SBStream description;
528 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
529 const char *desc = description.GetData();
530 size_t desc_len = description.GetSize();
531 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
532 --desc_len;
533 if (desc_len > 0)
534 return PyString_FromStringAndSize (desc, desc_len);
535 else
536 return PyString_FromString("");
537 }
Enrico Granatac3387332013-05-03 01:29:27 +0000538 %pythoncode %{
539 def __eq__(self, rhs):
540 if not isinstance(rhs, type(self)):
541 return False
542
543 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
544
545 def __ne__(self, rhs):
546 if not isinstance(rhs, type(self)):
547 return True
548
549 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
550 %}
Enrico Granata061858c2012-02-15 02:34:21 +0000551}
552%extend lldb::SBTypeFormat {
553 PyObject *lldb::SBTypeFormat::__str__ (){
554 lldb::SBStream description;
555 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
556 const char *desc = description.GetData();
557 size_t desc_len = description.GetSize();
558 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
559 --desc_len;
560 if (desc_len > 0)
561 return PyString_FromStringAndSize (desc, desc_len);
562 else
563 return PyString_FromString("");
564 }
565}
Greg Claytonda7bc7d2011-11-13 06:57:31 +0000566%extend lldb::SBTypeMember {
Greg Clayton81e871e2012-02-04 02:27:34 +0000567 PyObject *lldb::SBTypeMember::__str__ (){
Greg Claytonda7bc7d2011-11-13 06:57:31 +0000568 lldb::SBStream description;
569 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
Greg Clayton24155862012-02-01 02:30:27 +0000570 const char *desc = description.GetData();
571 size_t desc_len = description.GetSize();
572 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
573 --desc_len;
574 if (desc_len > 0)
575 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000576 else
577 return PyString_FromString("");
Greg Claytonda7bc7d2011-11-13 06:57:31 +0000578 }
579}
Enrico Granata061858c2012-02-15 02:34:21 +0000580%extend lldb::SBTypeNameSpecifier {
581 PyObject *lldb::SBTypeNameSpecifier::__str__ (){
582 lldb::SBStream description;
583 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
584 const char *desc = description.GetData();
585 size_t desc_len = description.GetSize();
586 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
587 --desc_len;
588 if (desc_len > 0)
589 return PyString_FromStringAndSize (desc, desc_len);
590 else
591 return PyString_FromString("");
592 }
Enrico Granatac3387332013-05-03 01:29:27 +0000593 %pythoncode %{
594 def __eq__(self, rhs):
595 if not isinstance(rhs, type(self)):
596 return False
597
598 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
599
600 def __ne__(self, rhs):
601 if not isinstance(rhs, type(self)):
602 return True
603
604 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
605 %}
Enrico Granata061858c2012-02-15 02:34:21 +0000606}
607%extend lldb::SBTypeSummary {
608 PyObject *lldb::SBTypeSummary::__str__ (){
609 lldb::SBStream description;
610 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
611 const char *desc = description.GetData();
612 size_t desc_len = description.GetSize();
613 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
614 --desc_len;
615 if (desc_len > 0)
616 return PyString_FromStringAndSize (desc, desc_len);
617 else
618 return PyString_FromString("");
619 }
Enrico Granatac3387332013-05-03 01:29:27 +0000620 %pythoncode %{
621 def __eq__(self, rhs):
622 if not isinstance(rhs, type(self)):
623 return False
624
625 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
626
627 def __ne__(self, rhs):
628 if not isinstance(rhs, type(self)):
629 return True
630
631 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
632 %}
Enrico Granata061858c2012-02-15 02:34:21 +0000633}
634%extend lldb::SBTypeSynthetic {
635 PyObject *lldb::SBTypeSynthetic::__str__ (){
636 lldb::SBStream description;
637 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
638 const char *desc = description.GetData();
639 size_t desc_len = description.GetSize();
640 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
641 --desc_len;
642 if (desc_len > 0)
643 return PyString_FromStringAndSize (desc, desc_len);
644 else
645 return PyString_FromString("");
646 }
Enrico Granatac3387332013-05-03 01:29:27 +0000647 %pythoncode %{
648 def __eq__(self, rhs):
649 if not isinstance(rhs, type(self)):
650 return False
651
652 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
653
654 def __ne__(self, rhs):
655 if not isinstance(rhs, type(self)):
656 return True
657
658 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
659 %}
Enrico Granata061858c2012-02-15 02:34:21 +0000660}
Caroline Ticedac97f32010-09-22 23:01:29 +0000661%extend lldb::SBThread {
Greg Clayton81e871e2012-02-04 02:27:34 +0000662 PyObject *lldb::SBThread::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000663 lldb::SBStream description;
664 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000665 const char *desc = description.GetData();
666 size_t desc_len = description.GetSize();
667 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
668 --desc_len;
669 if (desc_len > 0)
670 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000671 else
672 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000673 }
Enrico Granatac3387332013-05-03 01:29:27 +0000674 %pythoncode %{
675 def __eq__(self, rhs):
676 if not isinstance(rhs, type(self)):
677 return False
678
679 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
680
681 def __ne__(self, rhs):
682 if not isinstance(rhs, type(self)):
683 return True
684
685 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
686 %}
Caroline Ticedac97f32010-09-22 23:01:29 +0000687}
688%extend lldb::SBValue {
Greg Clayton81e871e2012-02-04 02:27:34 +0000689 PyObject *lldb::SBValue::__str__ (){
Caroline Ticedac97f32010-09-22 23:01:29 +0000690 lldb::SBStream description;
691 $self->GetDescription (description);
Greg Clayton24155862012-02-01 02:30:27 +0000692 const char *desc = description.GetData();
693 size_t desc_len = description.GetSize();
694 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
695 --desc_len;
696 if (desc_len > 0)
697 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000698 else
699 return PyString_FromString("");
Caroline Ticedac97f32010-09-22 23:01:29 +0000700 }
701}
Greg Clayton7edbdfc2012-02-03 07:02:37 +0000702%extend lldb::SBValueList {
Greg Claytondda8c7d2013-04-11 22:24:25 +0000703 PyObject *lldb::SBValueList::__str__ (){
Greg Clayton7edbdfc2012-02-03 07:02:37 +0000704 lldb::SBStream description;
705 const size_t n = $self->GetSize();
706 if (n)
707 {
708 for (size_t i=0; i<n; ++i)
709 $self->GetValueAtIndex(i).GetDescription(description);
710 }
711 else
712 {
713 description.Printf("<empty> lldb.SBValueList()");
714 }
715 const char *desc = description.GetData();
716 size_t desc_len = description.GetSize();
717 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
718 --desc_len;
719 if (desc_len > 0)
720 return PyString_FromStringAndSize (desc, desc_len);
Greg Claytondda8c7d2013-04-11 22:24:25 +0000721 else
722 return PyString_FromString("");
Greg Clayton7edbdfc2012-02-03 07:02:37 +0000723 }
724}
Greg Clayton1b282f92011-10-13 18:08:26 +0000725%extend lldb::SBWatchpoint {
Greg Clayton81e871e2012-02-04 02:27:34 +0000726 PyObject *lldb::SBWatchpoint::__str__ (){
Johnny Chend4dd7992011-09-27 01:19:20 +0000727 lldb::SBStream description;
728 $self->GetDescription (description, lldb::eDescriptionLevelVerbose);
Greg Clayton24155862012-02-01 02:30:27 +0000729 const char *desc = description.GetData();
730 size_t desc_len = description.GetSize();
731 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
732 --desc_len;
733 if (desc_len > 0)
734 return PyString_FromStringAndSize (desc, desc_len);
Greg Clayton81e871e2012-02-04 02:27:34 +0000735 else
736 return PyString_FromString("");
Johnny Chend4dd7992011-09-27 01:19:20 +0000737 }
738}
Caroline Ticedac97f32010-09-22 23:01:29 +0000739
Filipe Cabecinhasc5041912012-08-25 00:29:07 +0000740
741// %extend lldb::SBDebugger {
742// // FIXME: We can't get the callback and baton
743// PyObject *lldb::SBDebugger (){
744// // Only call Py_XDECREF if we have a Python object (or NULL)
745// if (LLDBSwigPythonCallPythonLogOutputCallback == $self->GetLogOutPutCallback())
746// Py_XDECREF($self->GetCallbackBaton());
747// }
748// }
Filipe Cabecinhas6eb31e72012-08-22 13:25:10 +0000749// %extend lldb::SBInputReader {
750// // FIXME: m_callback_function is private and we have no other
751// // way to access it.
752// PyObject *lldb::SBInputReader::__del__ (){
753// // Only call Py_XDECREF if we have a Python object (or NULL)
754// if (LLDBSwigPythonCallSBInputReaderCallback == $self->m_callback_function)
755// Py_XDECREF($self->m_callback_baton);
756// }
757// }
758
Greg Clayton05e8d192012-02-01 01:46:19 +0000759%pythoncode %{
760
Greg Clayton5569e642012-02-06 01:44:54 +0000761class declaration(object):
762 '''A class that represents a source declaration location with file, line and column.'''
763 def __init__(self, file, line, col):
764 self.file = file
765 self.line = line
766 self.col = col
767
Enrico Granataac9df2d2013-03-25 18:53:07 +0000768class value_iter(object):
769 def __iter__(self):
770 return self
771
772 def next(self):
773 if self.index >= self.length:
774 raise StopIteration()
775 child_sbvalue = self.sbvalue.GetChildAtIndex(self.index)
776 self.index += 1
777 return value(child_sbvalue)
778
779 def __init__(self,value):
780 self.index = 0
781 self.sbvalue = value
782 if type(self.sbvalue) is value:
783 self.sbvalue = self.sbvalue.sbvalue
784 self.length = self.sbvalue.GetNumChildren()
785
Greg Clayton05e8d192012-02-01 01:46:19 +0000786class value(object):
787 '''A class designed to wrap lldb.SBValue() objects so the resulting object
788 can be used as a variable would be in code. So if you have a Point structure
789 variable in your code in the current frame named "pt", you can initialize an instance
790 of this class with it:
791
792 pt = lldb.value(lldb.frame.FindVariable("pt"))
793 print pt
794 print pt.x
795 print pt.y
796
797 pt = lldb.value(lldb.frame.FindVariable("rectangle_array"))
798 print rectangle_array[12]
799 print rectangle_array[5].origin.x'''
800 def __init__(self, sbvalue):
801 self.sbvalue = sbvalue
802
803 def __nonzero__(self):
804 return self.sbvalue.__nonzero__()
805
Greg Clayton05e8d192012-02-01 01:46:19 +0000806 def __str__(self):
807 return self.sbvalue.__str__()
808
809 def __getitem__(self, key):
810 # Allow array access if this value has children...
Enrico Granata944b4c42012-10-08 17:32:55 +0000811 if type(key) is value:
Enrico Granataac9df2d2013-03-25 18:53:07 +0000812 key = int(key)
813 if type(key) is int:
814 child_sbvalue = (self.sbvalue.GetValueForExpressionPath("[%i]" % key))
815 if child_sbvalue and child_sbvalue.IsValid():
816 return value(child_sbvalue)
817 raise IndexError("Index '%d' is out of range" % key)
Enrico Granata944b4c42012-10-08 17:32:55 +0000818 raise TypeError("No array item of type %s" % str(type(key)))
Greg Clayton05e8d192012-02-01 01:46:19 +0000819
Enrico Granataac9df2d2013-03-25 18:53:07 +0000820 def __iter__(self):
821 return value_iter(self.sbvalue)
822
Greg Clayton05e8d192012-02-01 01:46:19 +0000823 def __getattr__(self, name):
824 child_sbvalue = self.sbvalue.GetChildMemberWithName (name)
Enrico Granataac9df2d2013-03-25 18:53:07 +0000825 if child_sbvalue and child_sbvalue.IsValid():
Greg Clayton05e8d192012-02-01 01:46:19 +0000826 return value(child_sbvalue)
Enrico Granata944b4c42012-10-08 17:32:55 +0000827 raise AttributeError("Attribute '%s' is not defined" % name)
Greg Clayton05e8d192012-02-01 01:46:19 +0000828
829 def __add__(self, other):
830 return int(self) + int(other)
831
832 def __sub__(self, other):
833 return int(self) - int(other)
834
835 def __mul__(self, other):
836 return int(self) * int(other)
837
838 def __floordiv__(self, other):
839 return int(self) // int(other)
840
841 def __mod__(self, other):
842 return int(self) % int(other)
843
844 def __divmod__(self, other):
845 return int(self) % int(other)
846
847 def __pow__(self, other):
848 return int(self) ** int(other)
849
850 def __lshift__(self, other):
851 return int(self) << int(other)
852
853 def __rshift__(self, other):
854 return int(self) >> int(other)
855
856 def __and__(self, other):
857 return int(self) & int(other)
858
859 def __xor__(self, other):
860 return int(self) ^ int(other)
861
862 def __or__(self, other):
863 return int(self) | int(other)
864
865 def __div__(self, other):
866 return int(self) / int(other)
867
868 def __truediv__(self, other):
869 return int(self) / int(other)
870
871 def __iadd__(self, other):
872 result = self.__add__(other)
873 self.sbvalue.SetValueFromCString (str(result))
874 return result
875
876 def __isub__(self, other):
877 result = self.__sub__(other)
878 self.sbvalue.SetValueFromCString (str(result))
879 return result
880
881 def __imul__(self, other):
882 result = self.__mul__(other)
883 self.sbvalue.SetValueFromCString (str(result))
884 return result
885
886 def __idiv__(self, other):
887 result = self.__div__(other)
888 self.sbvalue.SetValueFromCString (str(result))
889 return result
890
891 def __itruediv__(self, other):
892 result = self.__truediv__(other)
893 self.sbvalue.SetValueFromCString (str(result))
894 return result
895
896 def __ifloordiv__(self, other):
897 result = self.__floordiv__(self, other)
898 self.sbvalue.SetValueFromCString (str(result))
899 return result
900
901 def __imod__(self, other):
902 result = self.__and__(self, other)
903 self.sbvalue.SetValueFromCString (str(result))
904 return result
905
906 def __ipow__(self, other):
907 result = self.__pow__(self, other)
908 self.sbvalue.SetValueFromCString (str(result))
909 return result
910
911 def __ipow__(self, other, modulo):
912 result = self.__pow__(self, other, modulo)
913 self.sbvalue.SetValueFromCString (str(result))
914 return result
915
916 def __ilshift__(self, other):
917 result = self.__lshift__(other)
918 self.sbvalue.SetValueFromCString (str(result))
919 return result
920
921 def __irshift__(self, other):
922 result = self.__rshift__(other)
923 self.sbvalue.SetValueFromCString (str(result))
924 return result
925
926 def __iand__(self, other):
927 result = self.__and__(self, other)
928 self.sbvalue.SetValueFromCString (str(result))
929 return result
930
931 def __ixor__(self, other):
932 result = self.__xor__(self, other)
933 self.sbvalue.SetValueFromCString (str(result))
934 return result
935
936 def __ior__(self, other):
937 result = self.__ior__(self, other)
938 self.sbvalue.SetValueFromCString (str(result))
939 return result
940
941 def __neg__(self):
942 return -int(self)
943
944 def __pos__(self):
945 return +int(self)
946
947 def __abs__(self):
948 return abs(int(self))
949
950 def __invert__(self):
951 return ~int(self)
952
953 def __complex__(self):
954 return complex (int(self))
955
956 def __int__(self):
957 return self.sbvalue.GetValueAsSigned()
958
959 def __long__(self):
960 return self.sbvalue.GetValueAsSigned()
961
962 def __float__(self):
963 return float (self.sbvalue.GetValueAsSigned())
964
965 def __oct__(self):
Greg Clayton43484c52012-02-02 00:12:47 +0000966 return '0%o' % self.sbvalue.GetValueAsUnsigned()
Greg Clayton05e8d192012-02-01 01:46:19 +0000967
968 def __hex__(self):
Greg Clayton43484c52012-02-02 00:12:47 +0000969 return '0x%x' % self.sbvalue.GetValueAsUnsigned()
Greg Clayton05e8d192012-02-01 01:46:19 +0000970
Enrico Granataac9df2d2013-03-25 18:53:07 +0000971 def __len__(self):
972 return self.sbvalue.GetNumChildren()
973
Greg Clayton43484c52012-02-02 00:12:47 +0000974 def __eq__(self, other):
Enrico Granata944b4c42012-10-08 17:32:55 +0000975 if type(other) is int:
976 return int(self) == other
977 elif type(other) is str:
978 return str(self) == other
979 elif type(other) is value:
980 self_err = SBError()
981 other_err = SBError()
982 self_val = self.sbvalue.GetValueAsUnsigned(self_err)
983 if self_err.fail:
984 raise ValueError("unable to extract value of self")
985 other_val = other.sbvalue.GetValueAsUnsigned(other_err)
986 if other_err.fail:
987 raise ValueError("unable to extract value of other")
988 return self_val == other_val
989 raise TypeError("Unknown type %s, No equality operation defined." % str(type(other)))
990
Greg Clayton43484c52012-02-02 00:12:47 +0000991 def __neq__(self, other):
992 return not self.__eq__(other)
Greg Clayton05e8d192012-02-01 01:46:19 +0000993%}