16498aff2SJonas Devlieghere%extend lldb::SBBreakpoint { 26498aff2SJonas Devlieghere %pythoncode %{ 36498aff2SJonas Devlieghere def __eq__(self, rhs): 46498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 56498aff2SJonas Devlieghere return False 66498aff2SJonas Devlieghere 76498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 86498aff2SJonas Devlieghere 96498aff2SJonas Devlieghere def __ne__(self, rhs): 106498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 116498aff2SJonas Devlieghere return True 126498aff2SJonas Devlieghere 136498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 146498aff2SJonas Devlieghere %} 156498aff2SJonas Devlieghere} 166498aff2SJonas Devlieghere 176498aff2SJonas Devlieghere%extend lldb::SBBroadcaster { 186498aff2SJonas Devlieghere %pythoncode %{ 196498aff2SJonas Devlieghere def __eq__(self, rhs): 206498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 216498aff2SJonas Devlieghere return False 226498aff2SJonas Devlieghere 236498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 246498aff2SJonas Devlieghere 256498aff2SJonas Devlieghere def __ne__(self, rhs): 266498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 276498aff2SJonas Devlieghere return True 286498aff2SJonas Devlieghere 296498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 306498aff2SJonas Devlieghere %} 316498aff2SJonas Devlieghere} 326498aff2SJonas Devlieghere 336498aff2SJonas Devlieghere%extend lldb::SBCommandReturnObject { 346498aff2SJonas Devlieghere /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage 356498aff2SJonas Devlieghere they are meant to make an SBCommandReturnObject into a file-like object so that instructions of the sort 366498aff2SJonas Devlieghere print >>sb_command_return_object, "something" 376498aff2SJonas Devlieghere will work correctly */ 386498aff2SJonas Devlieghere 396498aff2SJonas Devlieghere void lldb::SBCommandReturnObject::write (const char* str) 406498aff2SJonas Devlieghere { 416498aff2SJonas Devlieghere if (str) 426498aff2SJonas Devlieghere $self->Printf("%s",str); 436498aff2SJonas Devlieghere } 446498aff2SJonas Devlieghere void lldb::SBCommandReturnObject::flush () 456498aff2SJonas Devlieghere {} 466498aff2SJonas Devlieghere} 476498aff2SJonas Devlieghere 486498aff2SJonas Devlieghere%extend lldb::SBCompileUnit { 496498aff2SJonas Devlieghere %pythoncode %{ 506498aff2SJonas Devlieghere def __eq__(self, rhs): 516498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 526498aff2SJonas Devlieghere return False 536498aff2SJonas Devlieghere 546498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 556498aff2SJonas Devlieghere 566498aff2SJonas Devlieghere def __ne__(self, rhs): 576498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 586498aff2SJonas Devlieghere return True 596498aff2SJonas Devlieghere 606498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 616498aff2SJonas Devlieghere %} 626498aff2SJonas Devlieghere} 636498aff2SJonas Devlieghere 646498aff2SJonas Devlieghere%extend lldb::SBDeclaration { 656498aff2SJonas Devlieghere %pythoncode %{ 666498aff2SJonas Devlieghere def __eq__(self, rhs): 676498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 686498aff2SJonas Devlieghere return False 696498aff2SJonas Devlieghere 706498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 716498aff2SJonas Devlieghere 726498aff2SJonas Devlieghere def __ne__(self, rhs): 736498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 746498aff2SJonas Devlieghere return True 756498aff2SJonas Devlieghere 766498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 776498aff2SJonas Devlieghere %} 786498aff2SJonas Devlieghere} 796498aff2SJonas Devlieghere 806498aff2SJonas Devlieghere%extend lldb::SBFunction { 816498aff2SJonas Devlieghere %pythoncode %{ 826498aff2SJonas Devlieghere def __eq__(self, rhs): 836498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 846498aff2SJonas Devlieghere return False 856498aff2SJonas Devlieghere 866498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 876498aff2SJonas Devlieghere 886498aff2SJonas Devlieghere def __ne__(self, rhs): 896498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 906498aff2SJonas Devlieghere return True 916498aff2SJonas Devlieghere 926498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 936498aff2SJonas Devlieghere %} 946498aff2SJonas Devlieghere} 956498aff2SJonas Devlieghere 966498aff2SJonas Devlieghere%extend lldb::SBLineEntry { 976498aff2SJonas Devlieghere %pythoncode %{ 986498aff2SJonas Devlieghere def __eq__(self, rhs): 996498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1006498aff2SJonas Devlieghere return False 1016498aff2SJonas Devlieghere 1026498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 1036498aff2SJonas Devlieghere 1046498aff2SJonas Devlieghere def __ne__(self, rhs): 1056498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1066498aff2SJonas Devlieghere return True 1076498aff2SJonas Devlieghere 1086498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 1096498aff2SJonas Devlieghere %} 1106498aff2SJonas Devlieghere} 1116498aff2SJonas Devlieghere 1126498aff2SJonas Devlieghere%extend lldb::SBModule { 1136498aff2SJonas Devlieghere %pythoncode %{ 1146498aff2SJonas Devlieghere def __eq__(self, rhs): 1156498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1166498aff2SJonas Devlieghere return False 1176498aff2SJonas Devlieghere 1186498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 1196498aff2SJonas Devlieghere 1206498aff2SJonas Devlieghere def __ne__(self, rhs): 1216498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1226498aff2SJonas Devlieghere return True 1236498aff2SJonas Devlieghere 1246498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 1256498aff2SJonas Devlieghere %} 1266498aff2SJonas Devlieghere} 1276498aff2SJonas Devlieghere 1286498aff2SJonas Devlieghere%extend lldb::SBSection { 1296498aff2SJonas Devlieghere %pythoncode %{ 1306498aff2SJonas Devlieghere def __eq__(self, rhs): 1316498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1326498aff2SJonas Devlieghere return False 1336498aff2SJonas Devlieghere 1346498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 1356498aff2SJonas Devlieghere 1366498aff2SJonas Devlieghere def __ne__(self, rhs): 1376498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1386498aff2SJonas Devlieghere return True 1396498aff2SJonas Devlieghere 1406498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 1416498aff2SJonas Devlieghere %} 1426498aff2SJonas Devlieghere} 1436498aff2SJonas Devlieghere%extend lldb::SBStream { 1446498aff2SJonas Devlieghere /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage 1456498aff2SJonas Devlieghere they are meant to make an SBStream into a file-like object so that instructions of the sort 1466498aff2SJonas Devlieghere print >>sb_stream, "something" 1476498aff2SJonas Devlieghere will work correctly */ 1486498aff2SJonas Devlieghere 1496498aff2SJonas Devlieghere void lldb::SBStream::write (const char* str) 1506498aff2SJonas Devlieghere { 1516498aff2SJonas Devlieghere if (str) 1526498aff2SJonas Devlieghere $self->Printf("%s",str); 1536498aff2SJonas Devlieghere } 1546498aff2SJonas Devlieghere void lldb::SBStream::flush () 1556498aff2SJonas Devlieghere {} 1566498aff2SJonas Devlieghere} 1576498aff2SJonas Devlieghere%extend lldb::SBSymbol { 1586498aff2SJonas Devlieghere %pythoncode %{ 1596498aff2SJonas Devlieghere def __eq__(self, rhs): 1606498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1616498aff2SJonas Devlieghere return False 1626498aff2SJonas Devlieghere 1636498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 1646498aff2SJonas Devlieghere 1656498aff2SJonas Devlieghere def __ne__(self, rhs): 1666498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1676498aff2SJonas Devlieghere return True 1686498aff2SJonas Devlieghere 1696498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 1706498aff2SJonas Devlieghere %} 1716498aff2SJonas Devlieghere} 1726498aff2SJonas Devlieghere 1736498aff2SJonas Devlieghere%extend lldb::SBTarget { 1746498aff2SJonas Devlieghere %pythoncode %{ 1756498aff2SJonas Devlieghere def __eq__(self, rhs): 1766498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1776498aff2SJonas Devlieghere return False 1786498aff2SJonas Devlieghere 1796498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 1806498aff2SJonas Devlieghere 1816498aff2SJonas Devlieghere def __ne__(self, rhs): 1826498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1836498aff2SJonas Devlieghere return True 1846498aff2SJonas Devlieghere 1856498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 1866498aff2SJonas Devlieghere %} 1876498aff2SJonas Devlieghere} 1886498aff2SJonas Devlieghere 1896498aff2SJonas Devlieghere%extend lldb::SBTypeFilter { 1906498aff2SJonas Devlieghere %pythoncode %{ 1916498aff2SJonas Devlieghere def __eq__(self, rhs): 1926498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1936498aff2SJonas Devlieghere return False 1946498aff2SJonas Devlieghere 1956498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 1966498aff2SJonas Devlieghere 1976498aff2SJonas Devlieghere def __ne__(self, rhs): 1986498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 1996498aff2SJonas Devlieghere return True 2006498aff2SJonas Devlieghere 2016498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 2026498aff2SJonas Devlieghere %} 2036498aff2SJonas Devlieghere} 2046498aff2SJonas Devlieghere 2056498aff2SJonas Devlieghere%extend lldb::SBTypeNameSpecifier { 2066498aff2SJonas Devlieghere %pythoncode %{ 2076498aff2SJonas Devlieghere def __eq__(self, rhs): 2086498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 2096498aff2SJonas Devlieghere return False 2106498aff2SJonas Devlieghere 2116498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 2126498aff2SJonas Devlieghere 2136498aff2SJonas Devlieghere def __ne__(self, rhs): 2146498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 2156498aff2SJonas Devlieghere return True 2166498aff2SJonas Devlieghere 2176498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 2186498aff2SJonas Devlieghere %} 2196498aff2SJonas Devlieghere} 2206498aff2SJonas Devlieghere 2216498aff2SJonas Devlieghere%extend lldb::SBTypeSummary { 2226498aff2SJonas Devlieghere %pythoncode %{ 2236498aff2SJonas Devlieghere def __eq__(self, rhs): 2246498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 2256498aff2SJonas Devlieghere return False 2266498aff2SJonas Devlieghere 2276498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 2286498aff2SJonas Devlieghere 2296498aff2SJonas Devlieghere def __ne__(self, rhs): 2306498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 2316498aff2SJonas Devlieghere return True 2326498aff2SJonas Devlieghere 2336498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 2346498aff2SJonas Devlieghere %} 2356498aff2SJonas Devlieghere} 2366498aff2SJonas Devlieghere 2376498aff2SJonas Devlieghere%extend lldb::SBTypeSynthetic { 2386498aff2SJonas Devlieghere %pythoncode %{ 2396498aff2SJonas Devlieghere def __eq__(self, rhs): 2406498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 2416498aff2SJonas Devlieghere return False 2426498aff2SJonas Devlieghere 2436498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 2446498aff2SJonas Devlieghere 2456498aff2SJonas Devlieghere def __ne__(self, rhs): 2466498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 2476498aff2SJonas Devlieghere return True 2486498aff2SJonas Devlieghere 2496498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 2506498aff2SJonas Devlieghere %} 2516498aff2SJonas Devlieghere} 2526498aff2SJonas Devlieghere 2536498aff2SJonas Devlieghere%extend lldb::SBThread { 2546498aff2SJonas Devlieghere %pythoncode %{ 2556498aff2SJonas Devlieghere def __eq__(self, rhs): 2566498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 2576498aff2SJonas Devlieghere return False 2586498aff2SJonas Devlieghere 2596498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs) 2606498aff2SJonas Devlieghere 2616498aff2SJonas Devlieghere def __ne__(self, rhs): 2626498aff2SJonas Devlieghere if not isinstance(rhs, type(self)): 2636498aff2SJonas Devlieghere return True 2646498aff2SJonas Devlieghere 2656498aff2SJonas Devlieghere return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs) 2666498aff2SJonas Devlieghere %} 2676498aff2SJonas Devlieghere} 2686498aff2SJonas Devlieghere 2696498aff2SJonas Devlieghere%pythoncode %{ 2706498aff2SJonas Devlieghere 2716498aff2SJonas Devliegheredef command(command_name=None, doc=None): 2726498aff2SJonas Devlieghere import lldb 2736498aff2SJonas Devlieghere """A decorator function that registers an LLDB command line 2746498aff2SJonas Devlieghere command that is bound to the function it is attached to.""" 2756498aff2SJonas Devlieghere def callable(function): 2766498aff2SJonas Devlieghere """Registers an lldb command for the decorated function.""" 2776498aff2SJonas Devlieghere command = "command script add -f %s.%s %s" % (function.__module__, function.__name__, command_name or function.__name__) 2786498aff2SJonas Devlieghere lldb.debugger.HandleCommand(command) 2796498aff2SJonas Devlieghere if doc: 2806498aff2SJonas Devlieghere function.__doc__ = doc 2816498aff2SJonas Devlieghere return function 2826498aff2SJonas Devlieghere 2836498aff2SJonas Devlieghere return callable 2846498aff2SJonas Devlieghere 2856498aff2SJonas Devlieghereclass declaration(object): 2866498aff2SJonas Devlieghere '''A class that represents a source declaration location with file, line and column.''' 2876498aff2SJonas Devlieghere def __init__(self, file, line, col): 2886498aff2SJonas Devlieghere self.file = file 2896498aff2SJonas Devlieghere self.line = line 2906498aff2SJonas Devlieghere self.col = col 2916498aff2SJonas Devlieghere 2926498aff2SJonas Devlieghereclass value_iter(object): 293acdc7456SRaphael Isemann '''Allows iterating over the children of an :py:class:`SBValue`.''' 2946498aff2SJonas Devlieghere def __iter__(self): 2956498aff2SJonas Devlieghere return self 2966498aff2SJonas Devlieghere 2976498aff2SJonas Devlieghere def __next__(self): 2986498aff2SJonas Devlieghere if self.index >= self.length: 2996498aff2SJonas Devlieghere raise StopIteration() 3006498aff2SJonas Devlieghere child_sbvalue = self.sbvalue.GetChildAtIndex(self.index) 3016498aff2SJonas Devlieghere self.index += 1 3026498aff2SJonas Devlieghere return value(child_sbvalue) 3036498aff2SJonas Devlieghere 3046498aff2SJonas Devlieghere def next(self): 3056498aff2SJonas Devlieghere return self.__next__() 3066498aff2SJonas Devlieghere 3076498aff2SJonas Devlieghere def __init__(self,value): 3086498aff2SJonas Devlieghere self.index = 0 3096498aff2SJonas Devlieghere self.sbvalue = value 3106498aff2SJonas Devlieghere if type(self.sbvalue) is value: 3116498aff2SJonas Devlieghere self.sbvalue = self.sbvalue.sbvalue 3126498aff2SJonas Devlieghere self.length = self.sbvalue.GetNumChildren() 3136498aff2SJonas Devlieghere 3146498aff2SJonas Devlieghereclass value(object): 315acdc7456SRaphael Isemann '''Wraps :py:class:`SBValue` objects so the resulting object can be used as a variable would be in code. 316acdc7456SRaphael Isemann 317acdc7456SRaphael Isemann So if you have a Point structure variable in your code in the current frame named "pt", 318acdc7456SRaphael Isemann you can initialize an instance of this class with it: :: 3196498aff2SJonas Devlieghere 3206498aff2SJonas Devlieghere pt = lldb.value(lldb.frame.FindVariable("pt")) 3216498aff2SJonas Devlieghere print pt 3226498aff2SJonas Devlieghere print pt.x 3236498aff2SJonas Devlieghere print pt.y 3246498aff2SJonas Devlieghere 3256498aff2SJonas Devlieghere pt = lldb.value(lldb.frame.FindVariable("rectangle_array")) 3266498aff2SJonas Devlieghere print rectangle_array[12] 3276498aff2SJonas Devlieghere print rectangle_array[5].origin.x''' 3286498aff2SJonas Devlieghere def __init__(self, sbvalue): 3296498aff2SJonas Devlieghere self.sbvalue = sbvalue 3306498aff2SJonas Devlieghere 3316498aff2SJonas Devlieghere def __nonzero__(self): 3326498aff2SJonas Devlieghere return self.sbvalue.__nonzero__() 3336498aff2SJonas Devlieghere 3346498aff2SJonas Devlieghere def __bool__(self): 3356498aff2SJonas Devlieghere return self.sbvalue.__bool__() 3366498aff2SJonas Devlieghere 3376498aff2SJonas Devlieghere def __str__(self): 3386498aff2SJonas Devlieghere return self.sbvalue.__str__() 3396498aff2SJonas Devlieghere 3406498aff2SJonas Devlieghere def __getitem__(self, key): 3416498aff2SJonas Devlieghere # Allow array access if this value has children... 3426498aff2SJonas Devlieghere if type(key) is value: 3436498aff2SJonas Devlieghere key = int(key) 3446498aff2SJonas Devlieghere if type(key) is int: 3456498aff2SJonas Devlieghere child_sbvalue = (self.sbvalue.GetValueForExpressionPath("[%i]" % key)) 3466498aff2SJonas Devlieghere if child_sbvalue and child_sbvalue.IsValid(): 3476498aff2SJonas Devlieghere return value(child_sbvalue) 3486498aff2SJonas Devlieghere raise IndexError("Index '%d' is out of range" % key) 3496498aff2SJonas Devlieghere raise TypeError("No array item of type %s" % str(type(key))) 3506498aff2SJonas Devlieghere 3516498aff2SJonas Devlieghere def __iter__(self): 3526498aff2SJonas Devlieghere return value_iter(self.sbvalue) 3536498aff2SJonas Devlieghere 3546498aff2SJonas Devlieghere def __getattr__(self, name): 3556498aff2SJonas Devlieghere child_sbvalue = self.sbvalue.GetChildMemberWithName (name) 3566498aff2SJonas Devlieghere if child_sbvalue and child_sbvalue.IsValid(): 3576498aff2SJonas Devlieghere return value(child_sbvalue) 3586498aff2SJonas Devlieghere raise AttributeError("Attribute '%s' is not defined" % name) 3596498aff2SJonas Devlieghere 3606498aff2SJonas Devlieghere def __add__(self, other): 3616498aff2SJonas Devlieghere return int(self) + int(other) 3626498aff2SJonas Devlieghere 3636498aff2SJonas Devlieghere def __sub__(self, other): 3646498aff2SJonas Devlieghere return int(self) - int(other) 3656498aff2SJonas Devlieghere 3666498aff2SJonas Devlieghere def __mul__(self, other): 3676498aff2SJonas Devlieghere return int(self) * int(other) 3686498aff2SJonas Devlieghere 3696498aff2SJonas Devlieghere def __floordiv__(self, other): 3706498aff2SJonas Devlieghere return int(self) // int(other) 3716498aff2SJonas Devlieghere 3726498aff2SJonas Devlieghere def __mod__(self, other): 3736498aff2SJonas Devlieghere return int(self) % int(other) 3746498aff2SJonas Devlieghere 3756498aff2SJonas Devlieghere def __divmod__(self, other): 3766498aff2SJonas Devlieghere return int(self) % int(other) 3776498aff2SJonas Devlieghere 3786498aff2SJonas Devlieghere def __pow__(self, other): 3796498aff2SJonas Devlieghere return int(self) ** int(other) 3806498aff2SJonas Devlieghere 3816498aff2SJonas Devlieghere def __lshift__(self, other): 3826498aff2SJonas Devlieghere return int(self) << int(other) 3836498aff2SJonas Devlieghere 3846498aff2SJonas Devlieghere def __rshift__(self, other): 3856498aff2SJonas Devlieghere return int(self) >> int(other) 3866498aff2SJonas Devlieghere 3876498aff2SJonas Devlieghere def __and__(self, other): 3886498aff2SJonas Devlieghere return int(self) & int(other) 3896498aff2SJonas Devlieghere 3906498aff2SJonas Devlieghere def __xor__(self, other): 3916498aff2SJonas Devlieghere return int(self) ^ int(other) 3926498aff2SJonas Devlieghere 3936498aff2SJonas Devlieghere def __or__(self, other): 3946498aff2SJonas Devlieghere return int(self) | int(other) 3956498aff2SJonas Devlieghere 3966498aff2SJonas Devlieghere def __div__(self, other): 3976498aff2SJonas Devlieghere return int(self) / int(other) 3986498aff2SJonas Devlieghere 3996498aff2SJonas Devlieghere def __truediv__(self, other): 4006498aff2SJonas Devlieghere return int(self) / int(other) 4016498aff2SJonas Devlieghere 4026498aff2SJonas Devlieghere def __iadd__(self, other): 4036498aff2SJonas Devlieghere result = self.__add__(other) 4046498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4056498aff2SJonas Devlieghere return result 4066498aff2SJonas Devlieghere 4076498aff2SJonas Devlieghere def __isub__(self, other): 4086498aff2SJonas Devlieghere result = self.__sub__(other) 4096498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4106498aff2SJonas Devlieghere return result 4116498aff2SJonas Devlieghere 4126498aff2SJonas Devlieghere def __imul__(self, other): 4136498aff2SJonas Devlieghere result = self.__mul__(other) 4146498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4156498aff2SJonas Devlieghere return result 4166498aff2SJonas Devlieghere 4176498aff2SJonas Devlieghere def __idiv__(self, other): 4186498aff2SJonas Devlieghere result = self.__div__(other) 4196498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4206498aff2SJonas Devlieghere return result 4216498aff2SJonas Devlieghere 4226498aff2SJonas Devlieghere def __itruediv__(self, other): 4236498aff2SJonas Devlieghere result = self.__truediv__(other) 4246498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4256498aff2SJonas Devlieghere return result 4266498aff2SJonas Devlieghere 4276498aff2SJonas Devlieghere def __ifloordiv__(self, other): 4286498aff2SJonas Devlieghere result = self.__floordiv__(self, other) 4296498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4306498aff2SJonas Devlieghere return result 4316498aff2SJonas Devlieghere 4326498aff2SJonas Devlieghere def __imod__(self, other): 4336498aff2SJonas Devlieghere result = self.__and__(self, other) 4346498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4356498aff2SJonas Devlieghere return result 4366498aff2SJonas Devlieghere 4376498aff2SJonas Devlieghere def __ipow__(self, other): 4386498aff2SJonas Devlieghere result = self.__pow__(self, other) 4396498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4406498aff2SJonas Devlieghere return result 4416498aff2SJonas Devlieghere 4426498aff2SJonas Devlieghere def __ipow__(self, other, modulo): 4436498aff2SJonas Devlieghere result = self.__pow__(self, other, modulo) 4446498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4456498aff2SJonas Devlieghere return result 4466498aff2SJonas Devlieghere 4476498aff2SJonas Devlieghere def __ilshift__(self, other): 4486498aff2SJonas Devlieghere result = self.__lshift__(other) 4496498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4506498aff2SJonas Devlieghere return result 4516498aff2SJonas Devlieghere 4526498aff2SJonas Devlieghere def __irshift__(self, other): 4536498aff2SJonas Devlieghere result = self.__rshift__(other) 4546498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4556498aff2SJonas Devlieghere return result 4566498aff2SJonas Devlieghere 4576498aff2SJonas Devlieghere def __iand__(self, other): 4586498aff2SJonas Devlieghere result = self.__and__(self, other) 4596498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4606498aff2SJonas Devlieghere return result 4616498aff2SJonas Devlieghere 4626498aff2SJonas Devlieghere def __ixor__(self, other): 4636498aff2SJonas Devlieghere result = self.__xor__(self, other) 4646498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4656498aff2SJonas Devlieghere return result 4666498aff2SJonas Devlieghere 4676498aff2SJonas Devlieghere def __ior__(self, other): 4686498aff2SJonas Devlieghere result = self.__ior__(self, other) 4696498aff2SJonas Devlieghere self.sbvalue.SetValueFromCString (str(result)) 4706498aff2SJonas Devlieghere return result 4716498aff2SJonas Devlieghere 4726498aff2SJonas Devlieghere def __neg__(self): 4736498aff2SJonas Devlieghere return -int(self) 4746498aff2SJonas Devlieghere 4756498aff2SJonas Devlieghere def __pos__(self): 4766498aff2SJonas Devlieghere return +int(self) 4776498aff2SJonas Devlieghere 4786498aff2SJonas Devlieghere def __abs__(self): 4796498aff2SJonas Devlieghere return abs(int(self)) 4806498aff2SJonas Devlieghere 4816498aff2SJonas Devlieghere def __invert__(self): 4826498aff2SJonas Devlieghere return ~int(self) 4836498aff2SJonas Devlieghere 4846498aff2SJonas Devlieghere def __complex__(self): 4856498aff2SJonas Devlieghere return complex (int(self)) 4866498aff2SJonas Devlieghere 4876498aff2SJonas Devlieghere def __int__(self): 4886498aff2SJonas Devlieghere is_num,is_sign = is_numeric_type(self.sbvalue.GetType().GetCanonicalType().GetBasicType()) 4896498aff2SJonas Devlieghere if is_num and not is_sign: return self.sbvalue.GetValueAsUnsigned() 4906498aff2SJonas Devlieghere return self.sbvalue.GetValueAsSigned() 4916498aff2SJonas Devlieghere 4926498aff2SJonas Devlieghere def __long__(self): 4936498aff2SJonas Devlieghere return self.__int__() 4946498aff2SJonas Devlieghere 4956498aff2SJonas Devlieghere def __float__(self): 4966498aff2SJonas Devlieghere return float (self.sbvalue.GetValueAsSigned()) 4976498aff2SJonas Devlieghere 4986498aff2SJonas Devlieghere def __oct__(self): 4996498aff2SJonas Devlieghere return '0%o' % self.sbvalue.GetValueAsUnsigned() 5006498aff2SJonas Devlieghere 5016498aff2SJonas Devlieghere def __hex__(self): 5026498aff2SJonas Devlieghere return '0x%x' % self.sbvalue.GetValueAsUnsigned() 5036498aff2SJonas Devlieghere 5046498aff2SJonas Devlieghere def __len__(self): 5056498aff2SJonas Devlieghere return self.sbvalue.GetNumChildren() 5066498aff2SJonas Devlieghere 5076498aff2SJonas Devlieghere def __eq__(self, other): 5086498aff2SJonas Devlieghere if type(other) is int: 5096498aff2SJonas Devlieghere return int(self) == other 5106498aff2SJonas Devlieghere elif type(other) is str: 5116498aff2SJonas Devlieghere return str(self) == other 5126498aff2SJonas Devlieghere elif type(other) is value: 5136498aff2SJonas Devlieghere self_err = SBError() 5146498aff2SJonas Devlieghere other_err = SBError() 5156498aff2SJonas Devlieghere self_val = self.sbvalue.GetValueAsUnsigned(self_err) 5166498aff2SJonas Devlieghere if self_err.fail: 5176498aff2SJonas Devlieghere raise ValueError("unable to extract value of self") 5186498aff2SJonas Devlieghere other_val = other.sbvalue.GetValueAsUnsigned(other_err) 5196498aff2SJonas Devlieghere if other_err.fail: 5206498aff2SJonas Devlieghere raise ValueError("unable to extract value of other") 5216498aff2SJonas Devlieghere return self_val == other_val 5226498aff2SJonas Devlieghere raise TypeError("Unknown type %s, No equality operation defined." % str(type(other))) 5236498aff2SJonas Devlieghere 5246498aff2SJonas Devlieghere def __ne__(self, other): 5256498aff2SJonas Devlieghere return not self.__eq__(other) 5266498aff2SJonas Devlieghere%} 5276498aff2SJonas Devlieghere 5286498aff2SJonas Devlieghere%pythoncode %{ 5296498aff2SJonas Devlieghere 5306498aff2SJonas Devlieghereclass SBSyntheticValueProvider(object): 5316498aff2SJonas Devlieghere def __init__(self,valobj): 5326498aff2SJonas Devlieghere pass 5336498aff2SJonas Devlieghere 5346498aff2SJonas Devlieghere def num_children(self): 5356498aff2SJonas Devlieghere return 0 5366498aff2SJonas Devlieghere 5376498aff2SJonas Devlieghere def get_child_index(self,name): 5386498aff2SJonas Devlieghere return None 5396498aff2SJonas Devlieghere 5406498aff2SJonas Devlieghere def get_child_at_index(self,idx): 5416498aff2SJonas Devlieghere return None 5426498aff2SJonas Devlieghere 5436498aff2SJonas Devlieghere def update(self): 5446498aff2SJonas Devlieghere pass 5456498aff2SJonas Devlieghere 5466498aff2SJonas Devlieghere def has_children(self): 5476498aff2SJonas Devlieghere return False 5486498aff2SJonas Devlieghere 5496498aff2SJonas Devlieghere 5506498aff2SJonas Devlieghere%} 5516498aff2SJonas Devlieghere 5526498aff2SJonas Devlieghere%pythoncode %{ 5536498aff2SJonas Devlieghere 5546498aff2SJonas Devlieghere# given an lldb.SBBasicType it returns a tuple 5556498aff2SJonas Devlieghere# (is_numeric, is_signed) 5566498aff2SJonas Devlieghere# the value of is_signed is undefined if is_numeric == false 5576498aff2SJonas Devliegheredef is_numeric_type(basic_type): 5586498aff2SJonas Devlieghere if basic_type == eBasicTypeInvalid: return (False,False) 5596498aff2SJonas Devlieghere if basic_type == eBasicTypeVoid: return (False,False) 5606498aff2SJonas Devlieghere if basic_type == eBasicTypeChar: return (True,False) 5616498aff2SJonas Devlieghere if basic_type == eBasicTypeSignedChar: return (True,True) 5626498aff2SJonas Devlieghere if basic_type == eBasicTypeUnsignedChar: return (True,False) 5636498aff2SJonas Devlieghere if basic_type == eBasicTypeWChar: return (True,False) 5646498aff2SJonas Devlieghere if basic_type == eBasicTypeSignedWChar: return (True,True) 5656498aff2SJonas Devlieghere if basic_type == eBasicTypeUnsignedWChar: return (True,False) 5666498aff2SJonas Devlieghere if basic_type == eBasicTypeChar16: return (True,False) 5676498aff2SJonas Devlieghere if basic_type == eBasicTypeChar32: return (True,False) 568*6d5b86f8SLuís Ferreira if basic_type == eBasicTypeChar8: return (True,False) 5696498aff2SJonas Devlieghere if basic_type == eBasicTypeShort: return (True,True) 5706498aff2SJonas Devlieghere if basic_type == eBasicTypeUnsignedShort: return (True,False) 5716498aff2SJonas Devlieghere if basic_type == eBasicTypeInt: return (True,True) 5726498aff2SJonas Devlieghere if basic_type == eBasicTypeUnsignedInt: return (True,False) 5736498aff2SJonas Devlieghere if basic_type == eBasicTypeLong: return (True,True) 5746498aff2SJonas Devlieghere if basic_type == eBasicTypeUnsignedLong: return (True,False) 5756498aff2SJonas Devlieghere if basic_type == eBasicTypeLongLong: return (True,True) 5766498aff2SJonas Devlieghere if basic_type == eBasicTypeUnsignedLongLong: return (True,False) 5776498aff2SJonas Devlieghere if basic_type == eBasicTypeInt128: return (True,True) 5786498aff2SJonas Devlieghere if basic_type == eBasicTypeUnsignedInt128: return (True,False) 5796498aff2SJonas Devlieghere if basic_type == eBasicTypeBool: return (False,False) 5806498aff2SJonas Devlieghere if basic_type == eBasicTypeHalf: return (True,True) 5816498aff2SJonas Devlieghere if basic_type == eBasicTypeFloat: return (True,True) 5826498aff2SJonas Devlieghere if basic_type == eBasicTypeDouble: return (True,True) 5836498aff2SJonas Devlieghere if basic_type == eBasicTypeLongDouble: return (True,True) 5846498aff2SJonas Devlieghere if basic_type == eBasicTypeFloatComplex: return (True,True) 5856498aff2SJonas Devlieghere if basic_type == eBasicTypeDoubleComplex: return (True,True) 5866498aff2SJonas Devlieghere if basic_type == eBasicTypeLongDoubleComplex: return (True,True) 5876498aff2SJonas Devlieghere if basic_type == eBasicTypeObjCID: return (False,False) 5886498aff2SJonas Devlieghere if basic_type == eBasicTypeObjCClass: return (False,False) 5896498aff2SJonas Devlieghere if basic_type == eBasicTypeObjCSel: return (False,False) 5906498aff2SJonas Devlieghere if basic_type == eBasicTypeNullPtr: return (False,False) 5916498aff2SJonas Devlieghere #if basic_type == eBasicTypeOther: 5926498aff2SJonas Devlieghere return (False,False) 5936498aff2SJonas Devlieghere 5946498aff2SJonas Devlieghere%} 595