1 %extend lldb::SBBreakpoint {
4 if not isinstance(rhs, type(self)):
7 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
10 if not isinstance(rhs, type(self)):
13 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
17 %extend lldb::SBBroadcaster {
19 def __eq__(self, rhs):
20 if not isinstance(rhs, type(self)):
23 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
25 def __ne__(self, rhs):
26 if not isinstance(rhs, type(self)):
29 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
33 %extend lldb::SBCommandReturnObject {
34 /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage
35 they are meant to make an SBCommandReturnObject into a file-like object so that instructions of the sort
36 print >>sb_command_return_object, "something"
37 will work correctly */
39 void lldb::SBCommandReturnObject::write (const char* str)
42 $self->Printf("%s",str);
44 void lldb::SBCommandReturnObject::flush ()
48 %extend lldb::SBCompileUnit {
50 def __eq__(self, rhs):
51 if not isinstance(rhs, type(self)):
54 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
56 def __ne__(self, rhs):
57 if not isinstance(rhs, type(self)):
60 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
64 %extend lldb::SBDeclaration {
66 def __eq__(self, rhs):
67 if not isinstance(rhs, type(self)):
70 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
72 def __ne__(self, rhs):
73 if not isinstance(rhs, type(self)):
76 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
80 %extend lldb::SBFunction {
82 def __eq__(self, rhs):
83 if not isinstance(rhs, type(self)):
86 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
88 def __ne__(self, rhs):
89 if not isinstance(rhs, type(self)):
92 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
96 %extend lldb::SBLineEntry {
98 def __eq__(self, rhs):
99 if not isinstance(rhs, type(self)):
102 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
104 def __ne__(self, rhs):
105 if not isinstance(rhs, type(self)):
108 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
112 %extend lldb::SBModule {
114 def __eq__(self, rhs):
115 if not isinstance(rhs, type(self)):
118 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
120 def __ne__(self, rhs):
121 if not isinstance(rhs, type(self)):
124 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
128 %extend lldb::SBSection {
130 def __eq__(self, rhs):
131 if not isinstance(rhs, type(self)):
134 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
136 def __ne__(self, rhs):
137 if not isinstance(rhs, type(self)):
140 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
143 %extend lldb::SBStream {
144 /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage
145 they are meant to make an SBStream into a file-like object so that instructions of the sort
146 print >>sb_stream, "something"
147 will work correctly */
149 void lldb::SBStream::write (const char* str)
152 $self->Printf("%s",str);
154 void lldb::SBStream::flush ()
157 %extend lldb::SBSymbol {
159 def __eq__(self, rhs):
160 if not isinstance(rhs, type(self)):
163 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
165 def __ne__(self, rhs):
166 if not isinstance(rhs, type(self)):
169 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
173 %extend lldb::SBTarget {
175 def __eq__(self, rhs):
176 if not isinstance(rhs, type(self)):
179 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
181 def __ne__(self, rhs):
182 if not isinstance(rhs, type(self)):
185 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
189 %extend lldb::SBTypeFilter {
191 def __eq__(self, rhs):
192 if not isinstance(rhs, type(self)):
195 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
197 def __ne__(self, rhs):
198 if not isinstance(rhs, type(self)):
201 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
205 %extend lldb::SBTypeNameSpecifier {
207 def __eq__(self, rhs):
208 if not isinstance(rhs, type(self)):
211 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
213 def __ne__(self, rhs):
214 if not isinstance(rhs, type(self)):
217 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
221 %extend lldb::SBTypeSummary {
223 def __eq__(self, rhs):
224 if not isinstance(rhs, type(self)):
227 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
229 def __ne__(self, rhs):
230 if not isinstance(rhs, type(self)):
233 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
237 %extend lldb::SBTypeSynthetic {
239 def __eq__(self, rhs):
240 if not isinstance(rhs, type(self)):
243 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
245 def __ne__(self, rhs):
246 if not isinstance(rhs, type(self)):
249 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
253 %extend lldb::SBThread {
255 def __eq__(self, rhs):
256 if not isinstance(rhs, type(self)):
259 return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
261 def __ne__(self, rhs):
262 if not isinstance(rhs, type(self)):
265 return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
271 def command(command_name=None, doc=None):
273 """A decorator function that registers an LLDB command line
274 command that is bound to the function it is attached to."""
275 def callable(function):
276 """Registers an lldb command for the decorated function."""
277 command = "command script add -f %s.%s %s" % (function.__module__, function.__name__, command_name or function.__name__)
278 lldb.debugger.HandleCommand(command)
280 function.__doc__ = doc
285 class declaration(object):
286 '''A class that represents a source declaration location with file, line and column.'''
287 def __init__(self, file, line, col):
292 class value_iter(object):
293 '''Allows iterating over the children of an :py:class:`SBValue`.'''
298 if self.index >= self.length:
299 raise StopIteration()
300 child_sbvalue = self.sbvalue.GetChildAtIndex(self.index)
302 return value(child_sbvalue)
305 return self.__next__()
307 def __eq__(self, other):
308 return not self.__ne__(other)
313 def __init__(self,value):
317 if type(self.sbvalue) is value:
318 self.sbvalue = self.sbvalue.sbvalue
319 self.length = self.sbvalue.GetNumChildren()
322 '''Wraps :py:class:`SBValue` objects so the resulting object can be used as a variable would be in code.
324 So if you have a Point structure variable in your code in the current frame named "pt",
325 you can initialize an instance of this class with it: ::
327 pt = lldb.value(lldb.frame.FindVariable("pt"))
332 pt = lldb.value(lldb.frame.FindVariable("rectangle_array"))
333 print rectangle_array[12]
334 print rectangle_array[5].origin.x'''
335 def __init__(self, sbvalue):
336 self.sbvalue = sbvalue
338 def __nonzero__(self):
339 return self.sbvalue.__nonzero__()
342 return self.sbvalue.__bool__()
345 return self.sbvalue.__str__()
347 def __getitem__(self, key):
348 # Allow array access if this value has children...
349 if type(key) is value:
352 child_sbvalue = (self.sbvalue.GetValueForExpressionPath("[%i]" % key))
353 if child_sbvalue and child_sbvalue.IsValid():
354 return value(child_sbvalue)
355 raise IndexError("Index '%d' is out of range" % key)
356 raise TypeError("No array item of type %s" % str(type(key)))
359 return value_iter(self.sbvalue)
361 def __getattr__(self, name):
362 child_sbvalue = self.sbvalue.GetChildMemberWithName (name)
363 if child_sbvalue and child_sbvalue.IsValid():
364 return value(child_sbvalue)
365 raise AttributeError("Attribute '%s' is not defined" % name)
367 def __add__(self, other):
368 return int(self) + int(other)
370 def __sub__(self, other):
371 return int(self) - int(other)
373 def __mul__(self, other):
374 return int(self) * int(other)
376 def __floordiv__(self, other):
377 return int(self) // int(other)
379 def __mod__(self, other):
380 return int(self) % int(other)
382 def __divmod__(self, other):
383 return int(self) % int(other)
385 def __pow__(self, other):
386 return int(self) ** int(other)
388 def __lshift__(self, other):
389 return int(self) << int(other)
391 def __rshift__(self, other):
392 return int(self) >> int(other)
394 def __and__(self, other):
395 return int(self) & int(other)
397 def __xor__(self, other):
398 return int(self) ^ int(other)
400 def __or__(self, other):
401 return int(self) | int(other)
403 def __div__(self, other):
404 return int(self) / int(other)
406 def __truediv__(self, other):
407 return int(self) / int(other)
409 def __iadd__(self, other):
410 result = self.__add__(other)
411 self.sbvalue.SetValueFromCString (str(result))
414 def __isub__(self, other):
415 result = self.__sub__(other)
416 self.sbvalue.SetValueFromCString (str(result))
419 def __imul__(self, other):
420 result = self.__mul__(other)
421 self.sbvalue.SetValueFromCString (str(result))
424 def __idiv__(self, other):
425 result = self.__div__(other)
426 self.sbvalue.SetValueFromCString (str(result))
429 def __itruediv__(self, other):
430 result = self.__truediv__(other)
431 self.sbvalue.SetValueFromCString (str(result))
434 def __ifloordiv__(self, other):
435 result = self.__floordiv__(self, other)
436 self.sbvalue.SetValueFromCString (str(result))
439 def __imod__(self, other):
440 result = self.__and__(self, other)
441 self.sbvalue.SetValueFromCString (str(result))
444 def __ipow__(self, other):
445 result = self.__pow__(self, other)
446 self.sbvalue.SetValueFromCString (str(result))
449 def __ipow__(self, other, modulo):
450 result = self.__pow__(self, other, modulo)
451 self.sbvalue.SetValueFromCString (str(result))
454 def __ilshift__(self, other):
455 result = self.__lshift__(other)
456 self.sbvalue.SetValueFromCString (str(result))
459 def __irshift__(self, other):
460 result = self.__rshift__(other)
461 self.sbvalue.SetValueFromCString (str(result))
464 def __iand__(self, other):
465 result = self.__and__(self, other)
466 self.sbvalue.SetValueFromCString (str(result))
469 def __ixor__(self, other):
470 result = self.__xor__(self, other)
471 self.sbvalue.SetValueFromCString (str(result))
474 def __ior__(self, other):
475 result = self.__ior__(self, other)
476 self.sbvalue.SetValueFromCString (str(result))
486 return abs(int(self))
488 def __invert__(self):
491 def __complex__(self):
492 return complex (int(self))
495 is_num,is_sign = is_numeric_type(self.sbvalue.GetType().GetCanonicalType().GetBasicType())
496 if is_num and not is_sign: return self.sbvalue.GetValueAsUnsigned()
497 return self.sbvalue.GetValueAsSigned()
500 return self.__int__()
503 return float (self.sbvalue.GetValueAsSigned())
506 return '0%o' % self.sbvalue.GetValueAsUnsigned()
509 return '0x%x' % self.sbvalue.GetValueAsUnsigned()
512 return self.sbvalue.GetNumChildren()
514 def __eq__(self, other):
515 if type(other) is int:
516 return int(self) == other
517 elif type(other) is str:
518 return str(self) == other
519 elif type(other) is value:
521 other_err = SBError()
522 self_val = self.sbvalue.GetValueAsUnsigned(self_err)
524 raise ValueError("unable to extract value of self")
525 other_val = other.sbvalue.GetValueAsUnsigned(other_err)
527 raise ValueError("unable to extract value of other")
528 return self_val == other_val
529 raise TypeError("Unknown type %s, No equality operation defined." % str(type(other)))
531 def __ne__(self, other):
532 return not self.__eq__(other)
537 class SBSyntheticValueProvider(object):
538 def __init__(self,valobj):
541 def num_children(self):
544 def get_child_index(self,name):
547 def get_child_at_index(self,idx):
553 def has_children(self):
557 return self.num_children()
560 '''Iterate over all children in a lldb.SBSyntheticValueProvider object.'''
561 return lldb_iter(self, 'num_children', 'get_child_at_index')
567 # given an lldb.SBBasicType it returns a tuple
568 # (is_numeric, is_signed)
569 # the value of is_signed is undefined if is_numeric == false
570 def is_numeric_type(basic_type):
571 if basic_type == eBasicTypeInvalid: return (False,False)
572 if basic_type == eBasicTypeVoid: return (False,False)
573 if basic_type == eBasicTypeChar: return (True,False)
574 if basic_type == eBasicTypeSignedChar: return (True,True)
575 if basic_type == eBasicTypeUnsignedChar: return (True,False)
576 if basic_type == eBasicTypeWChar: return (True,False)
577 if basic_type == eBasicTypeSignedWChar: return (True,True)
578 if basic_type == eBasicTypeUnsignedWChar: return (True,False)
579 if basic_type == eBasicTypeChar16: return (True,False)
580 if basic_type == eBasicTypeChar32: return (True,False)
581 if basic_type == eBasicTypeChar8: return (True,False)
582 if basic_type == eBasicTypeShort: return (True,True)
583 if basic_type == eBasicTypeUnsignedShort: return (True,False)
584 if basic_type == eBasicTypeInt: return (True,True)
585 if basic_type == eBasicTypeUnsignedInt: return (True,False)
586 if basic_type == eBasicTypeLong: return (True,True)
587 if basic_type == eBasicTypeUnsignedLong: return (True,False)
588 if basic_type == eBasicTypeLongLong: return (True,True)
589 if basic_type == eBasicTypeUnsignedLongLong: return (True,False)
590 if basic_type == eBasicTypeInt128: return (True,True)
591 if basic_type == eBasicTypeUnsignedInt128: return (True,False)
592 if basic_type == eBasicTypeBool: return (False,False)
593 if basic_type == eBasicTypeHalf: return (True,True)
594 if basic_type == eBasicTypeFloat: return (True,True)
595 if basic_type == eBasicTypeDouble: return (True,True)
596 if basic_type == eBasicTypeLongDouble: return (True,True)
597 if basic_type == eBasicTypeFloatComplex: return (True,True)
598 if basic_type == eBasicTypeDoubleComplex: return (True,True)
599 if basic_type == eBasicTypeLongDoubleComplex: return (True,True)
600 if basic_type == eBasicTypeObjCID: return (False,False)
601 if basic_type == eBasicTypeObjCClass: return (False,False)
602 if basic_type == eBasicTypeObjCSel: return (False,False)
603 if basic_type == eBasicTypeNullPtr: return (False,False)
604 #if basic_type == eBasicTypeOther: