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): 293e8d8bef9SDimitry 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 307*5f757f3fSDimitry Andric def __eq__(self, other): 308*5f757f3fSDimitry Andric return not self.__ne__(other) 309*5f757f3fSDimitry Andric 310*5f757f3fSDimitry Andric def __len__(self): 311*5f757f3fSDimitry Andric return self.length 312*5f757f3fSDimitry Andric 313130d950cSDimitry Andric def __init__(self,value): 314130d950cSDimitry Andric self.index = 0 315*5f757f3fSDimitry Andric self.length = 0 316130d950cSDimitry Andric self.sbvalue = value 317130d950cSDimitry Andric if type(self.sbvalue) is value: 318130d950cSDimitry Andric self.sbvalue = self.sbvalue.sbvalue 319130d950cSDimitry Andric self.length = self.sbvalue.GetNumChildren() 320130d950cSDimitry Andric 321130d950cSDimitry Andricclass value(object): 322e8d8bef9SDimitry Andric '''Wraps :py:class:`SBValue` objects so the resulting object can be used as a variable would be in code. 323e8d8bef9SDimitry Andric 324e8d8bef9SDimitry Andric So if you have a Point structure variable in your code in the current frame named "pt", 325e8d8bef9SDimitry Andric you can initialize an instance of this class with it: :: 326130d950cSDimitry Andric 327130d950cSDimitry Andric pt = lldb.value(lldb.frame.FindVariable("pt")) 328130d950cSDimitry Andric print pt 329130d950cSDimitry Andric print pt.x 330130d950cSDimitry Andric print pt.y 331130d950cSDimitry Andric 332130d950cSDimitry Andric pt = lldb.value(lldb.frame.FindVariable("rectangle_array")) 333130d950cSDimitry Andric print rectangle_array[12] 334130d950cSDimitry Andric print rectangle_array[5].origin.x''' 335130d950cSDimitry Andric def __init__(self, sbvalue): 336130d950cSDimitry Andric self.sbvalue = sbvalue 337130d950cSDimitry Andric 338130d950cSDimitry Andric def __nonzero__(self): 339130d950cSDimitry Andric return self.sbvalue.__nonzero__() 340130d950cSDimitry Andric 341130d950cSDimitry Andric def __bool__(self): 342130d950cSDimitry Andric return self.sbvalue.__bool__() 343130d950cSDimitry Andric 344130d950cSDimitry Andric def __str__(self): 345130d950cSDimitry Andric return self.sbvalue.__str__() 346130d950cSDimitry Andric 347130d950cSDimitry Andric def __getitem__(self, key): 348130d950cSDimitry Andric # Allow array access if this value has children... 349130d950cSDimitry Andric if type(key) is value: 350130d950cSDimitry Andric key = int(key) 351130d950cSDimitry Andric if type(key) is int: 352130d950cSDimitry Andric child_sbvalue = (self.sbvalue.GetValueForExpressionPath("[%i]" % key)) 353130d950cSDimitry Andric if child_sbvalue and child_sbvalue.IsValid(): 354130d950cSDimitry Andric return value(child_sbvalue) 355130d950cSDimitry Andric raise IndexError("Index '%d' is out of range" % key) 356130d950cSDimitry Andric raise TypeError("No array item of type %s" % str(type(key))) 357130d950cSDimitry Andric 358130d950cSDimitry Andric def __iter__(self): 359130d950cSDimitry Andric return value_iter(self.sbvalue) 360130d950cSDimitry Andric 361130d950cSDimitry Andric def __getattr__(self, name): 362130d950cSDimitry Andric child_sbvalue = self.sbvalue.GetChildMemberWithName (name) 363130d950cSDimitry Andric if child_sbvalue and child_sbvalue.IsValid(): 364130d950cSDimitry Andric return value(child_sbvalue) 365130d950cSDimitry Andric raise AttributeError("Attribute '%s' is not defined" % name) 366130d950cSDimitry Andric 367130d950cSDimitry Andric def __add__(self, other): 368130d950cSDimitry Andric return int(self) + int(other) 369130d950cSDimitry Andric 370130d950cSDimitry Andric def __sub__(self, other): 371130d950cSDimitry Andric return int(self) - int(other) 372130d950cSDimitry Andric 373130d950cSDimitry Andric def __mul__(self, other): 374130d950cSDimitry Andric return int(self) * int(other) 375130d950cSDimitry Andric 376130d950cSDimitry Andric def __floordiv__(self, other): 377130d950cSDimitry Andric return int(self) // int(other) 378130d950cSDimitry Andric 379130d950cSDimitry Andric def __mod__(self, other): 380130d950cSDimitry Andric return int(self) % int(other) 381130d950cSDimitry Andric 382130d950cSDimitry Andric def __divmod__(self, other): 383130d950cSDimitry Andric return int(self) % int(other) 384130d950cSDimitry Andric 385130d950cSDimitry Andric def __pow__(self, other): 386130d950cSDimitry Andric return int(self) ** int(other) 387130d950cSDimitry Andric 388130d950cSDimitry Andric def __lshift__(self, other): 389130d950cSDimitry Andric return int(self) << int(other) 390130d950cSDimitry Andric 391130d950cSDimitry Andric def __rshift__(self, other): 392130d950cSDimitry Andric return int(self) >> int(other) 393130d950cSDimitry Andric 394130d950cSDimitry Andric def __and__(self, other): 395130d950cSDimitry Andric return int(self) & int(other) 396130d950cSDimitry Andric 397130d950cSDimitry Andric def __xor__(self, other): 398130d950cSDimitry Andric return int(self) ^ int(other) 399130d950cSDimitry Andric 400130d950cSDimitry Andric def __or__(self, other): 401130d950cSDimitry Andric return int(self) | int(other) 402130d950cSDimitry Andric 403130d950cSDimitry Andric def __div__(self, other): 404130d950cSDimitry Andric return int(self) / int(other) 405130d950cSDimitry Andric 406130d950cSDimitry Andric def __truediv__(self, other): 407130d950cSDimitry Andric return int(self) / int(other) 408130d950cSDimitry Andric 409130d950cSDimitry Andric def __iadd__(self, other): 410130d950cSDimitry Andric result = self.__add__(other) 411130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 412130d950cSDimitry Andric return result 413130d950cSDimitry Andric 414130d950cSDimitry Andric def __isub__(self, other): 415130d950cSDimitry Andric result = self.__sub__(other) 416130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 417130d950cSDimitry Andric return result 418130d950cSDimitry Andric 419130d950cSDimitry Andric def __imul__(self, other): 420130d950cSDimitry Andric result = self.__mul__(other) 421130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 422130d950cSDimitry Andric return result 423130d950cSDimitry Andric 424130d950cSDimitry Andric def __idiv__(self, other): 425130d950cSDimitry Andric result = self.__div__(other) 426130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 427130d950cSDimitry Andric return result 428130d950cSDimitry Andric 429130d950cSDimitry Andric def __itruediv__(self, other): 430130d950cSDimitry Andric result = self.__truediv__(other) 431130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 432130d950cSDimitry Andric return result 433130d950cSDimitry Andric 434130d950cSDimitry Andric def __ifloordiv__(self, other): 435130d950cSDimitry Andric result = self.__floordiv__(self, other) 436130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 437130d950cSDimitry Andric return result 438130d950cSDimitry Andric 439130d950cSDimitry Andric def __imod__(self, other): 440130d950cSDimitry Andric result = self.__and__(self, other) 441130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 442130d950cSDimitry Andric return result 443130d950cSDimitry Andric 444130d950cSDimitry Andric def __ipow__(self, other): 445130d950cSDimitry Andric result = self.__pow__(self, other) 446130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 447130d950cSDimitry Andric return result 448130d950cSDimitry Andric 449130d950cSDimitry Andric def __ipow__(self, other, modulo): 450130d950cSDimitry Andric result = self.__pow__(self, other, modulo) 451130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 452130d950cSDimitry Andric return result 453130d950cSDimitry Andric 454130d950cSDimitry Andric def __ilshift__(self, other): 455130d950cSDimitry Andric result = self.__lshift__(other) 456130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 457130d950cSDimitry Andric return result 458130d950cSDimitry Andric 459130d950cSDimitry Andric def __irshift__(self, other): 460130d950cSDimitry Andric result = self.__rshift__(other) 461130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 462130d950cSDimitry Andric return result 463130d950cSDimitry Andric 464130d950cSDimitry Andric def __iand__(self, other): 465130d950cSDimitry Andric result = self.__and__(self, other) 466130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 467130d950cSDimitry Andric return result 468130d950cSDimitry Andric 469130d950cSDimitry Andric def __ixor__(self, other): 470130d950cSDimitry Andric result = self.__xor__(self, other) 471130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 472130d950cSDimitry Andric return result 473130d950cSDimitry Andric 474130d950cSDimitry Andric def __ior__(self, other): 475130d950cSDimitry Andric result = self.__ior__(self, other) 476130d950cSDimitry Andric self.sbvalue.SetValueFromCString (str(result)) 477130d950cSDimitry Andric return result 478130d950cSDimitry Andric 479130d950cSDimitry Andric def __neg__(self): 480130d950cSDimitry Andric return -int(self) 481130d950cSDimitry Andric 482130d950cSDimitry Andric def __pos__(self): 483130d950cSDimitry Andric return +int(self) 484130d950cSDimitry Andric 485130d950cSDimitry Andric def __abs__(self): 486130d950cSDimitry Andric return abs(int(self)) 487130d950cSDimitry Andric 488130d950cSDimitry Andric def __invert__(self): 489130d950cSDimitry Andric return ~int(self) 490130d950cSDimitry Andric 491130d950cSDimitry Andric def __complex__(self): 492130d950cSDimitry Andric return complex (int(self)) 493130d950cSDimitry Andric 494130d950cSDimitry Andric def __int__(self): 495130d950cSDimitry Andric is_num,is_sign = is_numeric_type(self.sbvalue.GetType().GetCanonicalType().GetBasicType()) 496130d950cSDimitry Andric if is_num and not is_sign: return self.sbvalue.GetValueAsUnsigned() 497130d950cSDimitry Andric return self.sbvalue.GetValueAsSigned() 498130d950cSDimitry Andric 499130d950cSDimitry Andric def __long__(self): 500130d950cSDimitry Andric return self.__int__() 501130d950cSDimitry Andric 502130d950cSDimitry Andric def __float__(self): 503130d950cSDimitry Andric return float (self.sbvalue.GetValueAsSigned()) 504130d950cSDimitry Andric 505130d950cSDimitry Andric def __oct__(self): 506130d950cSDimitry Andric return '0%o' % self.sbvalue.GetValueAsUnsigned() 507130d950cSDimitry Andric 508130d950cSDimitry Andric def __hex__(self): 509130d950cSDimitry Andric return '0x%x' % self.sbvalue.GetValueAsUnsigned() 510130d950cSDimitry Andric 511130d950cSDimitry Andric def __len__(self): 512130d950cSDimitry Andric return self.sbvalue.GetNumChildren() 513130d950cSDimitry Andric 514130d950cSDimitry Andric def __eq__(self, other): 515130d950cSDimitry Andric if type(other) is int: 516130d950cSDimitry Andric return int(self) == other 517130d950cSDimitry Andric elif type(other) is str: 518130d950cSDimitry Andric return str(self) == other 519130d950cSDimitry Andric elif type(other) is value: 520130d950cSDimitry Andric self_err = SBError() 521130d950cSDimitry Andric other_err = SBError() 522130d950cSDimitry Andric self_val = self.sbvalue.GetValueAsUnsigned(self_err) 523130d950cSDimitry Andric if self_err.fail: 524130d950cSDimitry Andric raise ValueError("unable to extract value of self") 525130d950cSDimitry Andric other_val = other.sbvalue.GetValueAsUnsigned(other_err) 526130d950cSDimitry Andric if other_err.fail: 527130d950cSDimitry Andric raise ValueError("unable to extract value of other") 528130d950cSDimitry Andric return self_val == other_val 529130d950cSDimitry Andric raise TypeError("Unknown type %s, No equality operation defined." % str(type(other))) 530130d950cSDimitry Andric 531130d950cSDimitry Andric def __ne__(self, other): 532130d950cSDimitry Andric return not self.__eq__(other) 533130d950cSDimitry Andric%} 534130d950cSDimitry Andric 535130d950cSDimitry Andric%pythoncode %{ 536130d950cSDimitry Andric 537130d950cSDimitry Andricclass SBSyntheticValueProvider(object): 538130d950cSDimitry Andric def __init__(self,valobj): 539130d950cSDimitry Andric pass 540130d950cSDimitry Andric 541130d950cSDimitry Andric def num_children(self): 542130d950cSDimitry Andric return 0 543130d950cSDimitry Andric 544130d950cSDimitry Andric def get_child_index(self,name): 545130d950cSDimitry Andric return None 546130d950cSDimitry Andric 547130d950cSDimitry Andric def get_child_at_index(self,idx): 548130d950cSDimitry Andric return None 549130d950cSDimitry Andric 550130d950cSDimitry Andric def update(self): 551130d950cSDimitry Andric pass 552130d950cSDimitry Andric 553130d950cSDimitry Andric def has_children(self): 554130d950cSDimitry Andric return False 555130d950cSDimitry Andric 556*5f757f3fSDimitry Andric def __len__(self): 557*5f757f3fSDimitry Andric return self.num_children() 558*5f757f3fSDimitry Andric 559*5f757f3fSDimitry Andric def __iter__(self): 560*5f757f3fSDimitry Andric '''Iterate over all children in a lldb.SBSyntheticValueProvider object.''' 561*5f757f3fSDimitry Andric return lldb_iter(self, 'num_children', 'get_child_at_index') 562130d950cSDimitry Andric 563130d950cSDimitry Andric%} 564130d950cSDimitry Andric 565130d950cSDimitry Andric%pythoncode %{ 566130d950cSDimitry Andric 567130d950cSDimitry Andric# given an lldb.SBBasicType it returns a tuple 568130d950cSDimitry Andric# (is_numeric, is_signed) 569130d950cSDimitry Andric# the value of is_signed is undefined if is_numeric == false 570130d950cSDimitry Andricdef is_numeric_type(basic_type): 571130d950cSDimitry Andric if basic_type == eBasicTypeInvalid: return (False,False) 572130d950cSDimitry Andric if basic_type == eBasicTypeVoid: return (False,False) 573130d950cSDimitry Andric if basic_type == eBasicTypeChar: return (True,False) 574130d950cSDimitry Andric if basic_type == eBasicTypeSignedChar: return (True,True) 575130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedChar: return (True,False) 576130d950cSDimitry Andric if basic_type == eBasicTypeWChar: return (True,False) 577130d950cSDimitry Andric if basic_type == eBasicTypeSignedWChar: return (True,True) 578130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedWChar: return (True,False) 579130d950cSDimitry Andric if basic_type == eBasicTypeChar16: return (True,False) 580130d950cSDimitry Andric if basic_type == eBasicTypeChar32: return (True,False) 58181ad6265SDimitry Andric if basic_type == eBasicTypeChar8: return (True,False) 582130d950cSDimitry Andric if basic_type == eBasicTypeShort: return (True,True) 583130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedShort: return (True,False) 584130d950cSDimitry Andric if basic_type == eBasicTypeInt: return (True,True) 585130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedInt: return (True,False) 586130d950cSDimitry Andric if basic_type == eBasicTypeLong: return (True,True) 587130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedLong: return (True,False) 588130d950cSDimitry Andric if basic_type == eBasicTypeLongLong: return (True,True) 589130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedLongLong: return (True,False) 590130d950cSDimitry Andric if basic_type == eBasicTypeInt128: return (True,True) 591130d950cSDimitry Andric if basic_type == eBasicTypeUnsignedInt128: return (True,False) 592130d950cSDimitry Andric if basic_type == eBasicTypeBool: return (False,False) 593130d950cSDimitry Andric if basic_type == eBasicTypeHalf: return (True,True) 594130d950cSDimitry Andric if basic_type == eBasicTypeFloat: return (True,True) 595130d950cSDimitry Andric if basic_type == eBasicTypeDouble: return (True,True) 596130d950cSDimitry Andric if basic_type == eBasicTypeLongDouble: return (True,True) 597130d950cSDimitry Andric if basic_type == eBasicTypeFloatComplex: return (True,True) 598130d950cSDimitry Andric if basic_type == eBasicTypeDoubleComplex: return (True,True) 599130d950cSDimitry Andric if basic_type == eBasicTypeLongDoubleComplex: return (True,True) 600130d950cSDimitry Andric if basic_type == eBasicTypeObjCID: return (False,False) 601130d950cSDimitry Andric if basic_type == eBasicTypeObjCClass: return (False,False) 602130d950cSDimitry Andric if basic_type == eBasicTypeObjCSel: return (False,False) 603130d950cSDimitry Andric if basic_type == eBasicTypeNullPtr: return (False,False) 604130d950cSDimitry Andric #if basic_type == eBasicTypeOther: 605130d950cSDimitry Andric return (False,False) 606130d950cSDimitry Andric 607130d950cSDimitry Andric%} 608