From c76b97bccee90727a419724d57fb270f08dc6f5f Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Fri, 26 Apr 2013 00:59:02 +0000 Subject: [PATCH] Make a synthetic children provider for the ObjC Class type llvm-svn: 180588 --- .../DataFormatters/CXXFormatterFunctions.h | 2 + .../DataFormatters/CXXFormatterFunctions.cpp | 50 +++++++++++++++++++ lldb/source/DataFormatters/FormatManager.cpp | 5 ++ 3 files changed, 57 insertions(+) diff --git a/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h b/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h index 00f2be0ae3a8..fe5d69cc7b63 100644 --- a/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h +++ b/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h @@ -81,6 +81,8 @@ namespace lldb_private { bool ObjCClassSummaryProvider (ValueObject& valobj, Stream& stream); + SyntheticChildrenFrontEnd* ObjCClassSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP); + template bool NSDictionarySummaryProvider (ValueObject& valobj, Stream& stream); diff --git a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp index 8f3c0ef02589..69e2f6a04dab 100644 --- a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp +++ b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp @@ -761,6 +761,56 @@ lldb_private::formatters::ObjCClassSummaryProvider (ValueObject& valobj, Stream& return true; } +class ObjCClassSyntheticChildrenFrontEnd : public SyntheticChildrenFrontEnd +{ +public: + ObjCClassSyntheticChildrenFrontEnd (lldb::ValueObjectSP valobj_sp) : + SyntheticChildrenFrontEnd(*valobj_sp.get()) + { + } + + virtual size_t + CalculateNumChildren () + { + return 0; + } + + virtual lldb::ValueObjectSP + GetChildAtIndex (size_t idx) + { + return lldb::ValueObjectSP(); + } + + virtual bool + Update() + { + return false; + } + + virtual bool + MightHaveChildren () + { + return false; + } + + virtual size_t + GetIndexOfChildWithName (const ConstString &name) + { + return UINT32_MAX; + } + + virtual + ~ObjCClassSyntheticChildrenFrontEnd () + { + } +}; + +SyntheticChildrenFrontEnd* +lldb_private::formatters::ObjCClassSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp) +{ + return new ObjCClassSyntheticChildrenFrontEnd(valobj_sp); +} + template bool lldb_private::formatters::NSDataSummaryProvider (ValueObject& valobj, Stream& stream) diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp index adc3a9c31c45..ab10d96ad955 100644 --- a/lldb/source/DataFormatters/FormatManager.cpp +++ b/lldb/source/DataFormatters/FormatManager.cpp @@ -770,6 +770,11 @@ FormatManager::LoadObjCFormatters() AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider, "SEL summary provider", ConstString("SEL *"), objc_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCClassSummaryProvider, "Class summary provider", ConstString("Class"), objc_flags); + + SyntheticChildren::Flags class_synth_flags; + class_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false); + + AddCXXSynthetic(objc_category_sp, lldb_private::formatters::ObjCClassSyntheticFrontEndCreator, "Class synthetic children", ConstString("Class"), class_synth_flags); #endif // LLDB_DISABLE_PYTHON objc_flags.SetSkipPointers(false);