| """ |
| 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' |
| ) |