[NFC][Coroutines] Use structured binding with llvm::enumerate in CoroSplit (#116879)
[llvm-project.git] / lldb / bindings / interface / SBDataExtensions.i
blobddea77a088dfa97110ea386874054905380bfe4b
1 STRING_EXTENSION_OUTSIDE(SBData)
3 %extend lldb::SBData {
4 #ifdef SWIGPYTHON
5 %pythoncode %{
6 def __len__(self):
7 return self.GetByteSize()
9 class read_data_helper:
10 def __init__(self, sbdata, readerfunc, item_size):
11 self.sbdata = sbdata
12 self.readerfunc = readerfunc
13 self.item_size = item_size
14 def __getitem__(self,key):
15 if isinstance(key,slice):
16 list = []
17 for x in range(*key.indices(self.__len__())):
18 list.append(self.__getitem__(x))
19 return list
20 if not (isinstance(key, int)):
21 raise TypeError('must be int')
22 key = key * self.item_size # SBData uses byte-based indexes, but we want to use itemsize-based indexes here
23 error = SBError()
24 my_data = self.readerfunc(self.sbdata,error,key)
25 if error.Fail():
26 raise IndexError(error.GetCString())
27 else:
28 return my_data
29 def __len__(self):
30 return int(self.sbdata.GetByteSize()/self.item_size)
31 def all(self):
32 return self[0:len(self)]
34 @classmethod
35 def CreateDataFromInt (cls, value, size = None, target = None, ptr_size = None, endian = None):
36 import sys
37 lldbmodule = sys.modules[cls.__module__]
38 lldbdict = lldbmodule.__dict__
39 if 'target' in lldbdict:
40 lldbtarget = lldbdict['target']
41 else:
42 lldbtarget = None
43 if target is None and lldbtarget is not None and lldbtarget.IsValid():
44 target = lldbtarget
45 if ptr_size is None:
46 if target and target.IsValid():
47 ptr_size = target.addr_size
48 else:
49 ptr_size = 8
50 if endian is None:
51 if target and target.IsValid():
52 endian = target.byte_order
53 else:
54 endian = lldbdict['eByteOrderLittle']
55 if size is None:
56 if value > 2147483647:
57 size = 8
58 elif value < -2147483648:
59 size = 8
60 elif value > 4294967295:
61 size = 8
62 else:
63 size = 4
64 if size == 4:
65 if value < 0:
66 return SBData().CreateDataFromSInt32Array(endian, ptr_size, [value])
67 return SBData().CreateDataFromUInt32Array(endian, ptr_size, [value])
68 if size == 8:
69 if value < 0:
70 return SBData().CreateDataFromSInt64Array(endian, ptr_size, [value])
71 return SBData().CreateDataFromUInt64Array(endian, ptr_size, [value])
72 return None
74 def _make_helper(self, sbdata, getfunc, itemsize):
75 return self.read_data_helper(sbdata, getfunc, itemsize)
77 def _make_helper_uint8(self):
78 return self._make_helper(self, SBData.GetUnsignedInt8, 1)
80 def _make_helper_uint16(self):
81 return self._make_helper(self, SBData.GetUnsignedInt16, 2)
83 def _make_helper_uint32(self):
84 return self._make_helper(self, SBData.GetUnsignedInt32, 4)
86 def _make_helper_uint64(self):
87 return self._make_helper(self, SBData.GetUnsignedInt64, 8)
89 def _make_helper_sint8(self):
90 return self._make_helper(self, SBData.GetSignedInt8, 1)
92 def _make_helper_sint16(self):
93 return self._make_helper(self, SBData.GetSignedInt16, 2)
95 def _make_helper_sint32(self):
96 return self._make_helper(self, SBData.GetSignedInt32, 4)
98 def _make_helper_sint64(self):
99 return self._make_helper(self, SBData.GetSignedInt64, 8)
101 def _make_helper_float(self):
102 return self._make_helper(self, SBData.GetFloat, 4)
104 def _make_helper_double(self):
105 return self._make_helper(self, SBData.GetDouble, 8)
107 def _read_all_uint8(self):
108 return self._make_helper_uint8().all()
110 def _read_all_uint16(self):
111 return self._make_helper_uint16().all()
113 def _read_all_uint32(self):
114 return self._make_helper_uint32().all()
116 def _read_all_uint64(self):
117 return self._make_helper_uint64().all()
119 def _read_all_sint8(self):
120 return self._make_helper_sint8().all()
122 def _read_all_sint16(self):
123 return self._make_helper_sint16().all()
125 def _read_all_sint32(self):
126 return self._make_helper_sint32().all()
128 def _read_all_sint64(self):
129 return self._make_helper_sint64().all()
131 def _read_all_float(self):
132 return self._make_helper_float().all()
134 def _read_all_double(self):
135 return self._make_helper_double().all()
137 uint8 = property(_make_helper_uint8, None, doc='''A read only property that returns an array-like object out of which you can read uint8 values.''')
138 uint16 = property(_make_helper_uint16, None, doc='''A read only property that returns an array-like object out of which you can read uint16 values.''')
139 uint32 = property(_make_helper_uint32, None, doc='''A read only property that returns an array-like object out of which you can read uint32 values.''')
140 uint64 = property(_make_helper_uint64, None, doc='''A read only property that returns an array-like object out of which you can read uint64 values.''')
141 sint8 = property(_make_helper_sint8, None, doc='''A read only property that returns an array-like object out of which you can read sint8 values.''')
142 sint16 = property(_make_helper_sint16, None, doc='''A read only property that returns an array-like object out of which you can read sint16 values.''')
143 sint32 = property(_make_helper_sint32, None, doc='''A read only property that returns an array-like object out of which you can read sint32 values.''')
144 sint64 = property(_make_helper_sint64, None, doc='''A read only property that returns an array-like object out of which you can read sint64 values.''')
145 float = property(_make_helper_float, None, doc='''A read only property that returns an array-like object out of which you can read float values.''')
146 double = property(_make_helper_double, None, doc='''A read only property that returns an array-like object out of which you can read double values.''')
147 uint8s = property(_read_all_uint8, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint8 values.''')
148 uint16s = property(_read_all_uint16, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint16 values.''')
149 uint32s = property(_read_all_uint32, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint32 values.''')
150 uint64s = property(_read_all_uint64, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint64 values.''')
151 sint8s = property(_read_all_sint8, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint8 values.''')
152 sint16s = property(_read_all_sint16, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint16 values.''')
153 sint32s = property(_read_all_sint32, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint32 values.''')
154 sint64s = property(_read_all_sint64, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint64 values.''')
155 floats = property(_read_all_float, None, doc='''A read only property that returns an array with all the contents of this SBData represented as float values.''')
156 doubles = property(_read_all_double, None, doc='''A read only property that returns an array with all the contents of this SBData represented as double values.''')
157 byte_order = property(GetByteOrder, SetByteOrder, doc='''A read/write property getting and setting the endianness of this SBData (data.byte_order = lldb.eByteOrderLittle).''')
158 size = property(GetByteSize, None, doc='''A read only property that returns the size the same result as GetByteSize().''')
160 #endif