@@ -46,7 +46,7 @@ class LibcxxStdUnorderedMapSyntheticFrontEnd
46
46
47
47
private:
48
48
CompilerType GetNodeType ();
49
- CompilerType GetElementType (CompilerType node_type );
49
+ CompilerType GetElementType (CompilerType table_type );
50
50
llvm::Expected<size_t > CalculateNumChildrenImpl (ValueObject &table);
51
51
52
52
CompilerType m_element_type;
@@ -102,8 +102,8 @@ static bool isUnorderedMap(ConstString type_name) {
102
102
}
103
103
104
104
CompilerType lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::
105
- GetElementType (CompilerType node_type ) {
106
- CompilerType element_type = node_type .GetTypeTemplateArgument (0 );
105
+ GetElementType (CompilerType table_type ) {
106
+ auto element_type = table_type. GetTypedefedType () .GetTypeTemplateArgument (0 );
107
107
108
108
// This synthetic provider is used for both unordered_(multi)map and
109
109
// unordered_(multi)set. For unordered_map, the element type has an
@@ -117,7 +117,7 @@ CompilerType lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::
117
117
element_type.GetFieldAtIndex (0 , name, nullptr , nullptr , nullptr );
118
118
CompilerType actual_type = field_type.GetTypedefedType ();
119
119
if (isStdTemplate (actual_type.GetTypeName (), " pair" ))
120
- element_type = actual_type;
120
+ return actual_type;
121
121
}
122
122
123
123
return element_type;
@@ -164,13 +164,6 @@ lldb::ValueObjectSP lldb_private::formatters::
164
164
ValueObjectSP value_sp = node_sp->GetChildMemberWithName (" __value_" );
165
165
ValueObjectSP hash_sp = node_sp->GetChildMemberWithName (" __hash_" );
166
166
if (!hash_sp || !value_sp) {
167
- if (!m_element_type) {
168
- m_node_type = GetNodeType ();
169
- if (!m_node_type)
170
- return nullptr ;
171
-
172
- m_element_type = GetElementType (m_node_type);
173
- }
174
167
node_sp = m_next_element->Cast (m_node_type.GetPointerType ())
175
168
->Dereference (error);
176
169
if (!node_sp || error.Fail ())
@@ -274,6 +267,14 @@ lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::Update() {
274
267
if (!table_sp)
275
268
return lldb::ChildCacheState::eRefetch;
276
269
270
+ m_node_type = GetNodeType ();
271
+ if (!m_node_type)
272
+ return lldb::ChildCacheState::eRefetch;
273
+
274
+ m_element_type = GetElementType (table_sp->GetCompilerType ());
275
+ if (!m_element_type)
276
+ return lldb::ChildCacheState::eRefetch;
277
+
277
278
ValueObjectSP tree_sp = GetTreePointer (*table_sp);
278
279
if (!tree_sp)
279
280
return lldb::ChildCacheState::eRefetch;
0 commit comments