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 | 7402d3b1f6909f56480de5f98be933a7c27f0914 (patch) | |
tree | 5baea80c83ba6ae4b784f75d7f6f4bdbcf293f7f /examples/summaries/sp_cp.py | |
parent | d9488c8ba7df755686f38a91bd3f9a9270a5a128 (diff) |
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
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@156410 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'examples/summaries/sp_cp.py')
-rw-r--r-- | examples/summaries/sp_cp.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/examples/summaries/sp_cp.py b/examples/summaries/sp_cp.py new file mode 100644 index 000000000..9aa0a2f4f --- /dev/null +++ b/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') |