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