diff options
Diffstat (limited to 'lldb/source/DataFormatters/NSSet.cpp')
-rw-r--r-- | lldb/source/DataFormatters/NSSet.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/lldb/source/DataFormatters/NSSet.cpp b/lldb/source/DataFormatters/NSSet.cpp index 3ba02af4f0d..a6e37dd0213 100644 --- a/lldb/source/DataFormatters/NSSet.cpp +++ b/lldb/source/DataFormatters/NSSet.cpp @@ -144,6 +144,10 @@ SyntheticChildrenFrontEnd* lldb_private::formatters::NSSetSyntheticFrontEndCreat { return (new NSSetMSyntheticFrontEnd(valobj_sp)); } + else if ((!strcmp(class_name,"__NSOrderedSetI")) || (!strcmp(class_name,"__NSOrderedSetM"))) + { + return new NSOrderedSetSyntheticFrontEnd(valobj_sp); // this runs code + } else { return /*(new NSSetCodeRunningSyntheticFrontEnd(valobj_sp))*/ NULL; @@ -435,6 +439,73 @@ lldb_private::formatters::NSSetMSyntheticFrontEnd::GetChildAtIndex (size_t idx) return set_item.valobj_sp; } +lldb_private::formatters::NSOrderedSetSyntheticFrontEnd::NSOrderedSetSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : +SyntheticChildrenFrontEnd(*valobj_sp.get()), +m_count(UINT32_MAX), +m_children() +{} + +size_t +lldb_private::formatters::NSOrderedSetSyntheticFrontEnd::CalculateNumChildren () +{ + if (m_count != UINT32_MAX) + return m_count; + uint64_t count_temp; + if (ExtractValueFromObjCExpression(m_backend,"unsigned int","count",count_temp)) + return (m_count = count_temp); + return (m_count = 0); +} + +lldb::ValueObjectSP +lldb_private::formatters::NSOrderedSetSyntheticFrontEnd::GetChildAtIndex (size_t idx) +{ + auto iter = m_children.find(idx); + if (iter == m_children.end()) + { + lldb::ValueObjectSP retval_sp; + if (idx <= m_count) + { + retval_sp = CallSelectorOnObject(m_backend, "id", "objectAtIndex", idx); + if (retval_sp) + { + StreamString idx_name; + idx_name.Printf("[%zu]",idx); + retval_sp->SetName(ConstString(idx_name.GetData())); + } + m_children[idx] = retval_sp; + } + return retval_sp; + } + else + return iter->second; +} + +bool +lldb_private::formatters::NSOrderedSetSyntheticFrontEnd::Update() +{ + return false; +} + +bool +lldb_private::formatters::NSOrderedSetSyntheticFrontEnd::MightHaveChildren () +{ + return true; +} + +size_t +lldb_private::formatters::NSOrderedSetSyntheticFrontEnd::GetIndexOfChildWithName (const ConstString &name) +{ + const char* item_name = name.GetCString(); + uint32_t idx = ExtractIndexFromString(item_name); + if (idx < UINT32_MAX && idx >= CalculateNumChildren()) + return UINT32_MAX; + return idx; +} + +lldb_private::formatters::NSOrderedSetSyntheticFrontEnd::~NSOrderedSetSyntheticFrontEnd () +{ +} + template bool lldb_private::formatters::NSSetSummaryProvider<true> (ValueObject& valobj, Stream& stream); |