[Lldb-commits] [lldb] r156410 - /lldb/trunk/examples/summaries/sp_cp.py
Enrico Granata
egranata at apple.com
Tue May 8 12:21:13 PDT 2012
Author: enrico
Date: Tue May 8 14:21:13 2012
New Revision: 156410
URL: http://llvm.org/viewvc/llvm-project?rev=156410&view=rev
Log:
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
Added:
lldb/trunk/examples/summaries/sp_cp.py
Added: lldb/trunk/examples/summaries/sp_cp.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/summaries/sp_cp.py?rev=156410&view=auto
==============================================================================
--- lldb/trunk/examples/summaries/sp_cp.py (added)
+++ lldb/trunk/examples/summaries/sp_cp.py Tue May 8 14:21:13 2012
@@ -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')
More information about the lldb-commits
mailing list