brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.5 KiB · ddea77a Raw
162 lines · plain
1STRING_EXTENSION_OUTSIDE(SBData)2 3%extend lldb::SBData {4#ifdef SWIGPYTHON5    %pythoncode %{6        def __len__(self):7            return self.GetByteSize()8 9        class read_data_helper:10            def __init__(self, sbdata, readerfunc, item_size):11                self.sbdata = sbdata12                self.readerfunc = readerfunc13                self.item_size = item_size14            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 list20                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 here23                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_data29            def __len__(self):30                return int(self.sbdata.GetByteSize()/self.item_size)31            def all(self):32                return self[0:len(self)]33 34        @classmethod35        def CreateDataFromInt (cls, value, size = None, target = None, ptr_size = None, endian = None):36            import sys37            lldbmodule = sys.modules[cls.__module__]38            lldbdict = lldbmodule.__dict__39            if 'target' in lldbdict:40                lldbtarget = lldbdict['target']41            else:42                lldbtarget = None43            if target is None and lldbtarget is not None and lldbtarget.IsValid():44                target = lldbtarget45            if ptr_size is None:46                if target and target.IsValid():47                    ptr_size = target.addr_size48                else:49                    ptr_size = 850            if endian is None:51                if target and target.IsValid():52                    endian = target.byte_order53                else:54                    endian = lldbdict['eByteOrderLittle']55            if size is None:56                if value > 2147483647:57                    size = 858                elif value < -2147483648:59                    size = 860                elif value > 4294967295:61                    size = 862                else:63                    size = 464            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 None73 74        def _make_helper(self, sbdata, getfunc, itemsize):75            return self.read_data_helper(sbdata, getfunc, itemsize)76 77        def _make_helper_uint8(self):78            return self._make_helper(self, SBData.GetUnsignedInt8, 1)79 80        def _make_helper_uint16(self):81            return self._make_helper(self, SBData.GetUnsignedInt16, 2)82 83        def _make_helper_uint32(self):84            return self._make_helper(self, SBData.GetUnsignedInt32, 4)85 86        def _make_helper_uint64(self):87            return self._make_helper(self, SBData.GetUnsignedInt64, 8)88 89        def _make_helper_sint8(self):90            return self._make_helper(self, SBData.GetSignedInt8, 1)91 92        def _make_helper_sint16(self):93            return self._make_helper(self, SBData.GetSignedInt16, 2)94 95        def _make_helper_sint32(self):96            return self._make_helper(self, SBData.GetSignedInt32, 4)97 98        def _make_helper_sint64(self):99            return self._make_helper(self, SBData.GetSignedInt64, 8)100 101        def _make_helper_float(self):102            return self._make_helper(self, SBData.GetFloat, 4)103 104        def _make_helper_double(self):105            return self._make_helper(self, SBData.GetDouble, 8)106 107        def _read_all_uint8(self):108            return self._make_helper_uint8().all()109 110        def _read_all_uint16(self):111            return self._make_helper_uint16().all()112 113        def _read_all_uint32(self):114            return self._make_helper_uint32().all()115 116        def _read_all_uint64(self):117            return self._make_helper_uint64().all()118 119        def _read_all_sint8(self):120            return self._make_helper_sint8().all()121 122        def _read_all_sint16(self):123            return self._make_helper_sint16().all()124 125        def _read_all_sint32(self):126            return self._make_helper_sint32().all()127 128        def _read_all_sint64(self):129            return self._make_helper_sint64().all()130 131        def _read_all_float(self):132            return self._make_helper_float().all()133 134        def _read_all_double(self):135            return self._make_helper_double().all()136 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().''')159    %}160#endif161}162