diff options
Diffstat (limited to 'examples/summaries/synth.py')
| -rw-r--r-- | examples/summaries/synth.py | 66 | 
1 files changed, 66 insertions, 0 deletions
| diff --git a/examples/summaries/synth.py b/examples/summaries/synth.py new file mode 100644 index 000000000000..23f02d9b50f3 --- /dev/null +++ b/examples/summaries/synth.py @@ -0,0 +1,66 @@ +import lldb + + +class PythonObjectSyntheticChildProvider(object): + +    def __init__(self, value, internal_dict): +        self.value = value +        self.values = self.make_children() +        self.built_values = {} +        self.bo = self.value.target.byte_order +        self.ps = self.value.target.addr_size + +    def make_children(self): +        pass + +    def num_children(self): +        return len(self.values) + +    def get_child_index(self, name): +        i = 0 +        for N, value in self.values: +            if N == name: +                return i +            i += 1 +        return None + +    def update(self): +        pass + +    def has_children(self): +        return len(self.values) > 0 + +    def gen_child(self, name, value): +        data = None +        type = None +        if isinstance(value, int): +            data = lldb.SBData.CreateDataFromUInt32Array( +                self.bo, self.ps, [value]) +            type = self.value.target.GetBasicType(lldb.eBasicTypeInt) +        elif isinstance(value, long): +            data = lldb.SBData.CreateDataFromUInt64Array( +                self.bo, self.ps, [value]) +            type = self.value.target.GetBasicType(lldb.eBasicTypeLong) +        elif isinstance(value, float): +            data = lldb.SBData.CreateDataFromDoubleArray( +                self.bo, self.ps, [value]) +            type = self.value.target.GetBasicType(lldb.eBasicTypeDouble) +        elif isinstance(value, str): +            data = lldb.SBData.CreateDataFromCString(self.bo, self.ps, value) +            type = self.value.target.GetBasicType( +                lldb.eBasicTypeChar).GetArrayType( +                len(value)) +        if (data is not None) and (type is not None): +            return self.value.CreateValueFromData(name, data, type) +        return None + +    def get_child_at_index(self, index): +        if index in self.built_values: +            return self.built_values[index] + +        bv = None + +        name, value = self.values[index] +        bv = self.gen_child(name, value) +        self.built_values[index] = bv +        return bv | 
