[DataFormatters] Implement summary for __NSDictionary0.

Before the patch:

(lldb) frame var emptyDictionary
(__NSDictionary0 *) emptyDictionary = 0x0000000100304420

After:

(lldb) frame var emptyDictionary
(__NSDictionary0 *) emptyDictionary = 0x0000000100304420 0 key/value pairs

There's nothing much else we can do, as this is always empty by
definition.

<rdar://problem/34806516>

llvm-svn: 327587
This commit is contained in:
Davide Italiano 2018-03-14 23:09:36 +00:00
parent 5df2db1216
commit 8f2e86da36
5 changed files with 24 additions and 0 deletions

View File

@ -0,0 +1,3 @@
breakpoint set --file NSDict.m --line 8
run
frame var

View File

@ -0,0 +1,9 @@
#include <Foundation/Foundation.h>
int main(void)
{
NSDictionary *emptyDictionary = [[NSDictionary alloc] init];
NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];
NSDictionary *dictionary = @{ @"key": @{} };
return 0;
}

View File

@ -0,0 +1,7 @@
# Test that foundation NSDictionary0 is formatted correctly (the summary).
# Foundation is only available on Darwin so just restrict the test to run there.
# REQUIRES: darwin
# RUN: %cc %p/Inputs/NSDict.m -framework Foundation -g -o %t && %lldb -b \
# RUN: -s %p/Inputs/NSDict.commands -- %t 2>&1 | FileCheck %s
# CHECK: (__NSDictionary0 *) emptyDictionary = {{.*}} 0 key/value pairs

View File

@ -0,0 +1 @@
config.suffixes = ['.test']

View File

@ -396,6 +396,7 @@ bool lldb_private::formatters::NSDictionarySummaryProvider(
static const ConstString g_DictionaryMLegacy("__NSDictionaryM_Legacy");
static const ConstString g_DictionaryMImmutable("__NSDictionaryM_Immutable");
static const ConstString g_Dictionary1("__NSSingleEntryDictionaryI");
static const ConstString g_Dictionary0("__NSDictionary0");
if (class_name.IsEmpty())
return false;
@ -423,6 +424,8 @@ bool lldb_private::formatters::NSDictionarySummaryProvider(
return false;
} else if (class_name == g_Dictionary1) {
value = 1;
} else if (class_name == g_Dictionary0) {
value = 0;
}
else {
auto &map(NSDictionary_Additionals::GetAdditionalSummaries());
@ -481,6 +484,7 @@ lldb_private::formatters::NSDictionarySyntheticFrontEndCreator(
static const ConstString g_Dictionary1("__NSSingleEntryDictionaryI");
static const ConstString g_DictionaryImmutable("__NSDictionaryM_Immutable");
static const ConstString g_DictionaryMLegacy("__NSDictionaryM_Legacy");
static const ConstString g_Dictionary0("__NSDictionary0");
if (class_name.IsEmpty())
return nullptr;