Make a synthetic children provider for the ObjC Class type

llvm-svn: 180588
This commit is contained in:
Enrico Granata 2013-04-26 00:59:02 +00:00
parent d813420816
commit c76b97bcce
3 changed files with 57 additions and 0 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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);