Author: Michael Buch Date: 2024-01-31T17:18:13Z New Revision: 08c0eb183a9ca2983d20f5a5f366df44f199d287
URL: https://github.com/llvm/llvm-project/commit/08c0eb183a9ca2983d20f5a5f366df44f199d287 DIFF: https://github.com/llvm/llvm-project/commit/08c0eb183a9ca2983d20f5a5f366df44f199d287.diff LOG: [lldb][DataFormatter][NFC] Use GetFirstValueOfLibCXXCompressedPair throughout formatters (#80133) This avoids duplicating the logic to get the first element of a libc++ `__compressed_pair`. This will be useful in supporting upcoming changes to the layout of `__compressed_pair`. Drive-by changes: * Renamed `m_item` to `size_node` for readability; `m_item` suggests it's a member variable, which it is not. Added: Modified: lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp Removed: ################################################################################ diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp index 092a4120376b7..d3ee63a35e107 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp @@ -213,30 +213,20 @@ size_t lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd:: CalculateNumChildren() { if (m_count != UINT32_MAX) return m_count; + if (m_tree == nullptr) return 0; - ValueObjectSP m_item(m_tree->GetChildMemberWithName("__pair3_")); - if (!m_item) + + ValueObjectSP size_node(m_tree->GetChildMemberWithName("__pair3_")); + if (!size_node) return 0; - switch (m_item->GetCompilerType().GetNumDirectBaseClasses()) { - case 1: - // Assume a pre llvm r300140 __compressed_pair implementation: - m_item = m_item->GetChildMemberWithName("__first_"); - break; - case 2: { - // Assume a post llvm r300140 __compressed_pair implementation: - ValueObjectSP first_elem_parent = m_item->GetChildAtIndex(0); - m_item = first_elem_parent->GetChildMemberWithName("__value_"); - break; - } - default: - return false; - } + size_node = GetFirstValueOfLibCXXCompressedPair(*size_node); - if (!m_item) + if (!size_node) return 0; - m_count = m_item->GetValueAsUnsigned(0); + + m_count = size_node->GetValueAsUnsigned(0); return m_count; } diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp index ff7043bdf97ff..1a85d37ebf0cc 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp @@ -116,25 +116,10 @@ lldb::ValueObjectSP lldb_private::formatters:: if (!p1_sp) return nullptr; - ValueObjectSP first_sp = nullptr; - switch (p1_sp->GetCompilerType().GetNumDirectBaseClasses()) { - case 1: - // Assume a pre llvm r300140 __compressed_pair implementation: - first_sp = p1_sp->GetChildMemberWithName("__first_"); - break; - case 2: { - // Assume a post llvm r300140 __compressed_pair implementation: - ValueObjectSP first_elem_parent_sp = - p1_sp->GetChildAtIndex(0); - first_sp = p1_sp->GetChildMemberWithName("__value_"); - break; - } - default: - return nullptr; - } - + ValueObjectSP first_sp = GetFirstValueOfLibCXXCompressedPair(*p1_sp); if (!first_sp) return nullptr; + m_element_type = first_sp->GetCompilerType(); m_element_type = m_element_type.GetTypeTemplateArgument(0); m_element_type = m_element_type.GetPointeeType(); @@ -218,37 +203,30 @@ bool lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd:: return false; ValueObjectSP p2_sp = table_sp->GetChildMemberWithName("__p2_"); - ValueObjectSP num_elements_sp = nullptr; - llvm::SmallVector<llvm::StringRef, 3> next_path; - switch (p2_sp->GetCompilerType().GetNumDirectBaseClasses()) { - case 1: - // Assume a pre llvm r300140 __compressed_pair implementation: - num_elements_sp = p2_sp->GetChildMemberWithName("__first_"); - next_path.append({"__p1_", "__first_", "__next_"}); - break; - case 2: { - // Assume a post llvm r300140 __compressed_pair implementation: - ValueObjectSP first_elem_parent = p2_sp->GetChildAtIndex(0); - num_elements_sp = first_elem_parent->GetChildMemberWithName("__value_"); - next_path.append({"__p1_", "__value_", "__next_"}); - break; - } - default: + if (!p2_sp) return false; - } + ValueObjectSP num_elements_sp = GetFirstValueOfLibCXXCompressedPair(*p2_sp); if (!num_elements_sp) return false; - m_tree = table_sp->GetChildAtNamePath(next_path).get(); + ValueObjectSP p1_sp = table_sp->GetChildMemberWithName("__p1_"); + if (!p1_sp) + return false; + + ValueObjectSP value_sp = GetFirstValueOfLibCXXCompressedPair(*p1_sp); + if (!value_sp) + return false; + + m_tree = value_sp->GetChildMemberWithName("__next_").get(); if (m_tree == nullptr) return false; m_num_elements = num_elements_sp->GetValueAsUnsigned(0); if (m_num_elements > 0) - m_next_element = - table_sp->GetChildAtNamePath(next_path).get(); + m_next_element = m_tree; + return false; } diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp index db7cc5bce26ed..9d88fcf995309 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp @@ -123,26 +123,11 @@ bool lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd::Update() { if (!data_type_finder_sp) return false; - switch (data_type_finder_sp->GetCompilerType().GetNumDirectBaseClasses()) { - case 1: - // Assume a pre llvm r300140 __compressed_pair implementation: - data_type_finder_sp = - data_type_finder_sp->GetChildMemberWithName("__first_"); - break; - case 2: { - // Assume a post llvm r300140 __compressed_pair implementation: - ValueObjectSP first_elem_parent_sp = - data_type_finder_sp->GetChildAtIndex(0); - data_type_finder_sp = - first_elem_parent_sp->GetChildMemberWithName("__value_"); - break; - } - default: - return false; - } - + data_type_finder_sp = + GetFirstValueOfLibCXXCompressedPair(*data_type_finder_sp); if (!data_type_finder_sp) return false; + m_element_type = data_type_finder_sp->GetCompilerType().GetPointeeType(); if (std::optional<uint64_t> size = m_element_type.GetByteSize(nullptr)) { m_element_size = *size; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits