| 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 |