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