Mercurial > hg > CbC > CbC_llvm
comparison utils/lldbDataFormatters.py @ 0:95c75e76d11b LLVM3.4
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children | 54457678186b |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:95c75e76d11b |
---|---|
1 """ | |
2 Load into LLDB with: | |
3 script import lldbDataFormatters | |
4 type synthetic add -x "^llvm::SmallVectorImpl<.+>$" -l lldbDataFormatters.SmallVectorSynthProvider | |
5 type synthetic add -x "^llvm::SmallVector<.+,.+>$" -l lldbDataFormatters.SmallVectorSynthProvider | |
6 """ | |
7 | |
8 # Pretty printer for llvm::SmallVector/llvm::SmallVectorImpl | |
9 class SmallVectorSynthProvider: | |
10 def __init__(self, valobj, dict): | |
11 self.valobj = valobj; | |
12 self.update() # initialize this provider | |
13 | |
14 def num_children(self): | |
15 begin = self.begin.GetValueAsUnsigned(0) | |
16 end = self.end.GetValueAsUnsigned(0) | |
17 return (end - begin)/self.type_size | |
18 | |
19 def get_child_index(self, name): | |
20 try: | |
21 return int(name.lstrip('[').rstrip(']')) | |
22 except: | |
23 return -1; | |
24 | |
25 def get_child_at_index(self, index): | |
26 # Do bounds checking. | |
27 if index < 0: | |
28 return None | |
29 if index >= self.num_children(): | |
30 return None; | |
31 | |
32 offset = index * self.type_size | |
33 return self.begin.CreateChildAtOffset('['+str(index)+']', | |
34 offset, self.data_type) | |
35 | |
36 def update(self): | |
37 self.begin = self.valobj.GetChildMemberWithName('BeginX') | |
38 self.end = self.valobj.GetChildMemberWithName('EndX') | |
39 the_type = self.valobj.GetType() | |
40 # If this is a reference type we have to dereference it to get to the | |
41 # template parameter. | |
42 if the_type.IsReferenceType(): | |
43 the_type = the_type.GetDereferencedType() | |
44 | |
45 self.data_type = the_type.GetTemplateArgumentType(0) | |
46 self.type_size = self.data_type.GetByteSize() | |
47 assert self.type_size != 0 |