brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 94cfbfa Raw
60 lines · python
1import lldb2 3 4class PythonObjectSyntheticChildProvider(object):5    def __init__(self, value, internal_dict):6        self.value = value7        self.values = self.make_children()8        self.built_values = {}9        self.bo = self.value.target.byte_order10        self.ps = self.value.target.addr_size11 12    def make_children(self):13        pass14 15    def num_children(self):16        return len(self.values)17 18    def get_child_index(self, name):19        i = 020        for N, value in self.values:21            if N == name:22                return i23            i += 124        return None25 26    def update(self):27        pass28 29    def has_children(self):30        return len(self.values) > 031 32    def gen_child(self, name, value):33        data = None34        type = None35        if isinstance(value, int):36            data = lldb.SBData.CreateDataFromUInt64Array(self.bo, self.ps, [value])37            type = self.value.target.GetBasicType(lldb.eBasicTypeLong)38        elif isinstance(value, float):39            data = lldb.SBData.CreateDataFromDoubleArray(self.bo, self.ps, [value])40            type = self.value.target.GetBasicType(lldb.eBasicTypeDouble)41        elif isinstance(value, str):42            data = lldb.SBData.CreateDataFromCString(self.bo, self.ps, value)43            type = self.value.target.GetBasicType(lldb.eBasicTypeChar).GetArrayType(44                len(value)45            )46        if (data is not None) and (type is not None):47            return self.value.CreateValueFromData(name, data, type)48        return None49 50    def get_child_at_index(self, index):51        if index in self.built_values:52            return self.built_values[index]53 54        bv = None55 56        name, value = self.values[index]57        bv = self.gen_child(name, value)58        self.built_values[index] = bv59        return bv60