From c28b3e888307b64cbccb481006a9105ed85f5dab Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Mon, 11 Apr 2016 18:46:37 +0000 Subject: Add support for additional NSArray formatters llvm-svn: 265979 --- lldb/source/Plugins/Language/ObjC/Cocoa.h | 11 +++++++++ lldb/source/Plugins/Language/ObjC/NSArray.cpp | 32 +++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) (limited to 'lldb/source/Plugins/Language/ObjC') diff --git a/lldb/source/Plugins/Language/ObjC/Cocoa.h b/lldb/source/Plugins/Language/ObjC/Cocoa.h index be3f3599133..f43b1639cb3 100644 --- a/lldb/source/Plugins/Language/ObjC/Cocoa.h +++ b/lldb/source/Plugins/Language/ObjC/Cocoa.h @@ -13,6 +13,7 @@ #include "lldb/Core/Stream.h" #include "lldb/Core/ValueObject.h" #include "lldb/DataFormatters/TypeSummary.h" +#include "lldb/DataFormatters/TypeSynthetic.h" #include "lldb/Target/ObjCLanguageRuntime.h" namespace lldb_private { @@ -88,6 +89,16 @@ namespace lldb_private { SyntheticChildrenFrontEnd* NSExceptionSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp); + + class NSArray_Additionals + { + public: + static std::map& + GetAdditionalSummaries (); + + static std::map& + GetAdditionalSynthetics (); + }; } // namespace formatters } // namespace lldb_private diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp index b9b4b9a20e9..7f29c190e27 100644 --- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp @@ -35,6 +35,20 @@ using namespace lldb_private::formatters; namespace lldb_private { namespace formatters { + std::map& + NSArray_Additionals::GetAdditionalSummaries () + { + static std::map g_map; + return g_map; + } + + std::map& + NSArray_Additionals::GetAdditionalSynthetics () + { + static std::map g_map; + return g_map; + } + class NSArrayMSyntheticFrontEnd : public SyntheticChildrenFrontEnd { public: @@ -322,7 +336,14 @@ lldb_private::formatters::NSArraySummaryProvider (ValueObject& valobj, Stream& s 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 @@ lldb_private::formatters::NSArray1SyntheticFrontEnd::GetChildAtIndex (size_t idx 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 @@ SyntheticChildrenFrontEnd* lldb_private::formatters::NSArraySyntheticFrontEndCre 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; } -- cgit v1.2.3