From df43d25fd366d96cd7af1ead8938ed0d2394e2fb Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Thu, 1 Sep 2016 18:09:01 +0000 Subject: Change the formula for tagged NSIndexPath data formatting Fixes rdar://25192935 llvm-svn: 280389 --- lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp | 40 ++++++++++++++++------- 1 file changed, 29 insertions(+), 11 deletions(-) (limited to 'lldb/source/Plugins/Language/ObjC') diff --git a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp index 0c8a54d76df..0bebaca256b 100644 --- a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp @@ -26,6 +26,18 @@ using namespace lldb; using namespace lldb_private; using namespace lldb_private::formatters; +static constexpr size_t +PACKED_INDEX_SHIFT_64(size_t i) +{ + return (60 - (13 * (4-i))); +} + +static constexpr size_t +PACKED_INDEX_SHIFT_32(size_t i) +{ + return (32 - (13 * (2-i))); +} + class NSIndexPathSyntheticFrontEnd : public SyntheticChildrenFrontEnd { public: @@ -284,23 +296,29 @@ protected: std::pair _indexAtPositionForInlinePayload(size_t pos) { + static const uint64_t PACKED_INDEX_MASK = ((1 << 13) - 1); 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}; + switch (pos) + { + case 3: + case 2: + case 1: + case 0: + return {(m_indexes >> PACKED_INDEX_SHIFT_64(pos)) & PACKED_INDEX_MASK,true}; + default: + 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}; + switch (pos) + { + case 0: + case 1: + return {(m_indexes >> PACKED_INDEX_SHIFT_32(pos)) & PACKED_INDEX_MASK,true}; + default: + return {0,false}; } } return {0,false}; -- cgit v1.2.3