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