[Lldb-commits] [lldb] r275199 - Tweaks to the NSIndexPath formatter to enhance stability

Enrico Granata via lldb-commits lldb-commits at lists.llvm.org
Tue Jul 12 11:33:53 PDT 2016


Author: enrico
Date: Tue Jul 12 13:33:52 2016
New Revision: 275199

URL: http://llvm.org/viewvc/llvm-project?rev=275199&view=rev
Log:
Tweaks to the NSIndexPath formatter to enhance stability

rdar://problem/25767901


Modified:
    lldb/trunk/source/Plugins/Language/ObjC/NSIndexPath.cpp

Modified: lldb/trunk/source/Plugins/Language/ObjC/NSIndexPath.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/NSIndexPath.cpp?rev=275199&r1=275198&r2=275199&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/ObjC/NSIndexPath.cpp (original)
+++ lldb/trunk/source/Plugins/Language/ObjC/NSIndexPath.cpp Tue Jul 12 13:33:52 2016
@@ -31,6 +31,8 @@ class NSIndexPathSyntheticFrontEnd : pub
 public:
     NSIndexPathSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) :
     SyntheticChildrenFrontEnd (*valobj_sp.get()),
+    m_descriptor_sp(nullptr),
+    m_impl(),
     m_ptr_size(0),
     m_uint_star_type()
     {
@@ -169,9 +171,8 @@ protected:
         Invalid
     };
     
