1130d950cSDimitry Andric%extend lldb::SBBreakpoint { 2130d950cSDimitry Andric %pythoncode %{ 3130d950cSDimitry Andric def __eq__(self, rhs): 4130d950cSDimitry Andric if not isinstance(rhs, type(self)): 5130d950cSDimitry Andric return False 6130d950cSDimitry Andric 7130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 8130d950cSDimitry Andric 9130d950cSDimitry Andric def __ne__(self, rhs): 10130d950cSDimitry Andric if not isinstance(rhs, type(self)): 11130d950cSDimitry Andric return True 12130d950cSDimitry Andric 13130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 14130d950cSDimitry Andric %} 15130d950cSDimitry Andric} 16130d950cSDimitry Andric 17130d950cSDimitry Andric%extend lldb::SBBroadcaster { 18130d950cSDimitry Andric %pythoncode %{ 19130d950cSDimitry Andric def __eq__(self, rhs): 20130d950cSDimitry Andric if not isinstance(rhs, type(self)): 21130d950cSDimitry Andric return False 22130d950cSDimitry Andric 23130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 24130d950cSDimitry Andric 25130d950cSDimitry Andric def __ne__(self, rhs): 26130d950cSDimitry Andric if not isinstance(rhs, type(self)): 27130d950cSDimitry Andric return True 28130d950cSDimitry Andric 29130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 30130d950cSDimitry Andric %} 31130d950cSDimitry Andric} 32130d950cSDimitry Andric 33130d950cSDimitry Andric%extend lldb::SBCommandReturnObject { 34130d950cSDimitry Andric /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage 35130d950cSDimitry Andric they are meant to make an SBCommandReturnObject into a file-like object so that instructions of the sort 36130d950cSDimitry Andric print >>sb_command_return_object, "something" 37130d950cSDimitry Andric will work correctly */ 38130d950cSDimitry Andric 39130d950cSDimitry Andric void lldb::SBCommandReturnObject::write (const char* str) 40130d950cSDimitry Andric { 41130d950cSDimitry Andric if (str) 42130d950cSDimitry Andric $self->Printf("%s",str); 43130d950cSDimitry Andric } 44130d950cSDimitry Andric void lldb::SBCommandReturnObject::flush () 45130d950cSDimitry Andric {} 46130d950cSDimitry Andric} 47130d950cSDimitry Andric 48130d950cSDimitry Andric%extend lldb::SBCompileUnit { 49130d950cSDimitry Andric %pythoncode %{ 50130d950cSDimitry Andric def __eq__(self, rhs): 51130d950cSDimitry Andric if not isinstance(rhs, type(self)): 52130d950cSDimitry Andric return False 53130d950cSDimitry Andric 54130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 55130d950cSDimitry Andric 56130d950cSDimitry Andric def __ne__(self, rhs): 57130d950cSDimitry Andric if not isinstance(rhs, type(self)): 58130d950cSDimitry Andric return True 59130d950cSDimitry Andric 60130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 61130d950cSDimitry Andric %} 62130d950cSDimitry Andric} 63130d950cSDimitry Andric 64130d950cSDimitry Andric%extend lldb::SBDeclaration { 65130d950cSDimitry Andric %pythoncode %{ 66130d950cSDimitry Andric def __eq__(self, rhs): 67130d950cSDimitry Andric if not isinstance(rhs, type(self)): 68130d950cSDimitry Andric return False 69130d950cSDimitry Andric 70130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 71130d950cSDimitry Andric 72130d950cSDimitry Andric def __ne__(self, rhs): 73130d950cSDimitry Andric if not isinstance(rhs, type(self)): 74130d950cSDimitry Andric return True 75130d950cSDimitry Andric 76130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 77130d950cSDimitry Andric %} 78130d950cSDimitry Andric} 79130d950cSDimitry Andric 80130d950cSDimitry Andric%extend lldb::SBFunction { 81130d950cSDimitry Andric %pythoncode %{ 82130d950cSDimitry Andric def __eq__(self, rhs): 83130d950cSDimitry Andric if not isinstance(rhs, type(self)): 84130d950cSDimitry Andric return False 85130d950cSDimitry Andric 86130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 87130d950cSDimitry Andric 88130d950cSDimitry Andric def __ne__(self, rhs): 89130d950cSDimitry Andric if not isinstance(rhs, type(self)): 90130d950cSDimitry Andric return True 91130d950cSDimitry Andric 92130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 93130d950cSDimitry Andric %} 94130d950cSDimitry Andric} 95130d950cSDimitry Andric 96130d950cSDimitry Andric%extend lldb::SBLineEntry { 97130d950cSDimitry Andric %pythoncode %{ 98130d950cSDimitry Andric def __eq__(self, rhs): 99130d950cSDimitry Andric if not isinstance(rhs, type(self)): 100130d950cSDimitry Andric return False 101130d950cSDimitry Andric 102130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 103130d950cSDimitry Andric 104130d950cSDimitry Andric def __ne__(self, rhs): 105130d950cSDimitry Andric if not isinstance(rhs, type(self)): 106130d950cSDimitry Andric return True 107130d950cSDimitry Andric 108130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 109130d950cSDimitry Andric %} 110130d950cSDimitry Andric} 111130d950cSDimitry Andric 112130d950cSDimitry Andric%extend lldb::SBModule { 113130d950cSDimitry Andric %pythoncode %{ 114130d950cSDimitry Andric def __eq__(self, rhs): 115130d950cSDimitry Andric if not isinstance(rhs, type(self)): 116130d950cSDimitry Andric return False 117130d950cSDimitry Andric 118130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 119130d950cSDimitry Andric 120130d950cSDimitry Andric def __ne__(self, rhs): 121130d950cSDimitry Andric if not isinstance(rhs, type(self)): 122130d950cSDimitry Andric return True 123130d950cSDimitry Andric 124130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 125130d950cSDimitry Andric %} 126130d950cSDimitry Andric} 127130d950cSDimitry Andric 128130d950cSDimitry Andric%extend lldb::SBSection { 129130d950cSDimitry Andric %pythoncode %{ 130130d950cSDimitry Andric def __eq__(self, rhs): 131130d950cSDimitry Andric if not isinstance(rhs, type(self)): 132130d950cSDimitry Andric return False 133130d950cSDimitry Andric 134130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 135130d950cSDimitry Andric 136130d950cSDimitry Andric def __ne__(self, rhs): 137130d950cSDimitry Andric if not isinstance(rhs, type(self)): 138130d950cSDimitry Andric return True 139130d950cSDimitry Andric 140130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 141130d950cSDimitry Andric %} 142130d950cSDimitry Andric} 143130d950cSDimitry Andric%extend lldb::SBStream { 144130d950cSDimitry Andric /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage 145130d950cSDimitry Andric they are meant to make an SBStream into a file-like object so that instructions of the sort 146130d950cSDimitry Andric print >>sb_stream, "something" 147130d950cSDimitry Andric will work correctly */ 148130d950cSDimitry Andric 149130d950cSDimitry Andric void lldb::SBStream::write (const char* str) 150130d950cSDimitry Andric { 151130d950cSDimitry Andric if (str) 152130d950cSDimitry Andric $self->Printf("%s",str); 153130d950cSDimitry Andric } 154130d950cSDimitry Andric void lldb::SBStream::flush () 155130d950cSDimitry Andric {} 156130d950cSDimitry Andric} 157130d950cSDimitry Andric%extend lldb::SBSymbol { 158130d950cSDimitry Andric %pythoncode %{ 159130d950cSDimitry Andric def __eq__(self, rhs): 160130d950cSDimitry Andric if not isinstance(rhs, type(self)): 161130d950cSDimitry Andric return False 162130d950cSDimitry Andric 163130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 164130d950cSDimitry Andric 165130d950cSDimitry Andric def __ne__(self, rhs): 166130d950cSDimitry Andric if not isinstance(rhs, type(self)): 167130d950cSDimitry Andric return True 168130d950cSDimitry Andric 169130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 170130d950cSDimitry Andric %} 171130d950cSDimitry Andric} 172130d950cSDimitry Andric 173130d950cSDimitry Andric%extend lldb::SBTarget { 174130d950cSDimitry Andric %pythoncode %{ 175130d950cSDimitry Andric def __eq__(self, rhs): 176130d950cSDimitry Andric if not isinstance(rhs, type(self)): 177130d950cSDimitry Andric return False 178130d950cSDimitry Andric 179130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 180130d950cSDimitry Andric 181130d950cSDimitry Andric def __ne__(self, rhs): 182130d950cSDimitry Andric if not isinstance(rhs, type(self)): 183130d950cSDimitry Andric return True 184130d950cSDimitry Andric 185130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 186130d950cSDimitry Andric %} 187130d950cSDimitry Andric} 188130d950cSDimitry Andric 189130d950cSDimitry Andric%extend lldb::SBTypeFilter { 190130d950cSDimitry Andric %pythoncode %{ 191130d950cSDimitry Andric def __eq__(self, rhs): 192130d950cSDimitry Andric if not isinstance(rhs, type(self)): 193130d950cSDimitry Andric return False 194130d950cSDimitry Andric 195130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 196130d950cSDimitry Andric 197130d950cSDimitry Andric def __ne__(self, rhs): 198130d950cSDimitry Andric if not isinstance(rhs, type(self)): 199130d950cSDimitry Andric return True 200130d950cSDimitry Andric 201130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 202130d950cSDimitry Andric %} 203130d950cSDimitry Andric} 204130d950cSDimitry Andric 205130d950cSDimitry Andric%extend lldb::SBTypeNameSpecifier { 206130d950cSDimitry Andric %pythoncode %{ 207130d950cSDimitry Andric def __eq__(self, rhs): 208130d950cSDimitry Andric if not isinstance(rhs, type(self)): 209130d950cSDimitry Andric return False 210130d950cSDimitry Andric 211130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 212130d950cSDimitry Andric 213130d950cSDimitry Andric def __ne__(self, rhs): 214130d950cSDimitry Andric if not isinstance(rhs, type(self)): 215130d950cSDimitry Andric return True 216130d950cSDimitry Andric 217130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 218130d950cSDimitry Andric %} 219130d950cSDimitry Andric} 220130d950cSDimitry Andric 221130d950cSDimitry Andric%extend lldb::SBTypeSummary { 222130d950cSDimitry Andric %pythoncode %{ 223130d950cSDimitry Andric def __eq__(self, rhs): 224130d950cSDimitry Andric if not isinstance(rhs, type(self)): 225130d950cSDimitry Andric return False 226130d950cSDimitry Andric 227130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 228130d950cSDimitry Andric 229130d950cSDimitry Andric def __ne__(self, rhs): 230130d950cSDimitry Andric if not isinstance(rhs, type(self)): 231130d950cSDimitry Andric return True 232130d950cSDimitry Andric 233130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 234130d950cSDimitry Andric %} 235130d950cSDimitry Andric} 236130d950cSDimitry Andric 237130d950cSDimitry Andric%extend lldb::SBTypeSynthetic { 238130d950cSDimitry Andric %pythoncode %{ 239130d950cSDimitry Andric def __eq__(self, rhs): 240130d950cSDimitry Andric if not isinstance(rhs, type(self)): 241130d950cSDimitry Andric return False 242130d950cSDimitry Andric 243130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 244130d950cSDimitry Andric 245130d950cSDimitry Andric def __ne__(self, rhs): 246130d950cSDimitry Andric if not isinstance(rhs, type(self)): 247130d950cSDimitry Andric return True 248130d950cSDimitry Andric 249130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 250130d950cSDimitry Andric %} 251130d950cSDimitry Andric} 252130d950cSDimitry Andric 253130d950cSDimitry Andric%extend lldb::SBThread { 254130d950cSDimitry Andric %pythoncode %{ 255130d950cSDimitry Andric def __eq__(self, rhs): 256130d950cSDimitry Andric if not isinstance(rhs, type(self)): 257130d950cSDimitry Andric return False 258130d950cSDimitry Andric 259130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 260130d950cSDimitry Andric 261130d950cSDimitry Andric def __ne__(self, rhs): 262130d950cSDimitry Andric if not isinstance(rhs, type(self)): 263130d950cSDimitry Andric return True 264130d950cSDimitry Andric 265130d950cSDimitry Andric return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 266130d950cSDimitry Andric %} 267130d950cSDimitry Andric} 268130d950cSDimitry Andric 269130d950cSDimitry Andric%pythoncode %{ 270130d950cSDimitry Andric 271130d950cSDimitry Andricdef command(command_name=None, doc=None): 272130d950cSDimitry Andric import lldb 273130d950cSDimitry Andric """A decorator function that registers an LLDB command line 274130d950cSDimitry Andric command that is bound to the function it is attached to.""" 275130d950cSDimitry Andric def callable(function): 276130d950cSDimitry Andric """Registers an lldb command for the decorated function.""" 277130d950cSDimitry Andric command = "command script add -f %s.%s %s" % (function.__module__, function.__name__, command_name or function.__name__) 278130d950cSDimitry Andric lldb.debugger.HandleCommand(command) 279130d950cSDimitry Andric if doc: 280130d950cSDimitry Andric function.__doc__ = doc 281130d950cSDimitry Andric return function 282130d950cSDimitry Andric 283130d950cSDimitry Andric return callable 284130d950cSDimitry Andric 285130d950cSDimitry Andricclass declaration(object): 286130d950cSDimitry Andric '''A class that represents a source declaration location with file, line and column.''' 287130d950cSDimitry Andric def __init__(self, file, line, col): 288130d950cSDimitry Andric self.file = file 289130d950cSDimitry Andric self.line = line 290130d950cSDimitry Andric self.col = col 291130d950cSDimitry Andric 292130d950cSDimitry Andricclass value_iter(object): 293*e8d8bef9SDimitry Andric '''Allows iterating over the children of an :py:class:`SBValue`.''' 294130d950cSDimitry Andric def __iter__(self): 295130d950cSDimitry Andric return self 296130d950cSDimitry Andric 297130d950cSDimitry Andric def __next__(self): 298130d950cSDimitry Andric if self.index >= self.length: 299130d950cSDimitry Andric raise StopIteration() 300130d950cSDimitry Andric child_sbvalue = self.sbvalue.GetChildAtIndex(self.index) 301130d950cSDimitry Andric self.index += 1 302130d950cSDimitry Andric return value(child_sbvalue) 303130d950cSDimitry Andric 304130d950cSDimitry Andric def next(self): 305130d950cSDimitry Andric return self.__next__() 306130d950cSDimitry Andric 307130d950cSDimitry Andric def __init__(self,value): 308130d950cSDimitry Andric self.index = 0 309130d950cSDimitry Andric self.sbvalue = value 310130d950cSDimitry Andric if type(self.sbvalue) is value: 311130d950cSDimitry Andric self.sbvalue = self.sbvalue.sbvalue 312130d950cSDimitry Andric self.length = self.sbvalue.GetNumChildren() 313130d950cSDimitry Andric 314130d950cSDimitry Andricclass value(object): 315*e8d8bef9SDimitry Andric '''Wraps :py:class:`SBValue` objects so the resulting object can be used as a variable would be in code. 316*e8d8bef9SDimitry Andric 317*e8d8bef9SDimitry Andric So if you have a Point structure variable in your code in the current frame named "pt", 318*e8d8bef9SDimitry Andric you can initialize an instance of this class with it: :: 319130d950cSDimitry Andric 320130d950cSDimitry Andric pt = lldb.value(lldb.frame.FindVariable("pt")) 321130d950cSDimitry Andric print pt 322130d950cSDimitry Andric print pt.x 323130d950cSDimitry Andric print pt.y 324130d950cSDimitry Andric 325130d950cSDimitry Andric pt = lldb.value(lldb.frame.FindVariable("rectangle_array")) 326130d950cSDimitry Andric print rectangle_array[12] 327130d950cSDimitry Andric print rectangle_array[5].origin.x''' 328130d950cSDimitry Andric def __init__(self, sbvalue): 329130d950cSDimitry Andric self.sbvalue = sbvalue 330130d950cSDimitry Andric 331130d950cSDimitry Andric def __nonzero__(self): 332130d950cSDimitry Andric return self.sbvalue.__nonzero__() 333130d950cSDimitry Andric 334130d950cSDimitry Andric def __bool__(self): 335130d950cSDimitry Andric return self.sbvalue.__bool__() 336130d950cSDimitry Andric 337130d950cSDimitry Andric def __str__(self): 338130d950cSDimitry Andric return self.sbvalue.__str__() 339130d950cSDimitry Andric 340130d950cSDimitry Andric def __getitem__(self, key): 341130d950cSDimitry Andric # Allow array access if this value has children... 342130d950cSDimitry Andric if type(key) is value: 343130d950cSDimitry Andric key = int(key) 344130d950cSDimitry Andric if type(key) is int: 345130d950cSDimitry Andric child_sbvalue = (self.sbvalue.GetValueForExpressionPath("[%i]" % key)) 346130d950cSDimitry Andric if child_sbvalue and child_sbvalue.IsValid(): 347130d950cSDimitry Andric return value(child_sbvalue) 348130d950cSDimitry Andric raise IndexError("Index '%d' is out of range" % key) 349130d950cSDimitry Andric raise TypeError("No array item of type %s" % str(type(key))) 350130d950cSDimitry Andric 351130d950cSDimitry Andric def __iter__(self): 352130d950cSDimitry Andric return value_iter(self.sbvalue) 353130d950cSDimitry Andric 354130d950cSDimitry Andric def __getattr__(self, name): 355130d950cSDimitry Andric child_sbvalue = self.sbvalue.GetChildMemberWithName (name) 356130d950cSDimitry Andric if child_sbvalue and child_sbvalue.IsValid(): 357130d950cSDimitry Andric return value(child_sbvalue) 358130d950cSDimitry Andric raise AttributeError("Attribute '%s' is not defined" % name) 359130d950cSDimitry Andric 360130d950cSDimitry Andric def __add__(self, other): 361130d950cSDimitry Andric return int(self) + int(other) 362130d950cSDimitry Andric 363130d950cSDimitry Andric def __sub__(self, other): 364130d950cSDimitry Andric return int(self) - int(other) 365130d950cSDimitry Andric 366130d950cSDimitry Andric def __mul__(self, other): 367130d950cSDimitry Andric return int(self) * int(other) 368130d950cSDimitry Andric 369130d950cSDimitry Andric def __floordiv__(self, other): 370130d950cSDimitry Andric return int(self) // int(other) 371130d950cSDimitry Andric 372130d950cSDimitry Andric def __mod__(self, other): 373130d950cSDimitry Andric return int(self) % int(other) 374130d950cSDimitry Andric 375130d950cSDimitry Andric def __divmod__(self, other): 376130d950cSDimitry Andric return int(self) % int(other) 377130d950cSDimitry Andric 378130d950cSDimitry Andric def __pow__(self, other): 379130d950cSDimitry Andric return int(self) ** int(other) 380130d950cSDimitry Andric 381130d950cSDimitry Andric def __lshift__(self, other): 382130d950cSDimitry Andric return int(self) << int(other) 383130d950cSDimitry Andric 384130d950cSDimitry Andric def __rshift__(self, other): 385130d950cSDimitry Andric return int(self) >> int(other) 386130d950cSDimitry Andric 387130d950cSDimitry Andric def __and__(self, other): 388130d950cSDimitry Andric return int(self) & int(other) 389130d950cSDimitry Andric 390130d950cSDimitry Andric def __xor__(self, other): 391130d950cSDimitry Andric return int(self) ^ int(other) 392130d950cSDimitry Andric 393130d950cSDimitry Andric def __or__(self, other): 394130d950cSDimitry Andric return int(self) | int(other) 395130d950cSDimitry Andric 396130d950cSDimitry Andric def __div__(self, other): 397130d950cSDimitry Andric return int(self) / int(other) 398130d950cSDimitry Andric 399130d950cSDimitry Andric def __truediv__(self, other): 400130d950cSDimitry Andric return int(self) / int(other) 401130d950cSDimitry Andric 402130d950cSDimitry Andric def __iadd__(self, other): 403130d950cSDimitry Andric result = self.__add__(other) 404130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 405130d950cSDimitry Andric return result 406130d950cSDimitry Andric 407130d950cSDimitry Andric def __isub__(self, other): 408130d950cSDimitry Andric result = self.__sub__(other) 409130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 410130d950cSDimitry Andric return result 411130d950cSDimitry Andric 412130d950cSDimitry Andric def __imul__(self, other): 413130d950cSDimitry Andric result = self.__mul__(other) 414130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 415130d950cSDimitry Andric return result 416130d950cSDimitry Andric 417130d950cSDimitry Andric def __idiv__(self, other): 418130d950cSDimitry Andric result = self.__div__(other) 419130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 420130d950cSDimitry Andric return result 421130d950cSDimitry Andric 422130d950cSDimitry Andric def __itruediv__(self, other): 423130d950cSDimitry Andric result = self.__truediv__(other) 424130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 425130d950cSDimitry Andric return result 426130d950cSDimitry Andric 427130d950cSDimitry Andric def __ifloordiv__(self, other): 428130d950cSDimitry Andric result = self.__floordiv__(self, other) 429130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 430130d950cSDimitry Andric return result 431130d950cSDimitry Andric 432130d950cSDimitry Andric def __imod__(self, other): 433130d950cSDimitry Andric result = self.__and__(self, other) 434130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 435130d950cSDimitry Andric return result 436130d950cSDimitry Andric 437130d950cSDimitry Andric def __ipow__(self, other): 438130d950cSDimitry Andric result = self.__pow__(self, other) 439130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 440130d950cSDimitry Andric return result 441130d950cSDimitry Andric 442130d950cSDimitry Andric def __ipow__(self, other, modulo): 443130d950cSDimitry Andric result = self.__pow__(self, other, modulo) 444130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 445130d950cSDimitry Andric return result 446130d950cSDimitry Andric 447130d950cSDimitry Andric def __ilshift__(self, other): 448130d950cSDimitry Andric result = self.__lshift__(other) 449130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 450130d950cSDimitry Andric return result 451130d950cSDimitry Andric 452130d950cSDimitry Andric def __irshift__(self, other): 453130d950cSDimitry Andric result = self.__rshift__(other) 454130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 455130d950cSDimitry Andric return result 456130d950cSDimitry Andric 457130d950cSDimitry Andric def __iand__(self, other): 458130d950cSDimitry Andric result = self.__and__(self, other) 459130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 460130d950cSDimitry Andric return result 461130d950cSDimitry Andric 462130d950cSDimitry Andric def __ixor__(self, other): 463130d950cSDimitry Andric result = self.__xor__(self, other) 464130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 465130d950cSDimitry Andric return result 466130d950cSDimitry Andric 467130d950cSDimitry Andric def __ior__(self, other): 468130d950cSDimitry Andric result = self.__ior__(self, other) 469130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 470130d950cSDimitry Andric return result 471130d950cSDimitry Andric 472130d950cSDimitry Andric def __neg__(self): 473130d950cSDimitry Andric return -int(self) 474130d950cSDimitry Andric 475130d950cSDimitry Andric def __pos__(self): 476130d950cSDimitry Andric return +int(self) 477130d950cSDimitry Andric 478130d950cSDimitry Andric def __abs__(self): 479130d950cSDimitry Andric return abs(int(self)) 480130d950cSDimitry Andric 481130d950cSDimitry Andric def __invert__(self): 482130d950cSDimitry Andric return ~int(self) 483130d950cSDimitry Andric 484130d950cSDimitry Andric def __complex__(self): 485130d950cSDimitry Andric return complex (int(self)) 486130d950cSDimitry Andric 487130d950cSDimitry Andric def __int__(self): 488130d950cSDimitry Andric is_num,is_sign = is_numeric_type(self.sbvalue.GetType().GetCanonicalType().GetBasicType()) 489130d950cSDimitry Andric if is_num and not is_sign: return self.sbvalue.GetValueAsUnsigned() 490130d950cSDimitry Andric return self.sbvalue.GetValueAsSigned() 491130d950cSDimitry Andric 492130d950cSDimitry Andric def __long__(self): 493130d950cSDimitry Andric return self.__int__() 494130d950cSDimitry Andric 495130d950cSDimitry Andric def __float__(self): 496130d950cSDimitry Andric return float (self.sbvalue.GetValueAsSigned()) 497130d950cSDimitry Andric 498130d950cSDimitry Andric def __oct__(self): 499130d950cSDimitry Andric return '0%o' % self.sbvalue.GetValueAsUnsigned() 500130d950cSDimitry Andric 501130d950cSDimitry Andric def __hex__(self): 502130d950cSDimitry Andric return '0x%x' % self.sbvalue.GetValueAsUnsigned() 503130d950cSDimitry Andric 504130d950cSDimitry Andric def __len__(self): 505130d950cSDimitry Andric return self.sbvalue.GetNumChildren() 506130d950cSDimitry Andric 507130d950cSDimitry Andric def __eq__(self, other): 508130d950cSDimitry Andric if type(other) is int: 509130d950cSDimitry Andric return int(self) == other 510130d950cSDimitry Andric elif type(other) is str: 511130d950cSDimitry Andric return str(self) == other 512130d950cSDimitry Andric elif type(other) is value: 513130d950cSDimitry Andric self_err = SBError() 514130d950cSDimitry Andric other_err = SBError() 515130d950cSDimitry Andric self_val = self.sbvalue.GetValueAsUnsigned(self_err) 516130d950cSDimitry Andric if self_err.fail: 517130d950cSDimitry Andric raise ValueError("unable to extract value of self") 518130d950cSDimitry Andric other_val = other.sbvalue.GetValueAsUnsigned(other_err) 519130d950cSDimitry Andric if other_err.fail: 520130d950cSDimitry Andric raise ValueError("unable to extract value of other") 521130d950cSDimitry Andric return self_val == other_val 522130d950cSDimitry Andric raise TypeError("Unknown type %s, No equality operation defined." % str(type(other))) 523130d950cSDimitry Andric 524130d950cSDimitry Andric def __ne__(self, other): 525130d950cSDimitry Andric return not self.__eq__(other) 526130d950cSDimitry Andric%} 527130d950cSDimitry Andric 528130d950cSDimitry Andric%pythoncode %{ 529130d950cSDimitry Andric 530130d950cSDimitry Andricclass SBSyntheticValueProvider(object): 531130d950cSDimitry Andric def __init__(self,valobj): 532130d950cSDimitry Andric pass 533130d950cSDimitry Andric 534130d950cSDimitry Andric def num_children(self): 535130d950cSDimitry Andric return 0 536130d950cSDimitry Andric 537130d950cSDimitry Andric def get_child_index(self,name): 538130d950cSDimitry Andric return None 539130d950cSDimitry Andric 540130d950cSDimitry Andric def get_child_at_index(self,idx): 541130d950cSDimitry Andric return None 542130d950cSDimitry Andric 543130d950cSDimitry Andric def update(self): 544130d950cSDimitry Andric pass 545130d950cSDimitry Andric 546130d950cSDimitry Andric def has_children(self): 547130d950cSDimitry Andric return False 548130d950cSDimitry Andric 549130d950cSDimitry Andric 550130d950cSDimitry Andric%} 551130d950cSDimitry Andric 552130d950cSDimitry Andric%pythoncode %{ 553130d950cSDimitry Andric 554130d950cSDimitry Andric# given an lldb.SBBasicType it returns a tuple 555130d950cSDimitry Andric# (is_numeric, is_signed) 556130d950cSDimitry Andric# the value of is_signed is undefined if is_numeric == false 557130d950cSDimitry Andricdef is_numeric_type(basic_type): 558130d950cSDimitry Andric if basic_type == eBasicTypeInvalid: return (False,False) 559130d950cSDimitry Andric if basic_type == eBasicTypeVoid: return (False,False) 560130d950cSDimitry Andric if basic_type == eBasicTypeChar: return (True,False) 561130d950cSDimitry Andric if basic_type == eBasicTypeSignedChar: return (True,True) 562130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedChar: return (True,False) 563130d950cSDimitry Andric if basic_type == eBasicTypeWChar: return (True,False) 564130d950cSDimitry Andric if basic_type == eBasicTypeSignedWChar: return (True,True) 565130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedWChar: return (True,False) 566130d950cSDimitry Andric if basic_type == eBasicTypeChar16: return (True,False) 567130d950cSDimitry Andric if basic_type == eBasicTypeChar32: return (True,False) 568130d950cSDimitry Andric if basic_type == eBasicTypeShort: return (True,True) 569130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedShort: return (True,False) 570130d950cSDimitry Andric if basic_type == eBasicTypeInt: return (True,True) 571130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedInt: return (True,False) 572130d950cSDimitry Andric if basic_type == eBasicTypeLong: return (True,True) 573130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedLong: return (True,False) 574130d950cSDimitry Andric if basic_type == eBasicTypeLongLong: return (True,True) 575130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedLongLong: return (True,False) 576130d950cSDimitry Andric if basic_type == eBasicTypeInt128: return (True,True) 577130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedInt128: return (True,False) 578130d950cSDimitry Andric if basic_type == eBasicTypeBool: return (False,False) 579130d950cSDimitry Andric if basic_type == eBasicTypeHalf: return (True,True) 580130d950cSDimitry Andric if basic_type == eBasicTypeFloat: return (True,True) 581130d950cSDimitry Andric if basic_type == eBasicTypeDouble: return (True,True) 582130d950cSDimitry Andric if basic_type == eBasicTypeLongDouble: return (True,True) 583130d950cSDimitry Andric if basic_type == eBasicTypeFloatComplex: return (True,True) 584130d950cSDimitry Andric if basic_type == eBasicTypeDoubleComplex: return (True,True) 585130d950cSDimitry Andric if basic_type == eBasicTypeLongDoubleComplex: return (True,True) 586130d950cSDimitry Andric if basic_type == eBasicTypeObjCID: return (False,False) 587130d950cSDimitry Andric if basic_type == eBasicTypeObjCClass: return (False,False) 588130d950cSDimitry Andric if basic_type == eBasicTypeObjCSel: return (False,False) 589130d950cSDimitry Andric if basic_type == eBasicTypeNullPtr: return (False,False) 590130d950cSDimitry Andric #if basic_type == eBasicTypeOther: 591130d950cSDimitry Andric return (False,False) 592130d950cSDimitry Andric 593130d950cSDimitry Andric%} 594