[Lldb-commits] [lldb] 08c0eb1 - [lldb][DataFormatter][NFC] Use GetFirstValueOfLibCXXCompressedPair throughout formatters (#80133)
via lldb-commits
lldb-commits at lists.llvm.org
Wed Jan 31 09:18:17 PST 2024
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;
More information about the lldb-commits
mailing list