blob: 49172b3cd0b841bc7a2c1d68b40d0c32e621711b [file] [log] [blame]
Caroline Ticee49ec182010-09-22 23:01:29 +00001
2%extend lldb::SBAddress {
3 PyObject *lldb::SBAddress::__repr__ (){
4 lldb::SBStream description;
5 $self->GetDescription (description);
Greg Clayton394da8e2012-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);
12 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +000013 }
14}
15%extend lldb::SBBlock {
16 PyObject *lldb::SBBlock::__repr__ (){
17 lldb::SBStream description;
18 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +000019 const char *desc = description.GetData();
20 size_t desc_len = description.GetSize();
21 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
22 --desc_len;
23 if (desc_len > 0)
24 return PyString_FromStringAndSize (desc, desc_len);
25 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +000026 }
27}
28%extend lldb::SBBreakpoint {
29 PyObject *lldb::SBBreakpoint::__repr__ (){
30 lldb::SBStream description;
Greg Claytond8c62532010-10-07 04:19:01 +000031 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +000032 const char *desc = description.GetData();
33 size_t desc_len = description.GetSize();
34 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
35 --desc_len;
36 if (desc_len > 0)
37 return PyString_FromStringAndSize (desc, desc_len);
38 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +000039 }
40}
41%extend lldb::SBBreakpointLocation {
42 PyObject *lldb::SBBreakpointLocation::__repr__ (){
43 lldb::SBStream description;
Johnny Chenbdc36bd2011-04-25 20:23:05 +000044 $self->GetDescription (description, lldb::eDescriptionLevelFull);
Greg Clayton394da8e2012-02-01 02:30:27 +000045 const char *desc = description.GetData();
46 size_t desc_len = description.GetSize();
47 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
48 --desc_len;
49 if (desc_len > 0)
50 return PyString_FromStringAndSize (desc, desc_len);
51 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +000052 }
53}
54%extend lldb::SBCommandReturnObject {
55 PyObject *lldb::SBCommandReturnObject::__repr__ (){
56 lldb::SBStream description;
57 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +000058 const char *desc = description.GetData();
59 size_t desc_len = description.GetSize();
60 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
61 --desc_len;
62 if (desc_len > 0)
63 return PyString_FromStringAndSize (desc, desc_len);
64 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +000065 }
66}
67%extend lldb::SBCompileUnit {
68 PyObject *lldb::SBCompileUnit::__repr__ (){
69 lldb::SBStream description;
70 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +000071 const char *desc = description.GetData();
72 size_t desc_len = description.GetSize();
73 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
74 --desc_len;
75 if (desc_len > 0)
76 return PyString_FromStringAndSize (desc, desc_len);
77 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +000078 }
79}
Enrico Granata91544802011-09-06 19:20:51 +000080%extend lldb::SBData {
81 PyObject *lldb::SBData::__repr__ (){
82 lldb::SBStream description;
83 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +000084 const char *desc = description.GetData();
85 size_t desc_len = description.GetSize();
86 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
87 --desc_len;
88 if (desc_len > 0)
89 return PyString_FromStringAndSize (desc, desc_len);
90 return Py_None;
Enrico Granata91544802011-09-06 19:20:51 +000091 }
92}
Caroline Ticee49ec182010-09-22 23:01:29 +000093%extend lldb::SBDebugger {
94 PyObject *lldb::SBDebugger::__repr__ (){
95 lldb::SBStream description;
96 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +000097 const char *desc = description.GetData();
98 size_t desc_len = description.GetSize();
99 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
100 --desc_len;
101 if (desc_len > 0)
102 return PyString_FromStringAndSize (desc, desc_len);
103 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000104 }
105}
106%extend lldb::SBError {
107 PyObject *lldb::SBError::__repr__ (){
108 lldb::SBStream description;
109 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000110 const char *desc = description.GetData();
111 size_t desc_len = description.GetSize();
112 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
113 --desc_len;
114 if (desc_len > 0)
115 return PyString_FromStringAndSize (desc, desc_len);
116 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000117 }
118}
119%extend lldb::SBFileSpec {
120 PyObject *lldb::SBFileSpec::__repr__ (){
121 lldb::SBStream description;
122 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000123 const char *desc = description.GetData();
124 size_t desc_len = description.GetSize();
125 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
126 --desc_len;
127 if (desc_len > 0)
128 return PyString_FromStringAndSize (desc, desc_len);
129 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000130 }
131}
132%extend lldb::SBFrame {
133 PyObject *lldb::SBFrame::__repr__ (){
134 lldb::SBStream description;
135 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000136 const char *desc = description.GetData();
137 size_t desc_len = description.GetSize();
138 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
139 --desc_len;
140 if (desc_len > 0)
141 return PyString_FromStringAndSize (desc, desc_len);
142 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000143 }
144}
145%extend lldb::SBFunction {
146 PyObject *lldb::SBFunction::__repr__ (){
147 lldb::SBStream description;
148 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000149 const char *desc = description.GetData();
150 size_t desc_len = description.GetSize();
151 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
152 --desc_len;
153 if (desc_len > 0)
154 return PyString_FromStringAndSize (desc, desc_len);
155 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000156 }
157}
Greg Clayton5c4c7462010-10-06 03:09:58 +0000158%extend lldb::SBInstruction {
159 PyObject *lldb::SBInstruction::__repr__ (){
160 lldb::SBStream description;
161 $self->GetDescription (description);
Greg Clayton394da8e2012-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);
168 return Py_None;
Greg Clayton5c4c7462010-10-06 03:09:58 +0000169 }
170}
171%extend lldb::SBInstructionList {
172 PyObject *lldb::SBInstructionList::__repr__ (){
173 lldb::SBStream description;
174 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000175 const char *desc = description.GetData();
176 size_t desc_len = description.GetSize();
177 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
178 --desc_len;
179 if (desc_len > 0)
180 return PyString_FromStringAndSize (desc, desc_len);
181 return Py_None;
Greg Clayton5c4c7462010-10-06 03:09:58 +0000182 }
183}
Caroline Ticee49ec182010-09-22 23:01:29 +0000184%extend lldb::SBLineEntry {
185 PyObject *lldb::SBLineEntry::__repr__ (){
186 lldb::SBStream description;
187 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000188 const char *desc = description.GetData();
189 size_t desc_len = description.GetSize();
190 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
191 --desc_len;
192 if (desc_len > 0)
193 return PyString_FromStringAndSize (desc, desc_len);
194 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000195 }
196}
197%extend lldb::SBModule {
198 PyObject *lldb::SBModule::__repr__ (){
199 lldb::SBStream description;
200 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000201 const char *desc = description.GetData();
202 size_t desc_len = description.GetSize();
203 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
204 --desc_len;
205 if (desc_len > 0)
206 return PyString_FromStringAndSize (desc, desc_len);
207 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000208 }
209}
210%extend lldb::SBProcess {
211 PyObject *lldb::SBProcess::__repr__ (){
212 lldb::SBStream description;
213 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000214 const char *desc = description.GetData();
215 size_t desc_len = description.GetSize();
216 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
217 --desc_len;
218 if (desc_len > 0)
219 return PyString_FromStringAndSize (desc, desc_len);
220 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000221 }
222}
Greg Clayton15ef51e2011-09-24 05:04:40 +0000223%extend lldb::SBSection {
224 PyObject *lldb::SBSection::__repr__ (){
225 lldb::SBStream description;
226 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000227 const char *desc = description.GetData();
228 size_t desc_len = description.GetSize();
229 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
230 --desc_len;
231 if (desc_len > 0)
232 return PyString_FromStringAndSize (desc, desc_len);
233 return Py_None;
Greg Clayton15ef51e2011-09-24 05:04:40 +0000234 }
235}
Caroline Ticee49ec182010-09-22 23:01:29 +0000236%extend lldb::SBSymbol {
237 PyObject *lldb::SBSymbol::__repr__ (){
238 lldb::SBStream description;
239 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000240 const char *desc = description.GetData();
241 size_t desc_len = description.GetSize();
242 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
243 --desc_len;
244 if (desc_len > 0)
245 return PyString_FromStringAndSize (desc, desc_len);
246 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000247 }
248}
249%extend lldb::SBSymbolContext {
250 PyObject *lldb::SBSymbolContext::__repr__ (){
251 lldb::SBStream description;
252 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000253 const char *desc = description.GetData();
254 size_t desc_len = description.GetSize();
255 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
256 --desc_len;
257 if (desc_len > 0)
258 return PyString_FromStringAndSize (desc, desc_len);
259 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000260 }
261}
262%extend lldb::SBTarget {
263 PyObject *lldb::SBTarget::__repr__ (){
264 lldb::SBStream description;
Caroline Tice7826c882010-10-26 03:11:13 +0000265 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
Greg Clayton394da8e2012-02-01 02:30:27 +0000266 const char *desc = description.GetData();
267 size_t desc_len = description.GetSize();
268 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
269 --desc_len;
270 if (desc_len > 0)
271 return PyString_FromStringAndSize (desc, desc_len);
272 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000273 }
274}
Greg Clayton96154be2011-11-13 06:57:31 +0000275%extend lldb::SBType {
276 PyObject *lldb::SBType::__repr__ (){
277 lldb::SBStream description;
278 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
Greg Clayton394da8e2012-02-01 02:30:27 +0000279 const char *desc = description.GetData();
280 size_t desc_len = description.GetSize();
281 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
282 --desc_len;
283 if (desc_len > 0)
284 return PyString_FromStringAndSize (desc, desc_len);
285 return Py_None;
Greg Clayton96154be2011-11-13 06:57:31 +0000286 }
287}
288%extend lldb::SBTypeMember {
289 PyObject *lldb::SBTypeMember::__repr__ (){
290 lldb::SBStream description;
291 $self->GetDescription (description, lldb::eDescriptionLevelBrief);
Greg Clayton394da8e2012-02-01 02:30:27 +0000292 const char *desc = description.GetData();
293 size_t desc_len = description.GetSize();
294 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
295 --desc_len;
296 if (desc_len > 0)
297 return PyString_FromStringAndSize (desc, desc_len);
298 return Py_None;
Greg Clayton96154be2011-11-13 06:57:31 +0000299 }
300}
Caroline Ticee49ec182010-09-22 23:01:29 +0000301%extend lldb::SBThread {
302 PyObject *lldb::SBThread::__repr__ (){
303 lldb::SBStream description;
304 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000305 const char *desc = description.GetData();
306 size_t desc_len = description.GetSize();
307 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
308 --desc_len;
309 if (desc_len > 0)
310 return PyString_FromStringAndSize (desc, desc_len);
311 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000312 }
313}
314%extend lldb::SBValue {
315 PyObject *lldb::SBValue::__repr__ (){
316 lldb::SBStream description;
317 $self->GetDescription (description);
Greg Clayton394da8e2012-02-01 02:30:27 +0000318 const char *desc = description.GetData();
319 size_t desc_len = description.GetSize();
320 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
321 --desc_len;
322 if (desc_len > 0)
323 return PyString_FromStringAndSize (desc, desc_len);
324 return Py_None;
Caroline Ticee49ec182010-09-22 23:01:29 +0000325 }
326}
Greg Claytond62b9c12012-02-03 07:02:37 +0000327%extend lldb::SBValueList {
328 PyObject *lldb::SBValueList::__repr__ (){
329 lldb::SBStream description;
330 const size_t n = $self->GetSize();
331 if (n)
332 {
333 for (size_t i=0; i<n; ++i)
334 $self->GetValueAtIndex(i).GetDescription(description);
335 }
336 else
337 {
338 description.Printf("<empty> lldb.SBValueList()");
339 }
340 const char *desc = description.GetData();
341 size_t desc_len = description.GetSize();
342 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
343 --desc_len;
344 if (desc_len > 0)
345 return PyString_FromStringAndSize (desc, desc_len);
346 return Py_None;
347 }
348}
Greg Clayton1fa6b3d2011-10-13 18:08:26 +0000349%extend lldb::SBWatchpoint {
350 PyObject *lldb::SBWatchpoint::__repr__ (){
Johnny Chen092bd152011-09-27 01:19:20 +0000351 lldb::SBStream description;
352 $self->GetDescription (description, lldb::eDescriptionLevelVerbose);
Greg Clayton394da8e2012-02-01 02:30:27 +0000353 const char *desc = description.GetData();
354 size_t desc_len = description.GetSize();
355 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
356 --desc_len;
357 if (desc_len > 0)
358 return PyString_FromStringAndSize (desc, desc_len);
359 return Py_None;
Johnny Chen092bd152011-09-27 01:19:20 +0000360 }
361}
Caroline Ticee49ec182010-09-22 23:01:29 +0000362
Greg Clayton9b8ff512012-02-01 01:46:19 +0000363%pythoncode %{
364
365class value(object):
366 '''A class designed to wrap lldb.SBValue() objects so the resulting object
367 can be used as a variable would be in code. So if you have a Point structure
368 variable in your code in the current frame named "pt", you can initialize an instance
369 of this class with it:
370
371 pt = lldb.value(lldb.frame.FindVariable("pt"))
372 print pt
373 print pt.x
374 print pt.y
375
376 pt = lldb.value(lldb.frame.FindVariable("rectangle_array"))
377 print rectangle_array[12]
378 print rectangle_array[5].origin.x'''
379 def __init__(self, sbvalue):
380 self.sbvalue = sbvalue
381
382 def __nonzero__(self):
383 return self.sbvalue.__nonzero__()
384
385 def __repr__(self):
386 return self.sbvalue.__repr__()
387
388 def __str__(self):
389 return self.sbvalue.__str__()
390
391 def __getitem__(self, key):
392 # Allow array access if this value has children...
393 if type(key) is int:
394 return value(self.sbvalue.GetValueForExpressionPath("[%i]" % key))
395 raise TypeError
396
397 def __getattr__(self, name):
398 child_sbvalue = self.sbvalue.GetChildMemberWithName (name)
399 if child_sbvalue:
400 return value(child_sbvalue)
401 raise AttributeError
402
403 def __add__(self, other):
404 return int(self) + int(other)
405
406 def __sub__(self, other):
407 return int(self) - int(other)
408
409 def __mul__(self, other):
410 return int(self) * int(other)
411
412 def __floordiv__(self, other):
413 return int(self) // int(other)
414
415 def __mod__(self, other):
416 return int(self) % int(other)
417
418 def __divmod__(self, other):
419 return int(self) % int(other)
420
421 def __pow__(self, other):
422 return int(self) ** int(other)
423
424 def __lshift__(self, other):
425 return int(self) << int(other)
426
427 def __rshift__(self, other):
428 return int(self) >> int(other)
429
430 def __and__(self, other):
431 return int(self) & int(other)
432
433 def __xor__(self, other):
434 return int(self) ^ int(other)
435
436 def __or__(self, other):
437 return int(self) | int(other)
438
439 def __div__(self, other):
440 return int(self) / int(other)
441
442 def __truediv__(self, other):
443 return int(self) / int(other)
444
445 def __iadd__(self, other):
446 result = self.__add__(other)
447 self.sbvalue.SetValueFromCString (str(result))
448 return result
449
450 def __isub__(self, other):
451 result = self.__sub__(other)
452 self.sbvalue.SetValueFromCString (str(result))
453 return result
454
455 def __imul__(self, other):
456 result = self.__mul__(other)
457 self.sbvalue.SetValueFromCString (str(result))
458 return result
459
460 def __idiv__(self, other):
461 result = self.__div__(other)
462 self.sbvalue.SetValueFromCString (str(result))
463 return result
464
465 def __itruediv__(self, other):
466 result = self.__truediv__(other)
467 self.sbvalue.SetValueFromCString (str(result))
468 return result
469
470 def __ifloordiv__(self, other):
471 result = self.__floordiv__(self, other)
472 self.sbvalue.SetValueFromCString (str(result))
473 return result
474
475 def __imod__(self, other):
476 result = self.__and__(self, other)
477 self.sbvalue.SetValueFromCString (str(result))
478 return result
479
480 def __ipow__(self, other):
481 result = self.__pow__(self, other)
482 self.sbvalue.SetValueFromCString (str(result))
483 return result
484
485 def __ipow__(self, other, modulo):
486 result = self.__pow__(self, other, modulo)
487 self.sbvalue.SetValueFromCString (str(result))
488 return result
489
490 def __ilshift__(self, other):
491 result = self.__lshift__(other)
492 self.sbvalue.SetValueFromCString (str(result))
493 return result
494
495 def __irshift__(self, other):
496 result = self.__rshift__(other)
497 self.sbvalue.SetValueFromCString (str(result))
498 return result
499
500 def __iand__(self, other):
501 result = self.__and__(self, other)
502 self.sbvalue.SetValueFromCString (str(result))
503 return result
504
505 def __ixor__(self, other):
506 result = self.__xor__(self, other)
507 self.sbvalue.SetValueFromCString (str(result))
508 return result
509
510 def __ior__(self, other):
511 result = self.__ior__(self, other)
512 self.sbvalue.SetValueFromCString (str(result))
513 return result
514
515 def __neg__(self):
516 return -int(self)
517
518 def __pos__(self):
519 return +int(self)
520
521 def __abs__(self):
522 return abs(int(self))
523
524 def __invert__(self):
525 return ~int(self)
526
527 def __complex__(self):
528 return complex (int(self))
529
530 def __int__(self):
531 return self.sbvalue.GetValueAsSigned()
532
533 def __long__(self):
534 return self.sbvalue.GetValueAsSigned()
535
536 def __float__(self):
537 return float (self.sbvalue.GetValueAsSigned())
538
539 def __oct__(self):
Greg Clayton1ea58022012-02-02 00:12:47 +0000540 return '0%o' % self.sbvalue.GetValueAsUnsigned()
Greg Clayton9b8ff512012-02-01 01:46:19 +0000541
542 def __hex__(self):
Greg Clayton1ea58022012-02-02 00:12:47 +0000543 return '0x%x' % self.sbvalue.GetValueAsUnsigned()
Greg Clayton9b8ff512012-02-01 01:46:19 +0000544
Greg Clayton1ea58022012-02-02 00:12:47 +0000545 def __eq__(self, other):
546 return self.sbvalue.GetValueAsUnsigned() == self.sbvalue.GetValueAsUnsigned()
547
548 def __neq__(self, other):
549 return not self.__eq__(other)
Greg Clayton9b8ff512012-02-01 01:46:19 +0000550%}
551