[Lldb-commits] [lldb] e89890e - [lldb][DataFormatter][NFC] std::map: minor restructuring in GetChildAtIndex to use early-return

Michael Buch via lldb-commits lldb-commits at lists.llvm.org
Wed Jul 3 01:34:45 PDT 2024


Author: Michael Buch
Date: 2024-07-03T10:34:16+02:00
New Revision: e89890e8e510f2b76c8c4a2b2a6fc323b1e837ad

URL: https://github.com/llvm/llvm-project/commit/e89890e8e510f2b76c8c4a2b2a6fc323b1e837ad
DIFF: https://github.com/llvm/llvm-project/commit/e89890e8e510f2b76c8c4a2b2a6fc323b1e837ad.diff

LOG: [lldb][DataFormatter][NFC] std::map: minor restructuring in GetChildAtIndex to use early-return

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp
index 2a241e3764b19..44fe294ced722 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp
@@ -267,6 +267,7 @@ void lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetValueOffset(
   uint64_t bit_offset;
   if (node_type.GetIndexOfFieldWithName("__value_", nullptr, &bit_offset) !=
       UINT32_MAX) {
+    // Old layout (pre 089a7cc5dea)
     m_skip_size = bit_offset / 8u;
   } else {
     auto ast_ctx = node_type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
@@ -328,45 +329,47 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetChildAtIndex(
         nullptr; // this will stop all future searches until an Update() happens
     return iterated_sp;
   }
-  if (GetDataType()) {
-    if (!need_to_skip) {
-      Status error;
-      iterated_sp = iterated_sp->Dereference(error);
-      if (!iterated_sp || error.Fail()) {
-        m_tree = nullptr;
-        return lldb::ValueObjectSP();
-      }
-      GetValueOffset(iterated_sp);
-      auto child_sp = iterated_sp->GetChildMemberWithName("__value_");
-      if (child_sp)
-        iterated_sp = child_sp;
-      else
-        iterated_sp = iterated_sp->GetSyntheticChildAtOffset(
-            m_skip_size, m_element_type, true);
-      if (!iterated_sp) {
-        m_tree = nullptr;
-        return lldb::ValueObjectSP();
-      }
-    } else {
-      // because of the way our debug info is made, we need to read item 0
-      // first so that we can cache information used to generate other elements
-      if (m_skip_size == UINT32_MAX)
-        GetChildAtIndex(0);
-      if (m_skip_size == UINT32_MAX) {
-        m_tree = nullptr;
-        return lldb::ValueObjectSP();
-      }
+
+  if (!GetDataType()) {
+    m_tree = nullptr;
+    return lldb::ValueObjectSP();
+  }
+
+  if (!need_to_skip) {
+    Status error;
+    iterated_sp = iterated_sp->Dereference(error);
+    if (!iterated_sp || error.Fail()) {
+      m_tree = nullptr;
+      return lldb::ValueObjectSP();
+    }
+    GetValueOffset(iterated_sp);
+    auto child_sp = iterated_sp->GetChildMemberWithName("__value_");
+    if (child_sp)
+      iterated_sp = child_sp;
+    else
       iterated_sp = iterated_sp->GetSyntheticChildAtOffset(
           m_skip_size, m_element_type, true);
-      if (!iterated_sp) {
-        m_tree = nullptr;
-        return lldb::ValueObjectSP();
-      }
+    if (!iterated_sp) {
+      m_tree = nullptr;
+      return lldb::ValueObjectSP();
     }
   } else {
-    m_tree = nullptr;
-    return lldb::ValueObjectSP();
+    // because of the way our debug info is made, we need to read item 0
+    // first so that we can cache information used to generate other elements
+    if (m_skip_size == UINT32_MAX)
+      GetChildAtIndex(0);
+    if (m_skip_size == UINT32_MAX) {
+      m_tree = nullptr;
+      return lldb::ValueObjectSP();
+    }
+    iterated_sp = iterated_sp->GetSyntheticChildAtOffset(m_skip_size,
+                                                         m_element_type, true);
+    if (!iterated_sp) {
+      m_tree = nullptr;
+      return lldb::ValueObjectSP();
+    }
   }
+
   // at this point we have a valid
   // we need to copy current_sp into a new object otherwise we will end up with
   // all items named __value_


        


More information about the lldb-commits mailing list