diff options
author | Enrico Granata <egranata@apple.com> | 2016-02-29 21:06:50 +0000 |
---|---|---|
committer | Enrico Granata <egranata@apple.com> | 2016-02-29 21:06:50 +0000 |
commit | 936499ae4cdb4f4601e7c0561be4fdd8a05fb04e (patch) | |
tree | e13ec0486f4aa93c27db533c4b0d8e6354a46449 | |
parent | 9e5a9c32db75bbffa874a87d9835c61cff1ee5cd (diff) | |
download | bcm5719-llvm-936499ae4cdb4f4601e7c0561be4fdd8a05fb04e.tar.gz bcm5719-llvm-936499ae4cdb4f4601e7c0561be4fdd8a05fb04e.zip |
Add an LLDB data formatter for single-element NSArray and NSDictionary Cocoa containers
Fixes rdar://23715118
llvm-svn: 262254
-rw-r--r-- | lldb/include/lldb/Core/ValueObject.h | 5 | ||||
-rw-r--r-- | lldb/include/lldb/Core/ValueObjectConstResult.h | 5 | ||||
-rw-r--r-- | lldb/include/lldb/Core/ValueObjectConstResultCast.h | 3 | ||||
-rw-r--r-- | lldb/include/lldb/Core/ValueObjectConstResultChild.h | 5 | ||||
-rw-r--r-- | lldb/include/lldb/Core/ValueObjectConstResultImpl.h | 5 | ||||
-rw-r--r-- | lldb/source/Core/ValueObject.cpp | 14 | ||||
-rw-r--r-- | lldb/source/Core/ValueObjectConstResult.cpp | 7 | ||||
-rw-r--r-- | lldb/source/Core/ValueObjectConstResultCast.cpp | 5 | ||||
-rw-r--r-- | lldb/source/Core/ValueObjectConstResultChild.cpp | 10 | ||||
-rw-r--r-- | lldb/source/Core/ValueObjectConstResultImpl.cpp | 10 | ||||
-rw-r--r-- | lldb/source/Plugins/Language/ObjC/NSArray.cpp | 111 | ||||
-rw-r--r-- | lldb/source/Plugins/Language/ObjC/NSDictionary.cpp | 158 | ||||
-rw-r--r-- | lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp | 4 |
13 files changed, 300 insertions, 42 deletions
diff --git a/lldb/include/lldb/Core/ValueObject.h b/lldb/include/lldb/Core/ValueObject.h index c066cc7d366..dee6388983b 100644 --- a/lldb/include/lldb/Core/ValueObject.h +++ b/lldb/include/lldb/Core/ValueObject.h @@ -699,7 +699,10 @@ public: GetSyntheticExpressionPathChild(const char* expression, bool can_create); virtual lldb::ValueObjectSP - GetSyntheticChildAtOffset(uint32_t offset, const CompilerType& type, bool can_create); + GetSyntheticChildAtOffset(uint32_t offset, + const CompilerType& type, + bool can_create, + ConstString name_const_str = ConstString()); virtual lldb::ValueObjectSP GetSyntheticBase (uint32_t offset, const CompilerType& type, bool can_create); diff --git a/lldb/include/lldb/Core/ValueObjectConstResult.h b/lldb/include/lldb/Core/ValueObjectConstResult.h index f63ee83284d..892df8c62cc 100644 --- a/lldb/include/lldb/Core/ValueObjectConstResult.h +++ b/lldb/include/lldb/Core/ValueObjectConstResult.h @@ -97,7 +97,10 @@ public: CreateChildAtIndex(size_t idx, bool synthetic_array_member, int32_t synthetic_index) override; lldb::ValueObjectSP - GetSyntheticChildAtOffset(uint32_t offset, const CompilerType& type, bool can_create) override; + GetSyntheticChildAtOffset(uint32_t offset, + const CompilerType& type, + bool can_create, + ConstString name_const_str = ConstString()) override; lldb::ValueObjectSP AddressOf(Error &error) override; diff --git a/lldb/include/lldb/Core/ValueObjectConstResultCast.h b/lldb/include/lldb/Core/ValueObjectConstResultCast.h index 395820dad6c..84dd79213d0 100644 --- a/lldb/include/lldb/Core/ValueObjectConstResultCast.h +++ b/lldb/include/lldb/Core/ValueObjectConstResultCast.h @@ -47,7 +47,8 @@ public: lldb::ValueObjectSP GetSyntheticChildAtOffset(uint32_t offset, const CompilerType& type, - bool can_create) override; + bool can_create, + ConstString name_const_str = ConstString()) override; lldb::ValueObjectSP AddressOf (Error &error) override; diff --git a/lldb/include/lldb/Core/ValueObjectConstResultChild.h b/lldb/include/lldb/Core/ValueObjectConstResultChild.h index 356d175a64a..e4a238a96c8 100644 --- a/lldb/include/lldb/Core/ValueObjectConstResultChild.h +++ b/lldb/include/lldb/Core/ValueObjectConstResultChild.h @@ -53,7 +53,10 @@ public: } lldb::ValueObjectSP - GetSyntheticChildAtOffset(uint32_t offset, const CompilerType& type, bool can_create) override; + GetSyntheticChildAtOffset(uint32_t offset, + const CompilerType& type, + bool can_create, + ConstString name_const_str = ConstString()) override; lldb::ValueObjectSP AddressOf (Error &error) override; diff --git a/lldb/include/lldb/Core/ValueObjectConstResultImpl.h b/lldb/include/lldb/Core/ValueObjectConstResultImpl.h index 36b82f00a24..848a221c3d0 100644 --- a/lldb/include/lldb/Core/ValueObjectConstResultImpl.h +++ b/lldb/include/lldb/Core/ValueObjectConstResultImpl.h @@ -39,7 +39,10 @@ public: CreateChildAtIndex (size_t idx, bool synthetic_array_member, int32_t synthetic_index); lldb::ValueObjectSP - GetSyntheticChildAtOffset (uint32_t offset, const CompilerType& type, bool can_create); + GetSyntheticChildAtOffset (uint32_t offset, + const CompilerType& type, + bool can_create, + ConstString name_const_str = ConstString()); lldb::ValueObjectSP AddressOf (Error &error); diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index a7cad8483c5..ff033d66bf2 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -2174,14 +2174,20 @@ ValueObject::GetSyntheticBitFieldChild (uint32_t from, uint32_t to, bool can_cre } ValueObjectSP -ValueObject::GetSyntheticChildAtOffset(uint32_t offset, const CompilerType& type, bool can_create) +ValueObject::GetSyntheticChildAtOffset(uint32_t offset, + const CompilerType& type, + bool can_create, + ConstString name_const_str) { ValueObjectSP synthetic_child_sp; - char name_str[64]; - snprintf(name_str, sizeof(name_str), "@%i", offset); - ConstString name_const_str(name_str); + if (name_const_str.IsEmpty()) + { + char name_str[64]; + snprintf(name_str, sizeof(name_str), "@%i", offset); + name_const_str.SetCString(name_str); + } // Check if we have already created a synthetic array member in this // valid object. If we have we will re-use it. diff --git a/lldb/source/Core/ValueObjectConstResult.cpp b/lldb/source/Core/ValueObjectConstResult.cpp index a0f1737a861..441cee540f7 100644 --- a/lldb/source/Core/ValueObjectConstResult.cpp +++ b/lldb/source/Core/ValueObjectConstResult.cpp @@ -314,9 +314,12 @@ ValueObjectConstResult::Dereference (Error &error) } lldb::ValueObjectSP -ValueObjectConstResult::GetSyntheticChildAtOffset(uint32_t offset, const CompilerType& type, bool can_create) +ValueObjectConstResult::GetSyntheticChildAtOffset(uint32_t offset, + const CompilerType& type, + bool can_create, + ConstString name_const_str) { - return m_impl.GetSyntheticChildAtOffset(offset, type, can_create); + return m_impl.GetSyntheticChildAtOffset(offset, type, can_create, name_const_str); } lldb::ValueObjectSP diff --git a/lldb/source/Core/ValueObjectConstResultCast.cpp b/lldb/source/Core/ValueObjectConstResultCast.cpp index 8f0c0f1522f..1611503c4bf 100644 --- a/lldb/source/Core/ValueObjectConstResultCast.cpp +++ b/lldb/source/Core/ValueObjectConstResultCast.cpp @@ -40,9 +40,10 @@ ValueObjectConstResultCast::Dereference (Error &error) lldb::ValueObjectSP ValueObjectConstResultCast::GetSyntheticChildAtOffset(uint32_t offset, const CompilerType& type, - bool can_create) + bool can_create, + ConstString name_const_str) { - return m_impl.GetSyntheticChildAtOffset(offset, type, can_create); + return m_impl.GetSyntheticChildAtOffset(offset, type, can_create, name_const_str); } lldb::ValueObjectSP diff --git a/lldb/source/Core/ValueObjectConstResultChild.cpp b/lldb/source/Core/ValueObjectConstResultChild.cpp index c93aedc2260..e3afa36351a 100644 --- a/lldb/source/Core/ValueObjectConstResultChild.cpp +++ b/lldb/source/Core/ValueObjectConstResultChild.cpp @@ -57,9 +57,15 @@ ValueObjectConstResultChild::Dereference (Error &error) } lldb::ValueObjectSP -ValueObjectConstResultChild::GetSyntheticChildAtOffset(uint32_t offset, const CompilerType& type, bool can_create) +ValueObjectConstResultChild::GetSyntheticChildAtOffset(uint32_t offset, + const CompilerType& type, + bool can_create, + ConstString name_const_str) { - return m_impl.GetSyntheticChildAtOffset(offset, type, can_create); + return m_impl.GetSyntheticChildAtOffset(offset, + type, + can_create, + name_const_str); } lldb::ValueObjectSP diff --git a/lldb/source/Core/ValueObjectConstResultImpl.cpp b/lldb/source/Core/ValueObjectConstResultImpl.cpp index 85ac3f2c5fe..6db7f184da8 100644 --- a/lldb/source/Core/ValueObjectConstResultImpl.cpp +++ b/lldb/source/Core/ValueObjectConstResultImpl.cpp @@ -117,12 +117,18 @@ ValueObjectConstResultImpl::CreateChildAtIndex (size_t idx, bool synthetic_array } lldb::ValueObjectSP -ValueObjectConstResultImpl::GetSyntheticChildAtOffset (uint32_t offset, const CompilerType& type, bool can_create) +ValueObjectConstResultImpl::GetSyntheticChildAtOffset (uint32_t offset, + const CompilerType& type, + bool can_create, + ConstString name_const_str) { if (m_impl_backend == NULL) return lldb::ValueObjectSP(); - return m_impl_backend->ValueObject::GetSyntheticChildAtOffset(offset, type, can_create); + return m_impl_backend->ValueObject::GetSyntheticChildAtOffset(offset, + type, + can_create, + name_const_str); } lldb::ValueObjectSP diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp index a1bce4defe6..c28821788ac 100644 --- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp @@ -227,6 +227,29 @@ namespace lldb_private { size_t GetIndexOfChildWithName(const ConstString &name) override; }; + + class NSArray1SyntheticFrontEnd : public SyntheticChildrenFrontEnd + { + public: + NSArray1SyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); + + ~NSArray1SyntheticFrontEnd() override = default; + + size_t + CalculateNumChildren() override; + + lldb::ValueObjectSP + GetChildAtIndex(size_t idx) override; + + bool + Update() override; + + bool + MightHaveChildren() override; + + size_t + GetIndexOfChildWithName(const ConstString &name) override; + }; } // namespace formatters } // namespace lldb_private @@ -258,30 +281,40 @@ lldb_private::formatters::NSArraySummaryProvider (ValueObject& valobj, Stream& s uint64_t value = 0; - const char* class_name = descriptor->GetClassName().GetCString(); + ConstString class_name(descriptor->GetClassName()); + + static const ConstString g_NSArrayI("__NSArrayI"); + static const ConstString g_NSArrayM("__NSArrayM"); + static const ConstString g_NSArray0("__NSArray0"); + static const ConstString g_NSArray1("__NSSingleObjectArrayI"); + static const ConstString g_NSArrayCF("__NSCFArray"); - if (!class_name || !*class_name) + if (class_name.IsEmpty()) return false; - if (!strcmp(class_name,"__NSArrayI")) + if (class_name == g_NSArrayI) { Error error; value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + ptr_size, ptr_size, 0, error); if (error.Fail()) return false; } - else if (!strcmp(class_name,"__NSArrayM")) + else if (class_name == g_NSArrayM) { Error error; value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + ptr_size, ptr_size, 0, error); if (error.Fail()) return false; } - else if (!strcmp(class_name,"__NSArray0")) + else if (class_name == g_NSArray0) { value = 0; } - else if (!strcmp(class_name,"__NSCFArray")) + else if (class_name == g_NSArray1) + { + value = 1; + } + else if (class_name == g_NSArrayCF) { Error error; value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + 2 * ptr_size, ptr_size, 0, error); @@ -666,6 +699,53 @@ lldb_private::formatters::NSArray0SyntheticFrontEnd::GetChildAtIndex (size_t idx return lldb::ValueObjectSP(); } +lldb_private::formatters::NSArray1SyntheticFrontEnd::NSArray1SyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : +SyntheticChildrenFrontEnd (*valobj_sp.get()) +{ +} + +size_t +lldb_private::formatters::NSArray1SyntheticFrontEnd::GetIndexOfChildWithName (const ConstString &name) +{ + static const ConstString g_zero("[0]"); + + if (name == g_zero) + return 0; + + return UINT32_MAX; +} + +size_t +lldb_private::formatters::NSArray1SyntheticFrontEnd::CalculateNumChildren () +{ + return 1; +} + +bool +lldb_private::formatters::NSArray1SyntheticFrontEnd::Update() +{ + return false; +} + +bool +lldb_private::formatters::NSArray1SyntheticFrontEnd::MightHaveChildren () +{ + return true; +} + +lldb::ValueObjectSP +lldb_private::formatters::NSArray1SyntheticFrontEnd::GetChildAtIndex (size_t idx) +{ + static const ConstString g_zero("[0]"); + + if (idx == 0) + { + CompilerType id_type(m_backend.GetTargetSP()->GetScratchClangASTContext()->GetBasicType(lldb::eBasicTypeObjCID)); + return m_backend.GetSyntheticChildAtOffset(m_backend.GetProcessSP()->GetAddressByteSize(), id_type, true, g_zero); + } + return lldb::ValueObjectSP(); +} + SyntheticChildrenFrontEnd* lldb_private::formatters::NSArraySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp) { if (!valobj_sp) @@ -694,20 +774,29 @@ SyntheticChildrenFrontEnd* lldb_private::formatters::NSArraySyntheticFrontEndCre if (!descriptor || !descriptor->IsValid()) return nullptr; - const char* class_name = descriptor->GetClassName().GetCString(); + ConstString class_name(descriptor->GetClassName()); - if (!class_name || !*class_name) + static const ConstString g_NSArrayI("__NSArrayI"); + static const ConstString g_NSArrayM("__NSArrayM"); + static const ConstString g_NSArray0("__NSArray0"); + static const ConstString g_NSArray1("__NSSingleObjectArrayI"); + + if (class_name.IsEmpty()) return nullptr; - if (!strcmp(class_name,"__NSArrayI")) + if (class_name == g_NSArrayI) { return (new NSArrayISyntheticFrontEnd(valobj_sp)); } - else if (!strcmp(class_name,"__NSArray0")) + else if (class_name == g_NSArrayM) { return (new NSArray0SyntheticFrontEnd(valobj_sp)); } - else if (!strcmp(class_name,"__NSArrayM")) + else if (class_name == g_NSArray1) + { + return (new NSArray1SyntheticFrontEnd(valobj_sp)); + } + else if (class_name == g_NSArrayM) { if (runtime->GetFoundationVersion() >= 1100) return (new NSArrayMSyntheticFrontEnd_1010(valobj_sp)); diff --git a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp index 627eb2cef7a..f18cd685c8c 100644 --- a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp @@ -131,6 +131,32 @@ namespace lldb_private { CompilerType m_pair_type; std::vector<DictionaryItemDescriptor> m_children; }; + + class NSDictionary1SyntheticFrontEnd : public SyntheticChildrenFrontEnd + { + public: + NSDictionary1SyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); + + ~NSDictionary1SyntheticFrontEnd() override = default; + + size_t + CalculateNumChildren() override; + + lldb::ValueObjectSP + GetChildAtIndex(size_t idx) override; + + bool + Update() override; + + bool + MightHaveChildren() override; + + size_t + GetIndexOfChildWithName(const ConstString &name) override; + + private: + ValueObjectSP m_pair; + }; class NSDictionaryMSyntheticFrontEnd : public SyntheticChildrenFrontEnd { @@ -222,13 +248,16 @@ lldb_private::formatters::NSDictionarySummaryProvider (ValueObject& valobj, Stre uint64_t value = 0; - ConstString class_name_cs = descriptor->GetClassName(); - const char* class_name = class_name_cs.GetCString(); - - if (!class_name || !*class_name) - return false; + ConstString class_name(descriptor->GetClassName()); + + static const ConstString g_DictionaryI("__NSDictionaryI"); + static const ConstString g_DictionaryM("__NSDictionaryM"); + static const ConstString g_Dictionary1("__NSSingleEntryDictionaryI"); - if (!strcmp(class_name,"__NSDictionaryI")) + if (class_name.IsEmpty()) + return nullptr; + + if (class_name == g_DictionaryI) { Error error; value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + ptr_size, ptr_size, 0, error); @@ -236,7 +265,7 @@ lldb_private::formatters::NSDictionarySummaryProvider (ValueObject& valobj, Stre return false; value &= (is_64bit ? ~0xFC00000000000000UL : ~0xFC000000U); } - else if (!strcmp(class_name,"__NSDictionaryM")) + else if (class_name == g_DictionaryM) { Error error; value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + ptr_size, ptr_size, 0, error); @@ -244,6 +273,10 @@ lldb_private::formatters::NSDictionarySummaryProvider (ValueObject& valobj, Stre return false; value &= (is_64bit ? ~0xFC00000000000000UL : ~0xFC000000U); } + else if (class_name == g_Dictionary1) + { + value = 1; + } /*else if (!strcmp(class_name,"__NSCFDictionary")) { Error error; @@ -256,7 +289,7 @@ lldb_private::formatters::NSDictionarySummaryProvider (ValueObject& valobj, Stre else { auto& map(NSDictionary_Additionals::GetAdditionalSummaries()); - auto iter = map.find(class_name_cs), end = map.end(); + auto iter = map.find(class_name), end = map.end(); if (iter != end) return iter->second(valobj, stream, options); else @@ -307,24 +340,31 @@ SyntheticChildrenFrontEnd* lldb_private::formatters::NSDictionarySyntheticFrontE if (!descriptor || !descriptor->IsValid()) return nullptr; - ConstString class_name_cs = descriptor->GetClassName(); - const char* class_name = class_name_cs.GetCString(); + ConstString class_name(descriptor->GetClassName()); + + static const ConstString g_DictionaryI("__NSDictionaryI"); + static const ConstString g_DictionaryM("__NSDictionaryM"); + static const ConstString g_Dictionary1("__NSSingleEntryDictionaryI"); - if (!class_name || !*class_name) + if (class_name.IsEmpty()) return nullptr; - if (!strcmp(class_name,"__NSDictionaryI")) + if (class_name == g_DictionaryI) { return (new NSDictionaryISyntheticFrontEnd(valobj_sp)); } - else if (!strcmp(class_name,"__NSDictionaryM")) + else if (class_name == g_DictionaryM) { return (new NSDictionaryMSyntheticFrontEnd(valobj_sp)); } + else if (class_name == g_Dictionary1) + { + return (new NSDictionary1SyntheticFrontEnd(valobj_sp)); + } else { auto& map(NSDictionary_Additionals::GetAdditionalSynthetics()); - auto iter = map.find(class_name_cs), end = map.end(); + auto iter = map.find(class_name), end = map.end(); if (iter != end) return iter->second(synth, valobj_sp); } @@ -497,6 +537,96 @@ lldb_private::formatters::NSDictionaryISyntheticFrontEnd::GetChildAtIndex (size_ return dict_item.valobj_sp; } +lldb_private::formatters::NSDictionary1SyntheticFrontEnd::NSDictionary1SyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : +SyntheticChildrenFrontEnd(*valobj_sp.get()), +m_pair(nullptr) +{ +} + +size_t +lldb_private::formatters::NSDictionary1SyntheticFrontEnd::GetIndexOfChildWithName (const ConstString &name) +{ + static const ConstString g_zero("[0]"); + + if (name == g_zero) + return 0; + + return UINT32_MAX; +} + +size_t +lldb_private::formatters::NSDictionary1SyntheticFrontEnd::CalculateNumChildren () +{ + return 1; +} + +bool +lldb_private::formatters::NSDictionary1SyntheticFrontEnd::Update() +{ + m_pair.reset(); + return false; +} + +bool +lldb_private::formatters::NSDictionary1SyntheticFrontEnd::MightHaveChildren () +{ + return true; +} + +lldb::ValueObjectSP +lldb_private::formatters::NSDictionary1SyntheticFrontEnd::GetChildAtIndex (size_t idx) +{ + if (idx != 0) + return lldb::ValueObjectSP(); + + if (m_pair.get()) + return m_pair; + + auto process_sp(m_backend.GetProcessSP()); + if (!process_sp) + return nullptr; + + auto ptr_size = process_sp->GetAddressByteSize(); + + lldb::addr_t key_ptr = m_backend.GetValueAsUnsigned(LLDB_INVALID_ADDRESS) + ptr_size; + lldb::addr_t value_ptr = key_ptr + ptr_size; + + Error error; + + lldb::addr_t key_at_idx = process_sp->ReadPointerFromMemory(key_ptr, error); + if (error.Fail()) + return nullptr; + lldb::addr_t value_at_idx = process_sp->ReadPointerFromMemory(value_ptr, error); + if (error.Fail()) + return nullptr; + + auto pair_type = GetLLDBNSPairType(process_sp->GetTarget().shared_from_this()); + + DataBufferSP buffer_sp(new DataBufferHeap(2*ptr_size,0)); + + if (ptr_size == 8) + { + uint64_t *data_ptr = (uint64_t *)buffer_sp->GetBytes(); + *data_ptr = key_at_idx; + *(data_ptr+1) = value_at_idx; + } + else + { + uint32_t *data_ptr = (uint32_t *)buffer_sp->GetBytes(); + *data_ptr = key_ptr; + *(data_ptr+1) = value_ptr; + } + + DataExtractor data(buffer_sp, process_sp->GetByteOrder(), ptr_size); + m_pair = CreateValueObjectFromData("[0]", + data, + m_backend.GetExecutionContextRef(), + pair_type); + + + return m_pair; +} + lldb_private::formatters::NSDictionaryMSyntheticFrontEnd::NSDictionaryMSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : SyntheticChildrenFrontEnd(*valobj_sp), m_exe_ctx_ref(), diff --git a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp index 90e75822cd7..38951402f3a 100644 --- a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp +++ b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp @@ -453,6 +453,7 @@ LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) 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("__NSSingleObjectArrayI"), 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); @@ -462,6 +463,7 @@ LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) AddCXXSummary(objc_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("NSMutableDictionary"), appkit_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSCFDictionary"), appkit_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSDictionaryI"), appkit_flags); + AddCXXSummary(objc_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSSingleEntryDictionaryI"), appkit_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSDictionaryM"), appkit_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<true>, "NSDictionary summary provider", ConstString("CFDictionaryRef"), appkit_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<true>, "NSDictionary summary provider", ConstString("CFMutableDictionaryRef"), appkit_flags); @@ -489,6 +491,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("__NSSingleObjectArrayI"), 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()); @@ -497,6 +500,7 @@ LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryM"), ScriptedSyntheticChildren::Flags()); AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryI"), ScriptedSyntheticChildren::Flags()); + AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSSingleEntryDictionaryI"), ScriptedSyntheticChildren::Flags()); AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSCFDictionary"), ScriptedSyntheticChildren::Flags()); AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSDictionary"), ScriptedSyntheticChildren::Flags()); AddCXXSynthetic(objc_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSMutableDictionary"), ScriptedSyntheticChildren::Flags()); |