Package lldb :: Package formatters :: Module synth
[hide private]
[frames] | no frames]

Source Code for Module lldb.formatters.synth

 1  import lldb 
 2   
 3   
4 -class PythonObjectSyntheticChildProvider(object):
5
6 - def __init__(self, value, internal_dict):
7 self.value = value 8 self.values = self.make_children() 9 self.built_values = {} 10 self.bo = self.value.target.byte_order 11 self.ps = self.value.target.addr_size
12
13 - def make_children(self):
14 pass
15
16 - def num_children(self):
17 return len(self.values)
18
19 - def get_child_index(self, name):
20 i = 0 21 for N, value in self.values: 22 if N == name: 23 return i 24 i += 1 25 return None
26
27 - def update(self):
28 pass
29
30 - def has_children(self):
31 return len(self.values) > 0
32
33 - def gen_child(self, name, value):
34 data = None 35 type = None 36 if isinstance(value, int): 37 data = lldb.SBData.CreateDataFromUInt32Array( 38 self.bo, self.ps, [value]) 39 type = self.value.target.GetBasicType(lldb.eBasicTypeInt) 40 elif isinstance(value, long): 41 data = lldb.SBData.CreateDataFromUInt64Array( 42 self.bo, self.ps, [value]) 43 type = self.value.target.GetBasicType(lldb.eBasicTypeLong) 44 elif isinstance(value, float): 45 data = lldb.SBData.CreateDataFromDoubleArray( 46 self.bo, self.ps, [value]) 47 type = self.value.target.GetBasicType(lldb.eBasicTypeDouble) 48 elif isinstance(value, str): 49 data = lldb.SBData.CreateDataFromCString(self.bo, self.ps, value) 50 type = self.value.target.GetBasicType( 51 lldb.eBasicTypeChar).GetArrayType( 52 len(value)) 53 if (data is not None) and (type is not None): 54 return self.value.CreateValueFromData(name, data, type) 55 return None
56
57 - def get_child_at_index(self, index):
58 if index in self.built_values: 59 return self.built_values[index] 60 61 bv = None 62 63 name, value = self.values[index] 64 bv = self.gen_child(name, value) 65 self.built_values[index] = bv 66 return bv
67