diff options
| author | Enrico Granata <egranata@apple.com> | 2012-05-08 19:21:13 +0000 |
|---|---|---|
| committer | Enrico Granata <egranata@apple.com> | 2012-05-08 19:21:13 +0000 |
| commit | 9123950ab17beda97c01634814f759b66cdf38a0 (patch) | |
| tree | 63b0f93d34c39a2c3e8d6f16f6b8d6ea5b1342ce /lldb/examples | |
| parent | fd82286e62fd94bfee7a99d734b49eff5182868e (diff) | |
| download | bcm5719-llvm-9123950ab17beda97c01634814f759b66cdf38a0.tar.gz bcm5719-llvm-9123950ab17beda97c01634814f759b66cdf38a0.zip | |
A simple implementation of a summary and synthetic children providers for LLDB-specific shared pointers - This could be generalized to work with C++11 shared pointers with relative ease
llvm-svn: 156410
Diffstat (limited to 'lldb/examples')
| -rw-r--r-- | lldb/examples/summaries/sp_cp.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/lldb/examples/summaries/sp_cp.py b/lldb/examples/summaries/sp_cp.py new file mode 100644 index 00000000000..9aa0a2f4fb9 --- /dev/null +++ b/lldb/examples/summaries/sp_cp.py @@ -0,0 +1,61 @@ +""" +Summary and synthetic providers for LLDB-specific shared pointers + +part of The LLVM Compiler Infrastructure +This file is distributed under the University of Illinois Open Source +License. See LICENSE.TXT for details. +""" + +class SharedPtr_SyntheticChildrenProvider: + def __init__(self,valobj,dict): + self.valobj = valobj + self.update() + def update(self): + pass + def num_children(self): + return 1 + def get_child_index(self,name): + if name == "ptr": + return 0 + if name == "count": + return 1 + return None + def get_child_at_index(self,index): + if index == 0: + return self.valobj.GetChildMemberWithName('_M_ptr') + if index == 1: + return self.valobj.GetChildMemberWithName('_M_refcount').GetChildMemberWithName('_M_pi').GetChildMemberWithName('_M_use_count') + return None + +def SharedPtr_SummaryProvider (valobj,dict): + return 'use = ' + str(valobj.GetChildMemberWithName("count").GetValueAsUnsigned()) + +class ValueObjectSP_SyntheticChildrenProvider: + def __init__(self,valobj,dict): + self.valobj = valobj + self.update() + def update(self): + pass + def num_children(self): + return 1 + def get_child_index(self,name): + if name == "ptr": + return 0 + if name == "count": + return 1 + return None + def get_child_at_index(self,index): + if index == 0: + return self.valobj.GetChildMemberWithName('ptr_') + if index == 1: + return self.valobj.GetChildMemberWithName('cntrl_').GetChildMemberWithName('shared_owners_') + return None + +def ValueObjectSP_SummaryProvider (valobj,dict): + return 'use = ' + str(1 + valobj.GetChildMemberWithName("count").GetValueAsUnsigned()) + +def __lldb_init_module(debugger, dict): + debugger.HandleCommand('type summary add -x ".*ValueObjectSP" --expand -F sp_cp.ValueObjectSP_SummaryProvider') + debugger.HandleCommand('type synthetic add -x ".*ValueObjectSP" -l sp_cp.ValueObjectSP_SyntheticChildrenProvider') + debugger.HandleCommand('type summary add -x ".*SP" --expand -F sp_cp.SharedPtr_SummaryProvider') + debugger.HandleCommand('type synthetic add -x ".*SP" -l sp_cp.SharedPtr_SyntheticChildrenProvider') |

