blob: 1cf6519b390fa9ce3fd3a76c848c702739068640 [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 Clayton1fa6b3d2011-10-13 18:08:26 +0000327%extend lldb::SBWatchpoint {
328 PyObject *lldb::SBWatchpoint::__repr__ (){
Johnny Chen092bd152011-09-27 01:19:20 +0000329 lldb::SBStream description;
330 $self->GetDescription (description, lldb::eDescriptionLevelVerbose);
Greg Clayton394da8e2012-02-01 02:30:27 +0000331 const char *desc = description.GetData();
332 size_t desc_len = description.GetSize();
333 if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
334 --desc_len;
335 if (desc_len > 0)
336 return PyString_FromStringAndSize (desc, desc_len);
337 return Py_None;
Johnny Chen092bd152011-09-27 01:19:20 +0000338 }
339}
Caroline Ticee49ec182010-09-22 23:01:29 +0000340
Greg Clayton9b8ff512012-02-01 01:46:19 +0000341%pythoncode %{
342
343class value(object):
344 '''A class designed to wrap lldb.SBValue() objects so the resulting object
345 can be used as a variable would be in code. So if you have a Point structure
346 variable in your code in the current frame named "pt", you can initialize an instance
347 of this class with it:
348
349 pt = lldb.value(lldb.frame.FindVariable("pt"))
350 print pt
351 print pt.x
352 print pt.y
353
354 pt = lldb.value(lldb.frame.FindVariable("rectangle_array"))
355 print rectangle_array[12]
356 print rectangle_array[5].origin.x'''
357 def __init__(self, sbvalue):
358 self.sbvalue = sbvalue
359
360 def __nonzero__(self):
361 return self.sbvalue.__nonzero__()
362
363 def __repr__(self):
364 return self.sbvalue.__repr__()
365
366 def __str__(self):
367 return self.sbvalue.__str__()
368
369 def __getitem__(self, key):
370 # Allow array access if this value has children...
371 if type(key) is int:
372 return value(self.sbvalue.GetValueForExpressionPath("[%i]" % key))
373 raise TypeError
374
375 def __getattr__(self, name):
376 child_sbvalue = self.sbvalue.GetChildMemberWithName (name)
377 if child_sbvalue:
378 return value(child_sbvalue)
379 raise AttributeError
380
381 def __add__(self, other):
382 return int(self) + int(other)
383
384 def __sub__(self, other):
385 return int(self) - int(other)
386
387 def __mul__(self, other):
388 return int(self) * int(other)
389
390 def __floordiv__(self, other):
391 return int(self) // int(other)
392
393 def __mod__(self, other):
394 return int(self) % int(other)
395
396 def __divmod__(self, other):
397 return int(self) % int(other)
398
399 def __pow__(self, other):
400 return int(self) ** int(other)
401
402 def __lshift__(self, other):
403 return int(self) << int(other)
404
405 def __rshift__(self, other):
406 return int(self) >> int(other)
407
408 def __and__(self, other):
409 return int(self) & int(other)
410
411 def __xor__(self, other):
412 return int(self) ^ int(other)
413
414 def __or__(self, other):
415 return int(self) | int(other)
416
417 def __div__(self, other):
418 return int(self) / int(other)
419
420 def __truediv__(self, other):
421 return int(self) / int(other)
422
423 def __iadd__(self, other):
424 result = self.__add__(other)
425 self.sbvalue.SetValueFromCString (str(result))
426 return result
427
428 def __isub__(self, other):
429 result = self.__sub__(other)
430 self.sbvalue.SetValueFromCString (str(result))
431 return result
432
433 def __imul__(self, other):
434 result = self.__mul__(other)
435 self.sbvalue.SetValueFromCString (str(result))
436 return result
437
438 def __idiv__(self, other):
439 result = self.__div__(other)
440 self.sbvalue.SetValueFromCString (str(result))
441 return result
442
443 def __itruediv__(self, other):
444 result = self.__truediv__(other)
445 self.sbvalue.SetValueFromCString (str(result))
446 return result
447
448 def __ifloordiv__(self, other):
449 result = self.__floordiv__(self, other)
450 self.sbvalue.SetValueFromCString (str(result))
451 return result
452
453 def __imod__(self, other):
454 result = self.__and__(self, other)
455 self.sbvalue.SetValueFromCString (str(result))
456 return result
457
458 def __ipow__(self, other):
459 result = self.__pow__(self, other)
460 self.sbvalue.SetValueFromCString (str(result))
461 return result
462
463 def __ipow__(self, other, modulo):
464 result = self.__pow__(self, other, modulo)
465 self.sbvalue.SetValueFromCString (str(result))
466 return result
467
468 def __ilshift__(self, other):
469 result = self.__lshift__(other)
470 self.sbvalue.SetValueFromCString (str(result))
471 return result
472
473 def __irshift__(self, other):
474 result = self.__rshift__(other)
475 self.sbvalue.SetValueFromCString (str(result))
476 return result
477
478 def __iand__(self, other):
479 result = self.__and__(self, other)
480 self.sbvalue.SetValueFromCString (str(result))
481 return result
482
483 def __ixor__(self, other):
484 result = self.__xor__(self, other)
485 self.sbvalue.SetValueFromCString (str(result))
486 return result
487
488 def __ior__(self, other):
489 result = self.__ior__(self, other)
490 self.sbvalue.SetValueFromCString (str(result))
491 return result
492
493 def __neg__(self):
494 return -int(self)
495
496 def __pos__(self):
497 return +int(self)
498
499 def __abs__(self):
500 return abs(int(self))
501
502 def __invert__(self):
503 return ~int(self)
504
505 def __complex__(self):
506 return complex (int(self))
507
508 def __int__(self):
509 return self.sbvalue.GetValueAsSigned()
510
511 def __long__(self):
512 return self.sbvalue.GetValueAsSigned()
513
514 def __float__(self):
515 return float (self.sbvalue.GetValueAsSigned())
516
517 def __oct__(self):
Greg Clayton1ea58022012-02-02 00:12:47 +0000518 return '0%o' % self.sbvalue.GetValueAsUnsigned()
Greg Clayton9b8ff512012-02-01 01:46:19 +0000519
520 def __hex__(self):
Greg Clayton1ea58022012-02-02 00:12:47 +0000521 return '0x%x' % self.sbvalue.GetValueAsUnsigned()
Greg Clayton9b8ff512012-02-01 01:46:19 +0000522
Greg Clayton1ea58022012-02-02 00:12:47 +0000523 def __eq__(self, other):
524 return self.sbvalue.GetValueAsUnsigned() == self.sbvalue.GetValueAsUnsigned()
525
526 def __neq__(self, other):
527 return not self.__eq__(other)
Greg Clayton9b8ff512012-02-01 01:46:19 +0000528%}
529