summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2018-03-14 23:09:36 +0000
committerDavide Italiano <davide@freebsd.org>2018-03-14 23:09:36 +0000
commit8f2e86da36269ec23bb22ef93b82e76e5d22166a (patch)
tree9fa711dad63e1af5096f867ffd83ae927b56c89e /lldb
parent5df2db121637c1c3234ed8619cc7f77cfe6531da (diff)
downloadbcm5719-llvm-8f2e86da36269ec23bb22ef93b82e76e5d22166a.tar.gz
bcm5719-llvm-8f2e86da36269ec23bb22ef93b82e76e5d22166a.zip
[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
Diffstat (limited to 'lldb')
-rw-r--r--lldb/lit/DataFormatters/Inputs/NSDict.commands3
-rw-r--r--lldb/lit/DataFormatters/Inputs/NSDict.m9
-rw-r--r--lldb/lit/DataFormatters/TestEmptyDictionary.test7
-rw-r--r--lldb/lit/DataFormatters/lit.local.cfg1
-rw-r--r--lldb/source/Plugins/Language/ObjC/NSDictionary.cpp4
5 files changed, 24 insertions, 0 deletions
diff --git a/lldb/lit/DataFormatters/Inputs/NSDict.commands b/lldb/lit/DataFormatters/Inputs/NSDict.commands
new file mode 100644
index 00000000000..2f03dae3d3e
--- /dev/null
+++ b/lldb/lit/DataFormatters/Inputs/NSDict.commands
@@ -0,0 +1,3 @@
+breakpoint set --file NSDict.m --line 8
+run
+frame var
diff --git a/lldb/lit/DataFormatters/Inputs/NSDict.m b/lldb/lit/DataFormatters/Inputs/NSDict.m
new file mode 100644
index 00000000000..efc96fdc58d
--- /dev/null
+++ b/lldb/lit/DataFormatters/Inputs/NSDict.m
@@ -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;
+}
diff --git a/lldb/lit/DataFormatters/TestEmptyDictionary.test b/lldb/lit/DataFormatters/TestEmptyDictionary.test
new file mode 100644
index 00000000000..c9e6a0c1692
--- /dev/null
+++ b/lldb/lit/DataFormatters/TestEmptyDictionary.test
@@ -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
diff --git a/lldb/lit/DataFormatters/lit.local.cfg b/lldb/lit/DataFormatters/lit.local.cfg
new file mode 100644
index 00000000000..df9b335dd13
--- /dev/null
+++ b/lldb/lit/DataFormatters/lit.local.cfg
@@ -0,0 +1 @@
+config.suffixes = ['.test']
diff --git a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp
index 0af36f435ec..67b0ce863a7 100644
--- a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp
@@ -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;
OpenPOWER on IntegriCloud