xref: /freebsd-src/contrib/llvm-project/lldb/bindings/python/python-extensions.swig (revision e8d8bef961a50d4dc22501cde4fb9fb0be1b2532)
1130d950cSDimitry Andric%extend lldb::SBBreakpoint {
2130d950cSDimitry Andric    %pythoncode %{
3130d950cSDimitry Andric        def __eq__(self, rhs):
4130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
5130d950cSDimitry Andric                return False
6130d950cSDimitry Andric
7130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
8130d950cSDimitry Andric
9130d950cSDimitry Andric        def __ne__(self, rhs):
10130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
11130d950cSDimitry Andric                return True
12130d950cSDimitry Andric
13130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
14130d950cSDimitry Andric    %}
15130d950cSDimitry Andric}
16130d950cSDimitry Andric
17130d950cSDimitry Andric%extend lldb::SBBroadcaster {
18130d950cSDimitry Andric    %pythoncode %{
19130d950cSDimitry Andric        def __eq__(self, rhs):
20130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
21130d950cSDimitry Andric                return False
22130d950cSDimitry Andric
23130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
24130d950cSDimitry Andric
25130d950cSDimitry Andric        def __ne__(self, rhs):
26130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
27130d950cSDimitry Andric                return True
28130d950cSDimitry Andric
29130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
30130d950cSDimitry Andric    %}
31130d950cSDimitry Andric}
32130d950cSDimitry Andric
33130d950cSDimitry Andric%extend lldb::SBCommandReturnObject {
34130d950cSDimitry Andric        /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage
35130d950cSDimitry Andric        they are meant to make an SBCommandReturnObject into a file-like object so that instructions of the sort
36130d950cSDimitry Andric        print >>sb_command_return_object, "something"
37130d950cSDimitry Andric        will work correctly */
38130d950cSDimitry Andric
39130d950cSDimitry Andric        void lldb::SBCommandReturnObject::write (const char* str)
40130d950cSDimitry Andric        {
41130d950cSDimitry Andric            if (str)
42130d950cSDimitry Andric                $self->Printf("%s",str);
43130d950cSDimitry Andric        }
44130d950cSDimitry Andric        void lldb::SBCommandReturnObject::flush ()
45130d950cSDimitry Andric        {}
46130d950cSDimitry Andric}
47130d950cSDimitry Andric
48130d950cSDimitry Andric%extend lldb::SBCompileUnit {
49130d950cSDimitry Andric    %pythoncode %{
50130d950cSDimitry Andric        def __eq__(self, rhs):
51130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
52130d950cSDimitry Andric                return False
53130d950cSDimitry Andric
54130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
55130d950cSDimitry Andric
56130d950cSDimitry Andric        def __ne__(self, rhs):
57130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
58130d950cSDimitry Andric                return True
59130d950cSDimitry Andric
60130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
61130d950cSDimitry Andric    %}
62130d950cSDimitry Andric}
63130d950cSDimitry Andric
64130d950cSDimitry Andric%extend lldb::SBDeclaration {
65130d950cSDimitry Andric    %pythoncode %{
66130d950cSDimitry Andric        def __eq__(self, rhs):
67130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
68130d950cSDimitry Andric                return False
69130d950cSDimitry Andric
70130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
71130d950cSDimitry Andric
72130d950cSDimitry Andric        def __ne__(self, rhs):
73130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
74130d950cSDimitry Andric                return True
75130d950cSDimitry Andric
76130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
77130d950cSDimitry Andric    %}
78130d950cSDimitry Andric}
79130d950cSDimitry Andric
80130d950cSDimitry Andric%extend lldb::SBFunction {
81130d950cSDimitry Andric    %pythoncode %{
82130d950cSDimitry Andric        def __eq__(self, rhs):
83130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
84130d950cSDimitry Andric                return False
85130d950cSDimitry Andric
86130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
87130d950cSDimitry Andric
88130d950cSDimitry Andric        def __ne__(self, rhs):
89130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
90130d950cSDimitry Andric                return True
91130d950cSDimitry Andric
92130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
93130d950cSDimitry Andric    %}
94130d950cSDimitry Andric}
95130d950cSDimitry Andric
96130d950cSDimitry Andric%extend lldb::SBLineEntry {
97130d950cSDimitry Andric    %pythoncode %{
98130d950cSDimitry Andric        def __eq__(self, rhs):
99130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
100130d950cSDimitry Andric                return False
101130d950cSDimitry Andric
102130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
103130d950cSDimitry Andric
104130d950cSDimitry Andric        def __ne__(self, rhs):
105130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
106130d950cSDimitry Andric                return True
107130d950cSDimitry Andric
108130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
109130d950cSDimitry Andric    %}
110130d950cSDimitry Andric}
111130d950cSDimitry Andric
112130d950cSDimitry Andric%extend lldb::SBModule {
113130d950cSDimitry Andric    %pythoncode %{
114130d950cSDimitry Andric        def __eq__(self, rhs):
115130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
116130d950cSDimitry Andric                return False
117130d950cSDimitry Andric
118130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
119130d950cSDimitry Andric
120130d950cSDimitry Andric        def __ne__(self, rhs):
121130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
122130d950cSDimitry Andric                return True
123130d950cSDimitry Andric
124130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
125130d950cSDimitry Andric    %}
126130d950cSDimitry Andric}
127130d950cSDimitry Andric
128130d950cSDimitry Andric%extend lldb::SBSection {
129130d950cSDimitry Andric    %pythoncode %{
130130d950cSDimitry Andric        def __eq__(self, rhs):
131130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
132130d950cSDimitry Andric                return False
133130d950cSDimitry Andric
134130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
135130d950cSDimitry Andric
136130d950cSDimitry Andric        def __ne__(self, rhs):
137130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
138130d950cSDimitry Andric                return True
139130d950cSDimitry Andric
140130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
141130d950cSDimitry Andric    %}
142130d950cSDimitry Andric}
143130d950cSDimitry Andric%extend lldb::SBStream {
144130d950cSDimitry Andric        /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage
145130d950cSDimitry Andric        they are meant to make an SBStream into a file-like object so that instructions of the sort
146130d950cSDimitry Andric        print >>sb_stream, "something"
147130d950cSDimitry Andric        will work correctly */
148130d950cSDimitry Andric
149130d950cSDimitry Andric        void lldb::SBStream::write (const char* str)
150130d950cSDimitry Andric        {
151130d950cSDimitry Andric            if (str)
152130d950cSDimitry Andric                $self->Printf("%s",str);
153130d950cSDimitry Andric        }
154130d950cSDimitry Andric        void lldb::SBStream::flush ()
155130d950cSDimitry Andric        {}
156130d950cSDimitry Andric}
157130d950cSDimitry Andric%extend lldb::SBSymbol {
158130d950cSDimitry Andric    %pythoncode %{
159130d950cSDimitry Andric        def __eq__(self, rhs):
160130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
161130d950cSDimitry Andric                return False
162130d950cSDimitry Andric
163130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
164130d950cSDimitry Andric
165130d950cSDimitry Andric        def __ne__(self, rhs):
166130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
167130d950cSDimitry Andric                return True
168130d950cSDimitry Andric
169130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
170130d950cSDimitry Andric    %}
171130d950cSDimitry Andric}
172130d950cSDimitry Andric
173130d950cSDimitry Andric%extend lldb::SBTarget {
174130d950cSDimitry Andric    %pythoncode %{
175130d950cSDimitry Andric        def __eq__(self, rhs):
176130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
177130d950cSDimitry Andric                return False
178130d950cSDimitry Andric
179130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
180130d950cSDimitry Andric
181130d950cSDimitry Andric        def __ne__(self, rhs):
182130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
183130d950cSDimitry Andric                return True
184130d950cSDimitry Andric
185130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
186130d950cSDimitry Andric    %}
187130d950cSDimitry Andric}
188130d950cSDimitry Andric
189130d950cSDimitry Andric%extend lldb::SBTypeFilter {
190130d950cSDimitry Andric    %pythoncode %{
191130d950cSDimitry Andric        def __eq__(self, rhs):
192130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
193130d950cSDimitry Andric                return False
194130d950cSDimitry Andric
195130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
196130d950cSDimitry Andric
197130d950cSDimitry Andric        def __ne__(self, rhs):
198130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
199130d950cSDimitry Andric                return True
200130d950cSDimitry Andric
201130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
202130d950cSDimitry Andric    %}
203130d950cSDimitry Andric}
204130d950cSDimitry Andric
205130d950cSDimitry Andric%extend lldb::SBTypeNameSpecifier {
206130d950cSDimitry Andric    %pythoncode %{
207130d950cSDimitry Andric        def __eq__(self, rhs):
208130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
209130d950cSDimitry Andric                return False
210130d950cSDimitry Andric
211130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
212130d950cSDimitry Andric
213130d950cSDimitry Andric        def __ne__(self, rhs):
214130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
215130d950cSDimitry Andric                return True
216130d950cSDimitry Andric
217130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
218130d950cSDimitry Andric    %}
219130d950cSDimitry Andric}
220130d950cSDimitry Andric
221130d950cSDimitry Andric%extend lldb::SBTypeSummary {
222130d950cSDimitry Andric    %pythoncode %{
223130d950cSDimitry Andric        def __eq__(self, rhs):
224130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
225130d950cSDimitry Andric                return False
226130d950cSDimitry Andric
227130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
228130d950cSDimitry Andric
229130d950cSDimitry Andric        def __ne__(self, rhs):
230130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
231130d950cSDimitry Andric                return True
232130d950cSDimitry Andric
233130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
234130d950cSDimitry Andric    %}
235130d950cSDimitry Andric}
236130d950cSDimitry Andric
237130d950cSDimitry Andric%extend lldb::SBTypeSynthetic {
238130d950cSDimitry Andric    %pythoncode %{
239130d950cSDimitry Andric        def __eq__(self, rhs):
240130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
241130d950cSDimitry Andric                return False
242130d950cSDimitry Andric
243130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
244130d950cSDimitry Andric
245130d950cSDimitry Andric        def __ne__(self, rhs):
246130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
247130d950cSDimitry Andric                return True
248130d950cSDimitry Andric
249130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
250130d950cSDimitry Andric    %}
251130d950cSDimitry Andric}
252130d950cSDimitry Andric
253130d950cSDimitry Andric%extend lldb::SBThread {
254130d950cSDimitry Andric    %pythoncode %{
255130d950cSDimitry Andric        def __eq__(self, rhs):
256130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
257130d950cSDimitry Andric                return False
258130d950cSDimitry Andric
259130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___eq__")(self, rhs)
260130d950cSDimitry Andric
261130d950cSDimitry Andric        def __ne__(self, rhs):
262130d950cSDimitry Andric            if not isinstance(rhs, type(self)):
263130d950cSDimitry Andric                return True
264130d950cSDimitry Andric
265130d950cSDimitry Andric            return getattr(_lldb,self.__class__.__name__+"___ne__")(self, rhs)
266130d950cSDimitry Andric    %}
267130d950cSDimitry Andric}
268130d950cSDimitry Andric
269130d950cSDimitry Andric%pythoncode %{
270130d950cSDimitry Andric
271130d950cSDimitry Andricdef command(command_name=None, doc=None):
272130d950cSDimitry Andric    import lldb
273130d950cSDimitry Andric    """A decorator function that registers an LLDB command line
274130d950cSDimitry Andric        command that is bound to the function it is attached to."""
275130d950cSDimitry Andric    def callable(function):
276130d950cSDimitry Andric        """Registers an lldb command for the decorated function."""
277130d950cSDimitry Andric        command = "command script add -f %s.%s %s" % (function.__module__, function.__name__, command_name or function.__name__)
278130d950cSDimitry Andric        lldb.debugger.HandleCommand(command)
279130d950cSDimitry Andric        if doc:
280130d950cSDimitry Andric            function.__doc__ = doc
281130d950cSDimitry Andric        return function
282130d950cSDimitry Andric
283130d950cSDimitry Andric    return callable
284130d950cSDimitry Andric
285130d950cSDimitry Andricclass declaration(object):
286130d950cSDimitry Andric    '''A class that represents a source declaration location with file, line and column.'''
287130d950cSDimitry Andric    def __init__(self, file, line, col):
288130d950cSDimitry Andric        self.file = file
289130d950cSDimitry Andric        self.line = line
290130d950cSDimitry Andric        self.col = col
291130d950cSDimitry Andric
292130d950cSDimitry Andricclass value_iter(object):
293*e8d8bef9SDimitry Andric    '''Allows iterating over the children of an :py:class:`SBValue`.'''
294130d950cSDimitry Andric    def __iter__(self):
295130d950cSDimitry Andric        return self
296130d950cSDimitry Andric
297130d950cSDimitry Andric    def __next__(self):
298130d950cSDimitry Andric        if self.index >= self.length:
299130d950cSDimitry Andric            raise StopIteration()
300130d950cSDimitry Andric        child_sbvalue = self.sbvalue.GetChildAtIndex(self.index)
301130d950cSDimitry Andric        self.index += 1
302130d950cSDimitry Andric        return value(child_sbvalue)
303130d950cSDimitry Andric
304130d950cSDimitry Andric    def next(self):
305130d950cSDimitry Andric        return self.__next__()
306130d950cSDimitry Andric
307130d950cSDimitry Andric    def __init__(self,value):
308130d950cSDimitry Andric        self.index = 0
309130d950cSDimitry Andric        self.sbvalue = value
310130d950cSDimitry Andric        if type(self.sbvalue) is value:
311130d950cSDimitry Andric            self.sbvalue = self.sbvalue.sbvalue
312130d950cSDimitry Andric        self.length = self.sbvalue.GetNumChildren()
313130d950cSDimitry Andric
314130d950cSDimitry Andricclass value(object):
315*e8d8bef9SDimitry Andric    '''Wraps :py:class:`SBValue` objects so the resulting object can be used as a variable would be in code.
316*e8d8bef9SDimitry Andric
317*e8d8bef9SDimitry Andric    So if you have a Point structure variable in your code in the current frame named "pt",
318*e8d8bef9SDimitry Andric    you can initialize an instance of this class with it: ::
319130d950cSDimitry Andric
320130d950cSDimitry Andric        pt = lldb.value(lldb.frame.FindVariable("pt"))
321130d950cSDimitry Andric        print pt
322130d950cSDimitry Andric        print pt.x
323130d950cSDimitry Andric        print pt.y
324130d950cSDimitry Andric
325130d950cSDimitry Andric        pt = lldb.value(lldb.frame.FindVariable("rectangle_array"))
326130d950cSDimitry Andric        print rectangle_array[12]
327130d950cSDimitry Andric        print rectangle_array[5].origin.x'''
328130d950cSDimitry Andric    def __init__(self, sbvalue):
329130d950cSDimitry Andric        self.sbvalue = sbvalue
330130d950cSDimitry Andric
331130d950cSDimitry Andric    def __nonzero__(self):
332130d950cSDimitry Andric        return self.sbvalue.__nonzero__()
333130d950cSDimitry Andric
334130d950cSDimitry Andric    def __bool__(self):
335130d950cSDimitry Andric        return self.sbvalue.__bool__()
336130d950cSDimitry Andric
337130d950cSDimitry Andric    def __str__(self):
338130d950cSDimitry Andric        return self.sbvalue.__str__()
339130d950cSDimitry Andric
340130d950cSDimitry Andric    def __getitem__(self, key):
341130d950cSDimitry Andric        # Allow array access if this value has children...
342130d950cSDimitry Andric        if type(key) is value:
343130d950cSDimitry Andric            key = int(key)
344130d950cSDimitry Andric        if type(key) is int:
345130d950cSDimitry Andric            child_sbvalue = (self.sbvalue.GetValueForExpressionPath("[%i]" % key))
346130d950cSDimitry Andric            if child_sbvalue and child_sbvalue.IsValid():
347130d950cSDimitry Andric                return value(child_sbvalue)
348130d950cSDimitry Andric            raise IndexError("Index '%d' is out of range" % key)
349130d950cSDimitry Andric        raise TypeError("No array item of type %s" % str(type(key)))
350130d950cSDimitry Andric
351130d950cSDimitry Andric    def __iter__(self):
352130d950cSDimitry Andric        return value_iter(self.sbvalue)
353130d950cSDimitry Andric
354130d950cSDimitry Andric    def __getattr__(self, name):
355130d950cSDimitry Andric        child_sbvalue = self.sbvalue.GetChildMemberWithName (name)
356130d950cSDimitry Andric        if child_sbvalue and child_sbvalue.IsValid():
357130d950cSDimitry Andric            return value(child_sbvalue)
358130d950cSDimitry Andric        raise AttributeError("Attribute '%s' is not defined" % name)
359130d950cSDimitry Andric
360130d950cSDimitry Andric    def __add__(self, other):
361130d950cSDimitry Andric        return int(self) + int(other)
362130d950cSDimitry Andric
363130d950cSDimitry Andric    def __sub__(self, other):
364130d950cSDimitry Andric        return int(self) - int(other)
365130d950cSDimitry Andric
366130d950cSDimitry Andric    def __mul__(self, other):
367130d950cSDimitry Andric        return int(self) * int(other)
368130d950cSDimitry Andric
369130d950cSDimitry Andric    def __floordiv__(self, other):
370130d950cSDimitry Andric        return int(self) // int(other)
371130d950cSDimitry Andric
372130d950cSDimitry Andric    def __mod__(self, other):
373130d950cSDimitry Andric        return int(self) % int(other)
374130d950cSDimitry Andric
375130d950cSDimitry Andric    def __divmod__(self, other):
376130d950cSDimitry Andric        return int(self) % int(other)
377130d950cSDimitry Andric
378130d950cSDimitry Andric    def __pow__(self, other):
379130d950cSDimitry Andric        return int(self) ** int(other)
380130d950cSDimitry Andric
381130d950cSDimitry Andric    def __lshift__(self, other):
382130d950cSDimitry Andric        return int(self) << int(other)
383130d950cSDimitry Andric
384130d950cSDimitry Andric    def __rshift__(self, other):
385130d950cSDimitry Andric        return int(self) >> int(other)
386130d950cSDimitry Andric
387130d950cSDimitry Andric    def __and__(self, other):
388130d950cSDimitry Andric        return int(self) & int(other)
389130d950cSDimitry Andric
390130d950cSDimitry Andric    def __xor__(self, other):
391130d950cSDimitry Andric        return int(self) ^ int(other)
392130d950cSDimitry Andric
393130d950cSDimitry Andric    def __or__(self, other):
394130d950cSDimitry Andric        return int(self) | int(other)
395130d950cSDimitry Andric
396130d950cSDimitry Andric    def __div__(self, other):
397130d950cSDimitry Andric        return int(self) / int(other)
398130d950cSDimitry Andric
399130d950cSDimitry Andric    def __truediv__(self, other):
400130d950cSDimitry Andric        return int(self) / int(other)
401130d950cSDimitry Andric
402130d950cSDimitry Andric    def __iadd__(self, other):
403130d950cSDimitry Andric        result = self.__add__(other)
404130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
405130d950cSDimitry Andric        return result
406130d950cSDimitry Andric
407130d950cSDimitry Andric    def __isub__(self, other):
408130d950cSDimitry Andric        result = self.__sub__(other)
409130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
410130d950cSDimitry Andric        return result
411130d950cSDimitry Andric
412130d950cSDimitry Andric    def __imul__(self, other):
413130d950cSDimitry Andric        result = self.__mul__(other)
414130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
415130d950cSDimitry Andric        return result
416130d950cSDimitry Andric
417130d950cSDimitry Andric    def __idiv__(self, other):
418130d950cSDimitry Andric        result = self.__div__(other)
419130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
420130d950cSDimitry Andric        return result
421130d950cSDimitry Andric
422130d950cSDimitry Andric    def __itruediv__(self, other):
423130d950cSDimitry Andric        result = self.__truediv__(other)
424130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
425130d950cSDimitry Andric        return result
426130d950cSDimitry Andric
427130d950cSDimitry Andric    def __ifloordiv__(self, other):
428130d950cSDimitry Andric        result =  self.__floordiv__(self, other)
429130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
430130d950cSDimitry Andric        return result
431130d950cSDimitry Andric
432130d950cSDimitry Andric    def __imod__(self, other):
433130d950cSDimitry Andric        result =  self.__and__(self, other)
434130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
435130d950cSDimitry Andric        return result
436130d950cSDimitry Andric
437130d950cSDimitry Andric    def __ipow__(self, other):
438130d950cSDimitry Andric        result = self.__pow__(self, other)
439130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
440130d950cSDimitry Andric        return result
441130d950cSDimitry Andric
442130d950cSDimitry Andric    def __ipow__(self, other, modulo):
443130d950cSDimitry Andric        result = self.__pow__(self, other, modulo)
444130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
445130d950cSDimitry Andric        return result
446130d950cSDimitry Andric
447130d950cSDimitry Andric    def __ilshift__(self, other):
448130d950cSDimitry Andric        result = self.__lshift__(other)
449130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
450130d950cSDimitry Andric        return result
451130d950cSDimitry Andric
452130d950cSDimitry Andric    def __irshift__(self, other):
453130d950cSDimitry Andric        result =  self.__rshift__(other)
454130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
455130d950cSDimitry Andric        return result
456130d950cSDimitry Andric
457130d950cSDimitry Andric    def __iand__(self, other):
458130d950cSDimitry Andric        result =  self.__and__(self, other)
459130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
460130d950cSDimitry Andric        return result
461130d950cSDimitry Andric
462130d950cSDimitry Andric    def __ixor__(self, other):
463130d950cSDimitry Andric        result =  self.__xor__(self, other)
464130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
465130d950cSDimitry Andric        return result
466130d950cSDimitry Andric
467130d950cSDimitry Andric    def __ior__(self, other):
468130d950cSDimitry Andric        result =  self.__ior__(self, other)
469130d950cSDimitry Andric        self.sbvalue.SetValueFromCString (str(result))
470130d950cSDimitry Andric        return result
471130d950cSDimitry Andric
472130d950cSDimitry Andric    def __neg__(self):
473130d950cSDimitry Andric        return -int(self)
474130d950cSDimitry Andric
475130d950cSDimitry Andric    def __pos__(self):
476130d950cSDimitry Andric        return +int(self)
477130d950cSDimitry Andric
478130d950cSDimitry Andric    def __abs__(self):
479130d950cSDimitry Andric        return abs(int(self))
480130d950cSDimitry Andric
481130d950cSDimitry Andric    def __invert__(self):
482130d950cSDimitry Andric        return ~int(self)
483130d950cSDimitry Andric
484130d950cSDimitry Andric    def __complex__(self):
485130d950cSDimitry Andric        return complex (int(self))
486130d950cSDimitry Andric
487130d950cSDimitry Andric    def __int__(self):
488130d950cSDimitry Andric        is_num,is_sign = is_numeric_type(self.sbvalue.GetType().GetCanonicalType().GetBasicType())
489130d950cSDimitry Andric        if is_num and not is_sign: return self.sbvalue.GetValueAsUnsigned()
490130d950cSDimitry Andric        return self.sbvalue.GetValueAsSigned()
491130d950cSDimitry Andric
492130d950cSDimitry Andric    def __long__(self):
493130d950cSDimitry Andric        return self.__int__()
494130d950cSDimitry Andric
495130d950cSDimitry Andric    def __float__(self):
496130d950cSDimitry Andric        return float (self.sbvalue.GetValueAsSigned())
497130d950cSDimitry Andric
498130d950cSDimitry Andric    def __oct__(self):
499130d950cSDimitry Andric        return '0%o' % self.sbvalue.GetValueAsUnsigned()
500130d950cSDimitry Andric
501130d950cSDimitry Andric    def __hex__(self):
502130d950cSDimitry Andric        return '0x%x' % self.sbvalue.GetValueAsUnsigned()
503130d950cSDimitry Andric
504130d950cSDimitry Andric    def __len__(self):
505130d950cSDimitry Andric        return self.sbvalue.GetNumChildren()
506130d950cSDimitry Andric
507130d950cSDimitry Andric    def __eq__(self, other):
508130d950cSDimitry Andric        if type(other) is int:
509130d950cSDimitry Andric                return int(self) == other
510130d950cSDimitry Andric        elif type(other) is str:
511130d950cSDimitry Andric                return str(self) == other
512130d950cSDimitry Andric        elif type(other) is value:
513130d950cSDimitry Andric                self_err = SBError()
514130d950cSDimitry Andric                other_err = SBError()
515130d950cSDimitry Andric                self_val = self.sbvalue.GetValueAsUnsigned(self_err)
516130d950cSDimitry Andric                if self_err.fail:
517130d950cSDimitry Andric                        raise ValueError("unable to extract value of self")
518130d950cSDimitry Andric                other_val = other.sbvalue.GetValueAsUnsigned(other_err)
519130d950cSDimitry Andric                if other_err.fail:
520130d950cSDimitry Andric                        raise ValueError("unable to extract value of other")
521130d950cSDimitry Andric                return self_val == other_val
522130d950cSDimitry Andric        raise TypeError("Unknown type %s, No equality operation defined." % str(type(other)))
523130d950cSDimitry Andric
524130d950cSDimitry Andric    def __ne__(self, other):
525130d950cSDimitry Andric        return not self.__eq__(other)
526130d950cSDimitry Andric%}
527130d950cSDimitry Andric
528130d950cSDimitry Andric%pythoncode %{
529130d950cSDimitry Andric
530130d950cSDimitry Andricclass SBSyntheticValueProvider(object):
531130d950cSDimitry Andric    def __init__(self,valobj):
532130d950cSDimitry Andric        pass
533130d950cSDimitry Andric
534130d950cSDimitry Andric    def num_children(self):
535130d950cSDimitry Andric        return 0
536130d950cSDimitry Andric
537130d950cSDimitry Andric    def get_child_index(self,name):
538130d950cSDimitry Andric        return None
539130d950cSDimitry Andric
540130d950cSDimitry Andric    def get_child_at_index(self,idx):
541130d950cSDimitry Andric        return None
542130d950cSDimitry Andric
543130d950cSDimitry Andric    def update(self):
544130d950cSDimitry Andric        pass
545130d950cSDimitry Andric
546130d950cSDimitry Andric    def has_children(self):
547130d950cSDimitry Andric        return False
548130d950cSDimitry Andric
549130d950cSDimitry Andric
550130d950cSDimitry Andric%}
551130d950cSDimitry Andric
552130d950cSDimitry Andric%pythoncode %{
553130d950cSDimitry Andric
554130d950cSDimitry Andric# given an lldb.SBBasicType it returns a tuple
555130d950cSDimitry Andric# (is_numeric, is_signed)
556130d950cSDimitry Andric# the value of is_signed is undefined if is_numeric == false
557130d950cSDimitry Andricdef is_numeric_type(basic_type):
558130d950cSDimitry Andric    if basic_type == eBasicTypeInvalid: return (False,False)
559130d950cSDimitry Andric    if basic_type == eBasicTypeVoid: return (False,False)
560130d950cSDimitry Andric    if basic_type == eBasicTypeChar: return (True,False)
561130d950cSDimitry Andric    if basic_type == eBasicTypeSignedChar: return (True,True)
562130d950cSDimitry Andric    if basic_type == eBasicTypeUnsignedChar: return (True,False)
563130d950cSDimitry Andric    if basic_type == eBasicTypeWChar: return (True,False)
564130d950cSDimitry Andric    if basic_type == eBasicTypeSignedWChar: return (True,True)
565130d950cSDimitry Andric    if basic_type == eBasicTypeUnsignedWChar: return (True,False)
566130d950cSDimitry Andric    if basic_type == eBasicTypeChar16: return (True,False)
567130d950cSDimitry Andric    if basic_type == eBasicTypeChar32: return (True,False)
568130d950cSDimitry Andric    if basic_type == eBasicTypeShort: return (True,True)
569130d950cSDimitry Andric    if basic_type == eBasicTypeUnsignedShort: return (True,False)
570130d950cSDimitry Andric    if basic_type == eBasicTypeInt: return (True,True)
571130d950cSDimitry Andric    if basic_type == eBasicTypeUnsignedInt: return (True,False)
572130d950cSDimitry Andric    if basic_type == eBasicTypeLong: return (True,True)
573130d950cSDimitry Andric    if basic_type == eBasicTypeUnsignedLong: return (True,False)
574130d950cSDimitry Andric    if basic_type == eBasicTypeLongLong: return (True,True)
575130d950cSDimitry Andric    if basic_type == eBasicTypeUnsignedLongLong: return (True,False)
576130d950cSDimitry Andric    if basic_type == eBasicTypeInt128: return (True,True)
577130d950cSDimitry Andric    if basic_type == eBasicTypeUnsignedInt128: return (True,False)
578130d950cSDimitry Andric    if basic_type == eBasicTypeBool: return (False,False)
579130d950cSDimitry Andric    if basic_type == eBasicTypeHalf: return (True,True)
580130d950cSDimitry Andric    if basic_type == eBasicTypeFloat: return (True,True)
581130d950cSDimitry Andric    if basic_type == eBasicTypeDouble: return (True,True)
582130d950cSDimitry Andric    if basic_type == eBasicTypeLongDouble: return (True,True)
583130d950cSDimitry Andric    if basic_type == eBasicTypeFloatComplex: return (True,True)
584130d950cSDimitry Andric    if basic_type == eBasicTypeDoubleComplex: return (True,True)
585130d950cSDimitry Andric    if basic_type == eBasicTypeLongDoubleComplex: return (True,True)
586130d950cSDimitry Andric    if basic_type == eBasicTypeObjCID: return (False,False)
587130d950cSDimitry Andric    if basic_type == eBasicTypeObjCClass: return (False,False)
588130d950cSDimitry Andric    if basic_type == eBasicTypeObjCSel: return (False,False)
589130d950cSDimitry Andric    if basic_type == eBasicTypeNullPtr: return (False,False)
590130d950cSDimitry Andric    #if basic_type == eBasicTypeOther:
591130d950cSDimitry Andric    return (False,False)
592130d950cSDimitry Andric
593130d950cSDimitry Andric%}
594