Skip to content

Commit e89890e

Browse files
committed
[lldb][DataFormatter][NFC] std::map: minor restructuring in GetChildAtIndex to use early-return
1 parent da62f5f commit e89890e

File tree

1 file changed

+37
-34
lines changed

1 file changed

+37
-34
lines changed

lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ void lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetValueOffset(
267267
uint64_t bit_offset;
268268
if (node_type.GetIndexOfFieldWithName("__value_", nullptr, &bit_offset) !=
269269
UINT32_MAX) {
270+
// Old layout (pre 089a7cc5dea)
270271
m_skip_size = bit_offset / 8u;
271272
} else {
272273
auto ast_ctx = node_type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
@@ -328,45 +329,47 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetChildAtIndex(
328329
nullptr; // this will stop all future searches until an Update() happens
329330
return iterated_sp;
330331
}
331-
if (GetDataType()) {
332-
if (!need_to_skip) {
333-
Status error;
334-
iterated_sp = iterated_sp->Dereference(error);
335-
if (!iterated_sp || error.Fail()) {
336-
m_tree = nullptr;
337-
return lldb::ValueObjectSP();
338-
}
339-
GetValueOffset(iterated_sp);
340-
auto child_sp = iterated_sp->GetChildMemberWithName("__value_");
341-
if (child_sp)
342-
iterated_sp = child_sp;
343-
else
344-
iterated_sp = iterated_sp->GetSyntheticChildAtOffset(
345-
m_skip_size, m_element_type, true);
346-
if (!iterated_sp) {
347-
m_tree = nullptr;
348-
return lldb::ValueObjectSP();
349-
}
350-
} else {
351-
// because of the way our debug info is made, we need to read item 0
352-
// first so that we can cache information used to generate other elements
353-
if (m_skip_size == UINT32_MAX)
354-
GetChildAtIndex(0);
355-
if (m_skip_size == UINT32_MAX) {
356-
m_tree = nullptr;
357-
return lldb::ValueObjectSP();
358-
}
332+
333+
if (!GetDataType()) {
334+
m_tree = nullptr;
335+
return lldb::ValueObjectSP();
336+
}
337+
338+
if (!need_to_skip) {
339+
Status error;
340+
iterated_sp = iterated_sp->Dereference(error);
341+
if (!iterated_sp || error.Fail()) {
342+
m_tree = nullptr;
343+
return lldb::ValueObjectSP();
344+
}
345+
GetValueOffset(iterated_sp);
346+
auto child_sp = iterated_sp->GetChildMemberWithName("__value_");
347+
if (child_sp)
348+
iterated_sp = child_sp;
349+
else
359350
iterated_sp = iterated_sp->GetSyntheticChildAtOffset(
360351
m_skip_size, m_element_type, true);
361-
if (!iterated_sp) {
362-
m_tree = nullptr;
363-
return lldb::ValueObjectSP();
364-
}
352+
if (!iterated_sp) {
353+
m_tree = nullptr;
354+
return lldb::ValueObjectSP();
365355
}
366356
} else {
367-
m_tree = nullptr;
368-
return lldb::ValueObjectSP();
357+
// because of the way our debug info is made, we need to read item 0
358+
// first so that we can cache information used to generate other elements
359+
if (m_skip_size == UINT32_MAX)
360+
GetChildAtIndex(0);
361+
if (m_skip_size == UINT32_MAX) {
362+
m_tree = nullptr;
363+
return lldb::ValueObjectSP();
364+
}
365+
iterated_sp = iterated_sp->GetSyntheticChildAtOffset(m_skip_size,
366+
m_element_type, true);
367+
if (!iterated_sp) {
368+
m_tree = nullptr;
369+
return lldb::ValueObjectSP();
370+
}
369371
}
372+
370373
// at this point we have a valid
371374
// we need to copy current_sp into a new object otherwise we will end up with
372375
// all items named __value_

0 commit comments

Comments
 (0)