1*130d950cSDimitry Andric%extend lldb::SBBreakpoint { 2*130d950cSDimitry Andric %pythoncode %{ 3*130d950cSDimitry Andric def __eq__(self, rhs): 4*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 5*130d950cSDimitry Andric return False 6*130d950cSDimitry Andric 7*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 8*130d950cSDimitry Andric 9*130d950cSDimitry Andric def __ne__(self, rhs): 10*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 11*130d950cSDimitry Andric return True 12*130d950cSDimitry Andric 13*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 14*130d950cSDimitry Andric %} 15*130d950cSDimitry Andric} 16*130d950cSDimitry Andric 17*130d950cSDimitry Andric%extend lldb::SBBroadcaster { 18*130d950cSDimitry Andric %pythoncode %{ 19*130d950cSDimitry Andric def __eq__(self, rhs): 20*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 21*130d950cSDimitry Andric return False 22*130d950cSDimitry Andric 23*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 24*130d950cSDimitry Andric 25*130d950cSDimitry Andric def __ne__(self, rhs): 26*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 27*130d950cSDimitry Andric return True 28*130d950cSDimitry Andric 29*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 30*130d950cSDimitry Andric %} 31*130d950cSDimitry Andric} 32*130d950cSDimitry Andric 33*130d950cSDimitry Andric%extend lldb::SBCommandReturnObject { 34*130d950cSDimitry Andric /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage 35*130d950cSDimitry Andric they are meant to make an SBCommandReturnObject into a file-like object so that instructions of the sort 36*130d950cSDimitry Andric print >>sb_command_return_object, "something" 37*130d950cSDimitry Andric will work correctly */ 38*130d950cSDimitry Andric 39*130d950cSDimitry Andric void lldb::SBCommandReturnObject::write (const char* str) 40*130d950cSDimitry Andric { 41*130d950cSDimitry Andric if (str) 42*130d950cSDimitry Andric $self->Printf("%s",str); 43*130d950cSDimitry Andric } 44*130d950cSDimitry Andric void lldb::SBCommandReturnObject::flush () 45*130d950cSDimitry Andric {} 46*130d950cSDimitry Andric} 47*130d950cSDimitry Andric 48*130d950cSDimitry Andric%extend lldb::SBCompileUnit { 49*130d950cSDimitry Andric %pythoncode %{ 50*130d950cSDimitry Andric def __eq__(self, rhs): 51*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 52*130d950cSDimitry Andric return False 53*130d950cSDimitry Andric 54*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 55*130d950cSDimitry Andric 56*130d950cSDimitry Andric def __ne__(self, rhs): 57*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 58*130d950cSDimitry Andric return True 59*130d950cSDimitry Andric 60*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 61*130d950cSDimitry Andric %} 62*130d950cSDimitry Andric} 63*130d950cSDimitry Andric 64*130d950cSDimitry Andric%extend lldb::SBDeclaration { 65*130d950cSDimitry Andric %pythoncode %{ 66*130d950cSDimitry Andric def __eq__(self, rhs): 67*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 68*130d950cSDimitry Andric return False 69*130d950cSDimitry Andric 70*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 71*130d950cSDimitry Andric 72*130d950cSDimitry Andric def __ne__(self, rhs): 73*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 74*130d950cSDimitry Andric return True 75*130d950cSDimitry Andric 76*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 77*130d950cSDimitry Andric %} 78*130d950cSDimitry Andric} 79*130d950cSDimitry Andric 80*130d950cSDimitry Andric%extend lldb::SBFunction { 81*130d950cSDimitry Andric %pythoncode %{ 82*130d950cSDimitry Andric def __eq__(self, rhs): 83*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 84*130d950cSDimitry Andric return False 85*130d950cSDimitry Andric 86*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 87*130d950cSDimitry Andric 88*130d950cSDimitry Andric def __ne__(self, rhs): 89*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 90*130d950cSDimitry Andric return True 91*130d950cSDimitry Andric 92*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 93*130d950cSDimitry Andric %} 94*130d950cSDimitry Andric} 95*130d950cSDimitry Andric 96*130d950cSDimitry Andric%extend lldb::SBLineEntry { 97*130d950cSDimitry Andric %pythoncode %{ 98*130d950cSDimitry Andric def __eq__(self, rhs): 99*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 100*130d950cSDimitry Andric return False 101*130d950cSDimitry Andric 102*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 103*130d950cSDimitry Andric 104*130d950cSDimitry Andric def __ne__(self, rhs): 105*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 106*130d950cSDimitry Andric return True 107*130d950cSDimitry Andric 108*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 109*130d950cSDimitry Andric %} 110*130d950cSDimitry Andric} 111*130d950cSDimitry Andric 112*130d950cSDimitry Andric%extend lldb::SBModule { 113*130d950cSDimitry Andric %pythoncode %{ 114*130d950cSDimitry Andric def __eq__(self, rhs): 115*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 116*130d950cSDimitry Andric return False 117*130d950cSDimitry Andric 118*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 119*130d950cSDimitry Andric 120*130d950cSDimitry Andric def __ne__(self, rhs): 121*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 122*130d950cSDimitry Andric return True 123*130d950cSDimitry Andric 124*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 125*130d950cSDimitry Andric %} 126*130d950cSDimitry Andric} 127*130d950cSDimitry Andric 128*130d950cSDimitry Andric%extend lldb::SBSection { 129*130d950cSDimitry Andric %pythoncode %{ 130*130d950cSDimitry Andric def __eq__(self, rhs): 131*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 132*130d950cSDimitry Andric return False 133*130d950cSDimitry Andric 134*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 135*130d950cSDimitry Andric 136*130d950cSDimitry Andric def __ne__(self, rhs): 137*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 138*130d950cSDimitry Andric return True 139*130d950cSDimitry Andric 140*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 141*130d950cSDimitry Andric %} 142*130d950cSDimitry Andric} 143*130d950cSDimitry Andric%extend lldb::SBStream { 144*130d950cSDimitry Andric /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage 145*130d950cSDimitry Andric they are meant to make an SBStream into a file-like object so that instructions of the sort 146*130d950cSDimitry Andric print >>sb_stream, "something" 147*130d950cSDimitry Andric will work correctly */ 148*130d950cSDimitry Andric 149*130d950cSDimitry Andric void lldb::SBStream::write (const char* str) 150*130d950cSDimitry Andric { 151*130d950cSDimitry Andric if (str) 152*130d950cSDimitry Andric $self->Printf("%s",str); 153*130d950cSDimitry Andric } 154*130d950cSDimitry Andric void lldb::SBStream::flush () 155*130d950cSDimitry Andric {} 156*130d950cSDimitry Andric} 157*130d950cSDimitry Andric%extend lldb::SBSymbol { 158*130d950cSDimitry Andric %pythoncode %{ 159*130d950cSDimitry Andric def __eq__(self, rhs): 160*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 161*130d950cSDimitry Andric return False 162*130d950cSDimitry Andric 163*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 164*130d950cSDimitry Andric 165*130d950cSDimitry Andric def __ne__(self, rhs): 166*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 167*130d950cSDimitry Andric return True 168*130d950cSDimitry Andric 169*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 170*130d950cSDimitry Andric %} 171*130d950cSDimitry Andric} 172*130d950cSDimitry Andric 173*130d950cSDimitry Andric%extend lldb::SBTarget { 174*130d950cSDimitry Andric %pythoncode %{ 175*130d950cSDimitry Andric def __eq__(self, rhs): 176*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 177*130d950cSDimitry Andric return False 178*130d950cSDimitry Andric 179*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 180*130d950cSDimitry Andric 181*130d950cSDimitry Andric def __ne__(self, rhs): 182*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 183*130d950cSDimitry Andric return True 184*130d950cSDimitry Andric 185*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 186*130d950cSDimitry Andric %} 187*130d950cSDimitry Andric} 188*130d950cSDimitry Andric 189*130d950cSDimitry Andric%extend lldb::SBTypeFilter { 190*130d950cSDimitry Andric %pythoncode %{ 191*130d950cSDimitry Andric def __eq__(self, rhs): 192*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 193*130d950cSDimitry Andric return False 194*130d950cSDimitry Andric 195*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 196*130d950cSDimitry Andric 197*130d950cSDimitry Andric def __ne__(self, rhs): 198*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 199*130d950cSDimitry Andric return True 200*130d950cSDimitry Andric 201*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 202*130d950cSDimitry Andric %} 203*130d950cSDimitry Andric} 204*130d950cSDimitry Andric 205*130d950cSDimitry Andric%extend lldb::SBTypeNameSpecifier { 206*130d950cSDimitry Andric %pythoncode %{ 207*130d950cSDimitry Andric def __eq__(self, rhs): 208*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 209*130d950cSDimitry Andric return False 210*130d950cSDimitry Andric 211*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 212*130d950cSDimitry Andric 213*130d950cSDimitry Andric def __ne__(self, rhs): 214*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 215*130d950cSDimitry Andric return True 216*130d950cSDimitry Andric 217*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 218*130d950cSDimitry Andric %} 219*130d950cSDimitry Andric} 220*130d950cSDimitry Andric 221*130d950cSDimitry Andric%extend lldb::SBTypeSummary { 222*130d950cSDimitry Andric %pythoncode %{ 223*130d950cSDimitry Andric def __eq__(self, rhs): 224*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 225*130d950cSDimitry Andric return False 226*130d950cSDimitry Andric 227*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 228*130d950cSDimitry Andric 229*130d950cSDimitry Andric def __ne__(self, rhs): 230*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 231*130d950cSDimitry Andric return True 232*130d950cSDimitry Andric 233*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 234*130d950cSDimitry Andric %} 235*130d950cSDimitry Andric} 236*130d950cSDimitry Andric 237*130d950cSDimitry Andric%extend lldb::SBTypeSynthetic { 238*130d950cSDimitry Andric %pythoncode %{ 239*130d950cSDimitry Andric def __eq__(self, rhs): 240*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 241*130d950cSDimitry Andric return False 242*130d950cSDimitry Andric 243*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 244*130d950cSDimitry Andric 245*130d950cSDimitry Andric def __ne__(self, rhs): 246*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 247*130d950cSDimitry Andric return True 248*130d950cSDimitry Andric 249*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 250*130d950cSDimitry Andric %} 251*130d950cSDimitry Andric} 252*130d950cSDimitry Andric 253*130d950cSDimitry Andric%extend lldb::SBThread { 254*130d950cSDimitry Andric %pythoncode %{ 255*130d950cSDimitry Andric def __eq__(self, rhs): 256*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 257*130d950cSDimitry Andric return False 258*130d950cSDimitry Andric 259*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 260*130d950cSDimitry Andric 261*130d950cSDimitry Andric def __ne__(self, rhs): 262*130d950cSDimitry Andric if not isinstance(rhs, type(self)): 263*130d950cSDimitry Andric return True 264*130d950cSDimitry Andric 265*130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 266*130d950cSDimitry Andric %} 267*130d950cSDimitry Andric} 268*130d950cSDimitry Andric 269*130d950cSDimitry Andric%pythoncode %{ 270*130d950cSDimitry Andric 271*130d950cSDimitry Andricdef command(command_name=None, doc=None): 272*130d950cSDimitry Andric import lldb 273*130d950cSDimitry Andric """A decorator function that registers an LLDB command line 274*130d950cSDimitry Andric command that is bound to the function it is attached to.""" 275*130d950cSDimitry Andric def callable(function): 276*130d950cSDimitry Andric """Registers an lldb command for the decorated function.""" 277*130d950cSDimitry Andric command = "command script add -f %s.%s %s" % (function.__module__, function.__name__, command_name or function.__name__) 278*130d950cSDimitry Andric lldb.debugger.HandleCommand(command) 279*130d950cSDimitry Andric if doc: 280*130d950cSDimitry Andric function.__doc__ = doc 281*130d950cSDimitry Andric return function 282*130d950cSDimitry Andric 283*130d950cSDimitry Andric return callable 284*130d950cSDimitry Andric 285*130d950cSDimitry Andricclass declaration(object): 286*130d950cSDimitry Andric '''A class that represents a source declaration location with file, line and column.''' 287*130d950cSDimitry Andric def __init__(self, file, line, col): 288*130d950cSDimitry Andric self.file = file 289*130d950cSDimitry Andric self.line = line 290*130d950cSDimitry Andric self.col = col 291*130d950cSDimitry Andric 292*130d950cSDimitry Andricclass value_iter(object): 293*130d950cSDimitry Andric def __iter__(self): 294*130d950cSDimitry Andric return self 295*130d950cSDimitry Andric 296*130d950cSDimitry Andric def __next__(self): 297*130d950cSDimitry Andric if self.index >= self.length: 298*130d950cSDimitry Andric raise StopIteration() 299*130d950cSDimitry Andric child_sbvalue = self.sbvalue.GetChildAtIndex(self.index) 300*130d950cSDimitry Andric self.index += 1 301*130d950cSDimitry Andric return value(child_sbvalue) 302*130d950cSDimitry Andric 303*130d950cSDimitry Andric def next(self): 304*130d950cSDimitry Andric return self.__next__() 305*130d950cSDimitry Andric 306*130d950cSDimitry Andric def __init__(self,value): 307*130d950cSDimitry Andric self.index = 0 308*130d950cSDimitry Andric self.sbvalue = value 309*130d950cSDimitry Andric if type(self.sbvalue) is value: 310*130d950cSDimitry Andric self.sbvalue = self.sbvalue.sbvalue 311*130d950cSDimitry Andric self.length = self.sbvalue.GetNumChildren() 312*130d950cSDimitry Andric 313*130d950cSDimitry Andricclass value(object): 314*130d950cSDimitry Andric '''A class designed to wrap lldb.SBValue() objects so the resulting object 315*130d950cSDimitry Andric can be used as a variable would be in code. So if you have a Point structure 316*130d950cSDimitry Andric variable in your code in the current frame named "pt", you can initialize an instance 317*130d950cSDimitry Andric of this class with it: 318*130d950cSDimitry Andric 319*130d950cSDimitry Andric pt = lldb.value(lldb.frame.FindVariable("pt")) 320*130d950cSDimitry Andric print pt 321*130d950cSDimitry Andric print pt.x 322*130d950cSDimitry Andric print pt.y 323*130d950cSDimitry Andric 324*130d950cSDimitry Andric pt = lldb.value(lldb.frame.FindVariable("rectangle_array")) 325*130d950cSDimitry Andric print rectangle_array[12] 326*130d950cSDimitry Andric print rectangle_array[5].origin.x''' 327*130d950cSDimitry Andric def __init__(self, sbvalue): 328*130d950cSDimitry Andric self.sbvalue = sbvalue 329*130d950cSDimitry Andric 330*130d950cSDimitry Andric def __nonzero__(self): 331*130d950cSDimitry Andric return self.sbvalue.__nonzero__() 332*130d950cSDimitry Andric 333*130d950cSDimitry Andric def __bool__(self): 334*130d950cSDimitry Andric return self.sbvalue.__bool__() 335*130d950cSDimitry Andric 336*130d950cSDimitry Andric def __str__(self): 337*130d950cSDimitry Andric return self.sbvalue.__str__() 338*130d950cSDimitry Andric 339*130d950cSDimitry Andric def __getitem__(self, key): 340*130d950cSDimitry Andric # Allow array access if this value has children... 341*130d950cSDimitry Andric if type(key) is value: 342*130d950cSDimitry Andric key = int(key) 343*130d950cSDimitry Andric if type(key) is int: 344*130d950cSDimitry Andric child_sbvalue = (self.sbvalue.GetValueForExpressionPath("[%i]" % key)) 345*130d950cSDimitry Andric if child_sbvalue and child_sbvalue.IsValid(): 346*130d950cSDimitry Andric return value(child_sbvalue) 347*130d950cSDimitry Andric raise IndexError("Index '%d' is out of range" % key) 348*130d950cSDimitry Andric raise TypeError("No array item of type %s" % str(type(key))) 349*130d950cSDimitry Andric 350*130d950cSDimitry Andric def __iter__(self): 351*130d950cSDimitry Andric return value_iter(self.sbvalue) 352*130d950cSDimitry Andric 353*130d950cSDimitry Andric def __getattr__(self, name): 354*130d950cSDimitry Andric child_sbvalue = self.sbvalue.GetChildMemberWithName (name) 355*130d950cSDimitry Andric if child_sbvalue and child_sbvalue.IsValid(): 356*130d950cSDimitry Andric return value(child_sbvalue) 357*130d950cSDimitry Andric raise AttributeError("Attribute '%s' is not defined" % name) 358*130d950cSDimitry Andric 359*130d950cSDimitry Andric def __add__(self, other): 360*130d950cSDimitry Andric return int(self) + int(other) 361*130d950cSDimitry Andric 362*130d950cSDimitry Andric def __sub__(self, other): 363*130d950cSDimitry Andric return int(self) - int(other) 364*130d950cSDimitry Andric 365*130d950cSDimitry Andric def __mul__(self, other): 366*130d950cSDimitry Andric return int(self) * int(other) 367*130d950cSDimitry Andric 368*130d950cSDimitry Andric def __floordiv__(self, other): 369*130d950cSDimitry Andric return int(self) // int(other) 370*130d950cSDimitry Andric 371*130d950cSDimitry Andric def __mod__(self, other): 372*130d950cSDimitry Andric return int(self) % int(other) 373*130d950cSDimitry Andric 374*130d950cSDimitry Andric def __divmod__(self, other): 375*130d950cSDimitry Andric return int(self) % int(other) 376*130d950cSDimitry Andric 377*130d950cSDimitry Andric def __pow__(self, other): 378*130d950cSDimitry Andric return int(self) ** int(other) 379*130d950cSDimitry Andric 380*130d950cSDimitry Andric def __lshift__(self, other): 381*130d950cSDimitry Andric return int(self) << int(other) 382*130d950cSDimitry Andric 383*130d950cSDimitry Andric def __rshift__(self, other): 384*130d950cSDimitry Andric return int(self) >> int(other) 385*130d950cSDimitry Andric 386*130d950cSDimitry Andric def __and__(self, other): 387*130d950cSDimitry Andric return int(self) & int(other) 388*130d950cSDimitry Andric 389*130d950cSDimitry Andric def __xor__(self, other): 390*130d950cSDimitry Andric return int(self) ^ int(other) 391*130d950cSDimitry Andric 392*130d950cSDimitry Andric def __or__(self, other): 393*130d950cSDimitry Andric return int(self) | int(other) 394*130d950cSDimitry Andric 395*130d950cSDimitry Andric def __div__(self, other): 396*130d950cSDimitry Andric return int(self) / int(other) 397*130d950cSDimitry Andric 398*130d950cSDimitry Andric def __truediv__(self, other): 399*130d950cSDimitry Andric return int(self) / int(other) 400*130d950cSDimitry Andric 401*130d950cSDimitry Andric def __iadd__(self, other): 402*130d950cSDimitry Andric result = self.__add__(other) 403*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 404*130d950cSDimitry Andric return result 405*130d950cSDimitry Andric 406*130d950cSDimitry Andric def __isub__(self, other): 407*130d950cSDimitry Andric result = self.__sub__(other) 408*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 409*130d950cSDimitry Andric return result 410*130d950cSDimitry Andric 411*130d950cSDimitry Andric def __imul__(self, other): 412*130d950cSDimitry Andric result = self.__mul__(other) 413*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 414*130d950cSDimitry Andric return result 415*130d950cSDimitry Andric 416*130d950cSDimitry Andric def __idiv__(self, other): 417*130d950cSDimitry Andric result = self.__div__(other) 418*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 419*130d950cSDimitry Andric return result 420*130d950cSDimitry Andric 421*130d950cSDimitry Andric def __itruediv__(self, other): 422*130d950cSDimitry Andric result = self.__truediv__(other) 423*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 424*130d950cSDimitry Andric return result 425*130d950cSDimitry Andric 426*130d950cSDimitry Andric def __ifloordiv__(self, other): 427*130d950cSDimitry Andric result = self.__floordiv__(self, other) 428*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 429*130d950cSDimitry Andric return result 430*130d950cSDimitry Andric 431*130d950cSDimitry Andric def __imod__(self, other): 432*130d950cSDimitry Andric result = self.__and__(self, other) 433*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 434*130d950cSDimitry Andric return result 435*130d950cSDimitry Andric 436*130d950cSDimitry Andric def __ipow__(self, other): 437*130d950cSDimitry Andric result = self.__pow__(self, other) 438*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 439*130d950cSDimitry Andric return result 440*130d950cSDimitry Andric 441*130d950cSDimitry Andric def __ipow__(self, other, modulo): 442*130d950cSDimitry Andric result = self.__pow__(self, other, modulo) 443*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 444*130d950cSDimitry Andric return result 445*130d950cSDimitry Andric 446*130d950cSDimitry Andric def __ilshift__(self, other): 447*130d950cSDimitry Andric result = self.__lshift__(other) 448*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 449*130d950cSDimitry Andric return result 450*130d950cSDimitry Andric 451*130d950cSDimitry Andric def __irshift__(self, other): 452*130d950cSDimitry Andric result = self.__rshift__(other) 453*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 454*130d950cSDimitry Andric return result 455*130d950cSDimitry Andric 456*130d950cSDimitry Andric def __iand__(self, other): 457*130d950cSDimitry Andric result = self.__and__(self, other) 458*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 459*130d950cSDimitry Andric return result 460*130d950cSDimitry Andric 461*130d950cSDimitry Andric def __ixor__(self, other): 462*130d950cSDimitry Andric result = self.__xor__(self, other) 463*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 464*130d950cSDimitry Andric return result 465*130d950cSDimitry Andric 466*130d950cSDimitry Andric def __ior__(self, other): 467*130d950cSDimitry Andric result = self.__ior__(self, other) 468*130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 469*130d950cSDimitry Andric return result 470*130d950cSDimitry Andric 471*130d950cSDimitry Andric def __neg__(self): 472*130d950cSDimitry Andric return -int(self) 473*130d950cSDimitry Andric 474*130d950cSDimitry Andric def __pos__(self): 475*130d950cSDimitry Andric return +int(self) 476*130d950cSDimitry Andric 477*130d950cSDimitry Andric def __abs__(self): 478*130d950cSDimitry Andric return abs(int(self)) 479*130d950cSDimitry Andric 480*130d950cSDimitry Andric def __invert__(self): 481*130d950cSDimitry Andric return ~int(self) 482*130d950cSDimitry Andric 483*130d950cSDimitry Andric def __complex__(self): 484*130d950cSDimitry Andric return complex (int(self)) 485*130d950cSDimitry Andric 486*130d950cSDimitry Andric def __int__(self): 487*130d950cSDimitry Andric is_num,is_sign = is_numeric_type(self.sbvalue.GetType().GetCanonicalType().GetBasicType()) 488*130d950cSDimitry Andric if is_num and not is_sign: return self.sbvalue.GetValueAsUnsigned() 489*130d950cSDimitry Andric return self.sbvalue.GetValueAsSigned() 490*130d950cSDimitry Andric 491*130d950cSDimitry Andric def __long__(self): 492*130d950cSDimitry Andric return self.__int__() 493*130d950cSDimitry Andric 494*130d950cSDimitry Andric def __float__(self): 495*130d950cSDimitry Andric return float (self.sbvalue.GetValueAsSigned()) 496*130d950cSDimitry Andric 497*130d950cSDimitry Andric def __oct__(self): 498*130d950cSDimitry Andric return '0%o' % self.sbvalue.GetValueAsUnsigned() 499*130d950cSDimitry Andric 500*130d950cSDimitry Andric def __hex__(self): 501*130d950cSDimitry Andric return '0x%x' % self.sbvalue.GetValueAsUnsigned() 502*130d950cSDimitry Andric 503*130d950cSDimitry Andric def __len__(self): 504*130d950cSDimitry Andric return self.sbvalue.GetNumChildren() 505*130d950cSDimitry Andric 506*130d950cSDimitry Andric def __eq__(self, other): 507*130d950cSDimitry Andric if type(other) is int: 508*130d950cSDimitry Andric return int(self) == other 509*130d950cSDimitry Andric elif type(other) is str: 510*130d950cSDimitry Andric return str(self) == other 511*130d950cSDimitry Andric elif type(other) is value: 512*130d950cSDimitry Andric self_err = SBError() 513*130d950cSDimitry Andric other_err = SBError() 514*130d950cSDimitry Andric self_val = self.sbvalue.GetValueAsUnsigned(self_err) 515*130d950cSDimitry Andric if self_err.fail: 516*130d950cSDimitry Andric raise ValueError("unable to extract value of self") 517*130d950cSDimitry Andric other_val = other.sbvalue.GetValueAsUnsigned(other_err) 518*130d950cSDimitry Andric if other_err.fail: 519*130d950cSDimitry Andric raise ValueError("unable to extract value of other") 520*130d950cSDimitry Andric return self_val == other_val 521*130d950cSDimitry Andric raise TypeError("Unknown type %s, No equality operation defined." % str(type(other))) 522*130d950cSDimitry Andric 523*130d950cSDimitry Andric def __ne__(self, other): 524*130d950cSDimitry Andric return not self.__eq__(other) 525*130d950cSDimitry Andric%} 526*130d950cSDimitry Andric 527*130d950cSDimitry Andric%pythoncode %{ 528*130d950cSDimitry Andric 529*130d950cSDimitry Andricclass SBSyntheticValueProvider(object): 530*130d950cSDimitry Andric def __init__(self,valobj): 531*130d950cSDimitry Andric pass 532*130d950cSDimitry Andric 533*130d950cSDimitry Andric def num_children(self): 534*130d950cSDimitry Andric return 0 535*130d950cSDimitry Andric 536*130d950cSDimitry Andric def get_child_index(self,name): 537*130d950cSDimitry Andric return None 538*130d950cSDimitry Andric 539*130d950cSDimitry Andric def get_child_at_index(self,idx): 540*130d950cSDimitry Andric return None 541*130d950cSDimitry Andric 542*130d950cSDimitry Andric def update(self): 543*130d950cSDimitry Andric pass 544*130d950cSDimitry Andric 545*130d950cSDimitry Andric def has_children(self): 546*130d950cSDimitry Andric return False 547*130d950cSDimitry Andric 548*130d950cSDimitry Andric 549*130d950cSDimitry Andric%} 550*130d950cSDimitry Andric 551*130d950cSDimitry Andric%pythoncode %{ 552*130d950cSDimitry Andric 553*130d950cSDimitry Andric# given an lldb.SBBasicType it returns a tuple 554*130d950cSDimitry Andric# (is_numeric, is_signed) 555*130d950cSDimitry Andric# the value of is_signed is undefined if is_numeric == false 556*130d950cSDimitry Andricdef is_numeric_type(basic_type): 557*130d950cSDimitry Andric if basic_type == eBasicTypeInvalid: return (False,False) 558*130d950cSDimitry Andric if basic_type == eBasicTypeVoid: return (False,False) 559*130d950cSDimitry Andric if basic_type == eBasicTypeChar: return (True,False) 560*130d950cSDimitry Andric if basic_type == eBasicTypeSignedChar: return (True,True) 561*130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedChar: return (True,False) 562*130d950cSDimitry Andric if basic_type == eBasicTypeWChar: return (True,False) 563*130d950cSDimitry Andric if basic_type == eBasicTypeSignedWChar: return (True,True) 564*130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedWChar: return (True,False) 565*130d950cSDimitry Andric if basic_type == eBasicTypeChar16: return (True,False) 566*130d950cSDimitry Andric if basic_type == eBasicTypeChar32: return (True,False) 567*130d950cSDimitry Andric if basic_type == eBasicTypeShort: return (True,True) 568*130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedShort: return (True,False) 569*130d950cSDimitry Andric if basic_type == eBasicTypeInt: return (True,True) 570*130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedInt: return (True,False) 571*130d950cSDimitry Andric if basic_type == eBasicTypeLong: return (True,True) 572*130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedLong: return (True,False) 573*130d950cSDimitry Andric if basic_type == eBasicTypeLongLong: return (True,True) 574*130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedLongLong: return (True,False) 575*130d950cSDimitry Andric if basic_type == eBasicTypeInt128: return (True,True) 576*130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedInt128: return (True,False) 577*130d950cSDimitry Andric if basic_type == eBasicTypeBool: return (False,False) 578*130d950cSDimitry Andric if basic_type == eBasicTypeHalf: return (True,True) 579*130d950cSDimitry Andric if basic_type == eBasicTypeFloat: return (True,True) 580*130d950cSDimitry Andric if basic_type == eBasicTypeDouble: return (True,True) 581*130d950cSDimitry Andric if basic_type == eBasicTypeLongDouble: return (True,True) 582*130d950cSDimitry Andric if basic_type == eBasicTypeFloatComplex: return (True,True) 583*130d950cSDimitry Andric if basic_type == eBasicTypeDoubleComplex: return (True,True) 584*130d950cSDimitry Andric if basic_type == eBasicTypeLongDoubleComplex: return (True,True) 585*130d950cSDimitry Andric if basic_type == eBasicTypeObjCID: return (False,False) 586*130d950cSDimitry Andric if basic_type == eBasicTypeObjCClass: return (False,False) 587*130d950cSDimitry Andric if basic_type == eBasicTypeObjCSel: return (False,False) 588*130d950cSDimitry Andric if basic_type == eBasicTypeNullPtr: return (False,False) 589*130d950cSDimitry Andric #if basic_type == eBasicTypeOther: 590*130d950cSDimitry Andric return (False,False) 591*130d950cSDimitry Andric 592*130d950cSDimitry Andric%} 593