Add support for additional NSArray formatters

llvm-svn: 265979
diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp
index b9b4b9a..7f29c19 100644
--- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp
@@ -35,6 +35,20 @@
 
 namespace  lldb_private {
     namespace formatters {
+        std::map<ConstString, CXXFunctionSummaryFormat::Callback>&
+        NSArray_Additionals::GetAdditionalSummaries ()
+        {
+            static std::map<ConstString, CXXFunctionSummaryFormat::Callback> g_map;
+            return g_map;
+        }
+        
+        std::map<ConstString, CXXSyntheticChildren::CreateFrontEndCallback>&
+        NSArray_Additionals::GetAdditionalSynthetics ()
+        {
+            static std::map<ConstString, CXXSyntheticChildren::CreateFrontEndCallback> g_map;
+            return g_map;
+        }
+        
         class NSArrayMSyntheticFrontEnd : public SyntheticChildrenFrontEnd
         {
         public:
@@ -322,7 +336,14 @@
             return false;
     }
     else
-        return false;
+    {
+        auto& map(NSArray_Additionals::GetAdditionalSummaries());
+        auto iter = map.find(class_name), end = map.end();
+        if (iter != end)
+            return iter->second(valobj, stream, options);
+        else
+            return false;
+    }
     
     std::string prefix,suffix;
     if (Language* language = Language::FindPlugin(options.GetLanguage()))
@@ -746,7 +767,7 @@
     return lldb::ValueObjectSP();
 }
 
-SyntheticChildrenFrontEnd* lldb_private::formatters::NSArraySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp)
+SyntheticChildrenFrontEnd* lldb_private::formatters::NSArraySyntheticFrontEndCreator (CXXSyntheticChildren* synth, lldb::ValueObjectSP valobj_sp)
 {
     if (!valobj_sp)
         return nullptr;
@@ -803,6 +824,13 @@
         else
             return (new NSArrayMSyntheticFrontEnd_109(valobj_sp));
     }
+    else
+    {
+        auto& map(NSArray_Additionals::GetAdditionalSynthetics());
+        auto iter = map.find(class_name), end = map.end();
+        if (iter != end)
+            return iter->second(synth, valobj_sp);
+    }
     
     return nullptr;
 }