[Lldb-commits] [lldb] r178076 - <rdar://problem/13339196>

Enrico Granata egranata at apple.com
Tue Mar 26 14:44:13 PDT 2013


Author: enrico
Date: Tue Mar 26 16:44:13 2013
New Revision: 178076

URL: http://llvm.org/viewvc/llvm-project?rev=178076&view=rev
Log:
<rdar://problem/13339196>

The algorithm to access an item in a __NSArrayM was not reacting properly to deletions
The fix is to use a smarter formula that accounts for items shifting and the resulting notion of offsets in the table

Modified:
    lldb/trunk/source/DataFormatters/NSArray.cpp

Modified: lldb/trunk/source/DataFormatters/NSArray.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/NSArray.cpp?rev=178076&r1=178075&r2=178076&view=diff
==============================================================================
--- lldb/trunk/source/DataFormatters/NSArray.cpp (original)
+++ lldb/trunk/source/DataFormatters/NSArray.cpp Tue Mar 26 16:44:13 2013
@@ -121,7 +121,11 @@ lldb_private::formatters::NSArrayMSynthe
     if (idx >= CalculateNumChildren())
         return lldb::ValueObjectSP();
     lldb::addr_t object_at_idx = (m_data_32 ? m_data_32->_data : m_data_64->_data);
-    object_at_idx += (idx * m_ptr_size);
+    size_t pyhs_idx = idx;
+    pyhs_idx += (m_data_32 ? m_data_32->offset : m_data_64->offset);
+    if ((m_data_32 ? m_data_32->_size : m_data_64->_size) <= pyhs_idx)
+        pyhs_idx -= (m_data_32 ? m_data_32->_size : m_data_64->_size);
+    object_at_idx += (pyhs_idx * m_ptr_size);
     StreamString idx_name;
     idx_name.Printf("[%zu]",idx);
     lldb::ValueObjectSP retval_sp = ValueObject::CreateValueObjectFromAddress(idx_name.GetData(),





More information about the lldb-commits mailing list