diff options
author | Enrico Granata <granata.enrico@gmail.com> | 2011-07-29 19:53:35 +0000 |
---|---|---|
committer | Enrico Granata <granata.enrico@gmail.com> | 2011-07-29 19:53:35 +0000 |
commit | 6f3533fb1d742620328b4fcc79410d3e09d6eb8d (patch) | |
tree | 4ed75acf7c94fefcab457f17a568827d5b0e3c22 /lldb/test/functionalities/data-formatter/data-formatter-python-synth/StdVectorSynthProvider.py | |
parent | ce0ceebb1c5f896e992e1cac36fad732daf55cb0 (diff) | |
download | bcm5719-llvm-6f3533fb1d742620328b4fcc79410d3e09d6eb8d.tar.gz bcm5719-llvm-6f3533fb1d742620328b4fcc79410d3e09d6eb8d.zip |
Public API changes:
- Completely new implementation of SBType
- Various enhancements in several other classes
Python synthetic children providers for std::vector<T>, std::list<T> and std::map<K,V>:
- these return the actual elements into the container as the children of the container
- basic template name parsing that works (hopefully) on both Clang and GCC
- find them in examples/synthetic and in the test suite in functionalities/data-formatter/data-formatter-python-synth
New summary string token ${svar :
- the syntax is just the same as in ${var but this new token lets you read the values
coming from the synthetic children provider instead of the actual children
- Python providers above provide a synthetic child len that returns the number of elements
into the container
Full bug fix for the issue in which getting byte size for a non-complete type would crash LLDB
Several other fixes, including:
- inverted the order of arguments in the ClangASTType constructor
- EvaluationPoint now only returns SharedPointer's to Target and Process
- the help text for several type subcommands now correctly indicates argument-less options as such
llvm-svn: 136504
Diffstat (limited to 'lldb/test/functionalities/data-formatter/data-formatter-python-synth/StdVectorSynthProvider.py')
-rw-r--r-- | lldb/test/functionalities/data-formatter/data-formatter-python-synth/StdVectorSynthProvider.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lldb/test/functionalities/data-formatter/data-formatter-python-synth/StdVectorSynthProvider.py b/lldb/test/functionalities/data-formatter/data-formatter-python-synth/StdVectorSynthProvider.py new file mode 100644 index 00000000000..91e634a718a --- /dev/null +++ b/lldb/test/functionalities/data-formatter/data-formatter-python-synth/StdVectorSynthProvider.py @@ -0,0 +1,25 @@ +class StdVectorSynthProvider: + def __init__(self, valobj, dict): + self.valobj = valobj; + self.update() + def num_children(self): + start_val = int(self.Mstart.GetValue(),0) + finish_val = int(self.Mfinish.GetValue(),0) + return (finish_val-start_val)/self.data_size + def get_child_index(self,name): + if name == "len": + return self.num_children(); + else: + return int(name.lstrip('[').rstrip(']')) + def get_child_at_index(self,index): + if index == self.num_children(): + return self.valobj.CreateValueFromExpression("len",str(self.num_children())) + else: + offset = index * self.data_size + return self.Mstart.CreateChildAtOffset('['+str(index)+']',offset,self.data_type) + def update(self): + self.Mimpl = self.valobj.GetChildMemberWithName('_M_impl') + self.Mstart = self.Mimpl.GetChildMemberWithName('_M_start') + self.Mfinish = self.Mimpl.GetChildMemberWithName('_M_finish') + self.data_type = self.Mstart.GetType().GetPointeeType() + self.data_size = self.data_type.GetByteSize() |