-    struct Impl {
-        Mode m_mode;
-
+    struct Impl
+    {
         size_t
         GetNumIndexes ()
         {
@@ -200,48 +201,52 @@ protected:
                     return m_outsourced.GetIndexAtIndex (idx);
             }
         }
-
-        struct InlinedIndexes {
+        
+        struct InlinedIndexes
+        {
         public:
-          void SetIndexes(uint64_t value, Process& p)
-          {
-              m_indexes = value;
-              _lengthForInlinePayload(p.GetAddressByteSize());
-              m_process = &p;
-          }
-              
-          size_t
-          GetNumIndexes ()
-          {
-              return m_count;
-          }
-
-          lldb::ValueObjectSP
-          GetIndexAtIndex (size_t idx, const CompilerType& desired_type)
-          {
-              std::pair<uint64_t, bool> value(_indexAtPositionForInlinePayload(idx));
-              if (!value.second)
-                  return nullptr;
-              
-              Value v;
-              if (m_ptr_size == 8)
-              {
-                  Scalar scalar( (unsigned long long)value.first );
-                  v = Value(scalar);
-              }
-              else
-              {
-                  Scalar scalar( (unsigned int)value.first );
-                  v = Value(scalar);
-              }
-
-              v.SetCompilerType(desired_type);
-
-              StreamString idx_name;
-              idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
+            void SetIndexes(uint64_t value, Process& p)
+            {
+                m_indexes = value;
+                _lengthForInlinePayload(p.GetAddressByteSize());
+                m_process = &p;
+            }
+            
+            size_t
+            GetNumIndexes ()
+            {
+                return m_count;
+            }
+            
+            lldb::ValueObjectSP
+            GetIndexAtIndex (size_t idx, const CompilerType& desired_type)
+            {
+                if (!m_process)
+                    return nullptr;
 
-              return ValueObjectConstResult::Create(m_process, v, ConstString(idx_name.GetData()));
-          }
+                std::pair<uint64_t, bool> value(_indexAtPositionForInlinePayload(idx));
+                if (!value.second)
+                    return nullptr;
+                
+                Value v;
+                if (m_ptr_size == 8)
+                {
+                    Scalar scalar( (unsigned long long)value.first );
+                    v = Value(scalar);
+                }
+                else
+                {
+                    Scalar scalar( (unsigned int)value.first );
+                    v = Value(scalar);
+                }
+                
+                v.SetCompilerType(desired_type);
+                
+                StreamString idx_name;
+                idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
+                
+                return ValueObjectConstResult::Create(m_process, v, ConstString(idx_name.GetData()));
+            }
             
             void
             Clear ()
@@ -251,53 +256,60 @@ protected:
                 m_ptr_size = 0;
                 m_process = nullptr;
             }
-                    
+            
+            InlinedIndexes () :
+            m_indexes(0),
+            m_count(0),
+            m_ptr_size(0),
+            m_process(nullptr)
+            {
+            }
+            
         private:
-          uint64_t m_indexes;
-          size_t m_count;
-          uint32_t m_ptr_size;
-          Process *m_process;
-                    
-          // cfr. Foundation for the details of this code
-          size_t _lengthForInlinePayload(uint32_t ptr_size) {
-              m_ptr_size = ptr_size;
-              if (m_ptr_size == 8)
-              m_count = ((m_indexes >> 3) & 0x7);
-              else
-              m_count = ((m_indexes >> 3) & 0x3);
-              return m_count;
-          }
-                    
-          std::pair<uint64_t, bool>
-          _indexAtPositionForInlinePayload(size_t pos)
-          {
-              if (m_ptr_size == 8)
-              {
-                switch (pos) {
-                    case 5: return {((m_indexes >> 51) & 0x1ff),true};
-                    case 4: return {((m_indexes >> 42) & 0x1ff),true};
-                    case 3: return {((m_indexes >> 33) & 0x1ff),true};
-                    case 2: return {((m_indexes >> 24) & 0x1ff),true};
-                    case 1: return {((m_indexes >> 15) & 0x1ff),true};
-                    case 0: return {((m_indexes >>  6) & 0x1ff),true};
+            uint64_t m_indexes;
+            size_t m_count;
+            uint32_t m_ptr_size;
+            Process *m_process;
+            
+            // cfr. Foundation for the details of this code
+            size_t _lengthForInlinePayload(uint32_t ptr_size) {
+                m_ptr_size = ptr_size;
+                if (m_ptr_size == 8)
+                    m_count = ((m_indexes >> 3) & 0x7);
+                else
+                    m_count = ((m_indexes >> 3) & 0x3);
+                return m_count;
+            }
+            
+            std::pair<uint64_t, bool>
+            _indexAtPositionForInlinePayload(size_t pos)
+            {
+                if (m_ptr_size == 8)
+                {
+                    switch (pos) {
+                        case 5: return {((m_indexes >> 51) & 0x1ff),true};
+                        case 4: return {((m_indexes >> 42) & 0x1ff),true};
+                        case 3: return {((m_indexes >> 33) & 0x1ff),true};
+                        case 2: return {((m_indexes >> 24) & 0x1ff),true};
+                        case 1: return {((m_indexes >> 15) & 0x1ff),true};
+                        case 0: return {((m_indexes >>  6) & 0x1ff),true};
+                    }
                 }
-              }
-              else
-                  {
-                  switch (pos) {
-                      case 2: return {((m_indexes >> 23) & 0x1ff),true};
-                      case 1: return {((m_indexes >> 14) & 0x1ff),true};
-                      case 0: return {((m_indexes >>  5) & 0x1ff),true};
-                  }
-              }
-              return {0,false};
-          }
-
+                else
+                {
+                    switch (pos) {
+                        case 2: return {((m_indexes >> 23) & 0x1ff),true};
+                        case 1: return {((m_indexes >> 14) & 0x1ff),true};
+                        case 0: return {((m_indexes >>  5) & 0x1ff),true};
+                    }
+                }
+                return {0,false};
+            }
+            
         };
-        struct OutsourcedIndexes {
-            ValueObject *m_indexes;
-            size_t m_count;
-                    
+
+        struct OutsourcedIndexes
+        {
             lldb::ValueObjectSP
             GetIndexAtIndex (size_t idx)
             {
@@ -315,9 +327,19 @@ protected:
                 m_indexes = nullptr;
                 m_count = 0;
             }
+            
+            OutsourcedIndexes () :
+            m_indexes(nullptr),
+            m_count(0)
+            {
+            }
+            
+            ValueObject *m_indexes;
+            size_t m_count;
         };
-
-        union {
+        
+        union
+        {
             struct InlinedIndexes m_inlined;
             struct OutsourcedIndexes m_outsourced;
         };
@@ -329,6 +351,13 @@ protected:
             m_inlined.Clear();
             m_outsourced.Clear();
         }
+        
+        Impl() :
+        m_mode(Mode::Invalid)
+        {
+        }
+        
+        Mode m_mode;
     } m_impl;
     
     uint32_t m_ptr_size;




More information about the lldb-commits mailing list