|  | """ | 
|  | Summary and synthetic providers for LLDB-specific shared pointers | 
|  |  | 
|  | Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | See https://llvm.org/LICENSE.txt for license information. | 
|  | SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | """ | 
|  |  | 
|  |  | 
|  | 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') |