summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2013-04-26 00:59:02 +0000
committerEnrico Granata <egranata@apple.com>2013-04-26 00:59:02 +0000
commitc76b97bccee90727a419724d57fb270f08dc6f5f (patch)
tree159e6a22acaadaaff14fd42460ff52b37ca84d57
parentd813420816e0093d8498b2ede257ee358ba0a230 (diff)
downloadbcm5719-llvm-c76b97bccee90727a419724d57fb270f08dc6f5f.tar.gz
bcm5719-llvm-c76b97bccee90727a419724d57fb270f08dc6f5f.zip
Make a synthetic children provider for the ObjC Class type
llvm-svn: 180588
-rw-r--r--lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h2
-rw-r--r--lldb/source/DataFormatters/CXXFormatterFunctions.cpp50
-rw-r--r--lldb/source/DataFormatters/FormatManager.cpp5
3 files changed, 57 insertions, 0 deletions
diff --git a/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h b/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h
index 00f2be0ae3a..fe5d69cc7b6 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 name_entries>
bool
NSDictionarySummaryProvider (ValueObject& valobj, Stream& stream);
diff --git a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp
index 8f3c0ef0258..69e2f6a04da 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 needs_at>
bool
lldb_private::formatters::NSDataSummaryProvider (ValueObject& valobj, Stream& stream)
diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp
index adc3a9c31c4..ab10d96ad95 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<true>, "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);
OpenPOWER on IntegriCloud