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