diff options
3 files changed, 76 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp index 2a6c886ce20..675a91aad23 100644 --- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp @@ -202,6 +202,31 @@ namespace lldb_private { std::vector<lldb::ValueObjectSP> m_children; }; + class NSArray0SyntheticFrontEnd : public SyntheticChildrenFrontEnd + { + public: + NSArray0SyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); + + virtual size_t + CalculateNumChildren (); + + virtual lldb::ValueObjectSP + GetChildAtIndex (size_t idx); + + virtual bool + Update(); + + virtual bool + MightHaveChildren (); + + virtual size_t + GetIndexOfChildWithName (const ConstString &name); + + virtual + ~NSArray0SyntheticFrontEnd (); + private: + }; + class NSArrayCodeRunningSyntheticFrontEnd : public SyntheticChildrenFrontEnd { public: @@ -275,6 +300,10 @@ lldb_private::formatters::NSArraySummaryProvider (ValueObject& valobj, Stream& s if (error.Fail()) return false; } + else if (!strcmp(class_name,"__NSArray0")) + { + value = 0; + } else if (!strcmp(class_name,"__NSCFArray")) { Error error; @@ -632,6 +661,45 @@ lldb_private::formatters::NSArrayISyntheticFrontEnd::GetChildAtIndex (size_t idx return retval_sp; } +lldb_private::formatters::NSArray0SyntheticFrontEnd::NSArray0SyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : +SyntheticChildrenFrontEnd (*valobj_sp.get()) +{ +} + +lldb_private::formatters::NSArray0SyntheticFrontEnd::~NSArray0SyntheticFrontEnd () +{ +} + +size_t +lldb_private::formatters::NSArray0SyntheticFrontEnd::GetIndexOfChildWithName (const ConstString &name) +{ + return UINT32_MAX; +} + +size_t +lldb_private::formatters::NSArray0SyntheticFrontEnd::CalculateNumChildren () +{ + return 0; +} + +bool +lldb_private::formatters::NSArray0SyntheticFrontEnd::Update() +{ + return false; +} + +bool +lldb_private::formatters::NSArray0SyntheticFrontEnd::MightHaveChildren () +{ + return false; +} + +lldb::ValueObjectSP +lldb_private::formatters::NSArray0SyntheticFrontEnd::GetChildAtIndex (size_t idx) +{ + return lldb::ValueObjectSP(); +} + SyntheticChildrenFrontEnd* lldb_private::formatters::NSArraySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp) { if (!valobj_sp) @@ -669,6 +737,10 @@ SyntheticChildrenFrontEnd* lldb_private::formatters::NSArraySyntheticFrontEndCre { return (new NSArrayISyntheticFrontEnd(valobj_sp)); } + else if (!strcmp(class_name,"__NSArray0")) + { + return (new NSArray0SyntheticFrontEnd(valobj_sp)); + } else if (!strcmp(class_name,"__NSArrayM")) { if (runtime->GetFoundationVersion() >= 1100) diff --git a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp index 3995be919f8..a889507fd6e 100644 --- a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp +++ b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp @@ -446,6 +446,7 @@ LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) AddCXXSummary(objc_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSArray"), appkit_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSMutableArray"), appkit_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArrayI"), appkit_flags); + AddCXXSummary(objc_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArray0"), appkit_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArrayM"), appkit_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSCFArray"), appkit_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("CFArrayRef"), appkit_flags); @@ -478,6 +479,7 @@ LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArrayM"), ScriptedSyntheticChildren::Flags()); AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArrayI"), ScriptedSyntheticChildren::Flags()); + AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArray0"), ScriptedSyntheticChildren::Flags()); AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSArray"), ScriptedSyntheticChildren::Flags()); AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSMutableArray"), ScriptedSyntheticChildren::Flags()); AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSCFArray"), ScriptedSyntheticChildren::Flags()); diff --git a/lldb/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py b/lldb/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py index 99b87f34c13..eced5a13b77 100644 --- a/lldb/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py +++ b/lldb/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py @@ -229,6 +229,8 @@ class ObjCDataFormatterTestCase(TestBase): substrs = ['(CFMutableBagRef) mutable_bag_ref = ','@"17 values"', '(CFBagRef) cfbag_ref = ','@"15 values"', '(CFBinaryHeapRef) binheap_ref = ','@"21 items"']) + + self.expect('expression -d run -- [NSArray new]', substrs=['@"0 elements"']) def nsdata_data_formatter_commands(self): self.expect('frame variable immutableData mutableData data_ref mutable_data_ref mutable_string_ref', |

