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