summaryrefslogtreecommitdiffstats
path: root/lldb/source/DataFormatters/NSSet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/DataFormatters/NSSet.cpp')
-rw-r--r--lldb/source/DataFormatters/NSSet.cpp71
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);
OpenPOWER on IntegriCloud