summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Language/ObjC
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2016-08-22 18:07:52 +0000
committerEnrico Granata <egranata@apple.com>2016-08-22 18:07:52 +0000
commit2094e44f9b703d28cea8c2b0f2191b6b8f1e00ca (patch)
tree91eb4393709248578efd3b0924a60f280431830c /lldb/source/Plugins/Language/ObjC
parent87173f108ab976f64f4577e3bfce1d300fcb0b50 (diff)
downloadbcm5719-llvm-2094e44f9b703d28cea8c2b0f2191b6b8f1e00ca.tar.gz
bcm5719-llvm-2094e44f9b703d28cea8c2b0f2191b6b8f1e00ca.zip
Add a non-code-running data formatter for __NSCFBoolean
llvm-svn: 279446
Diffstat (limited to 'lldb/source/Plugins/Language/ObjC')
-rw-r--r--lldb/source/Plugins/Language/ObjC/Cocoa.cpp36
-rw-r--r--lldb/source/Plugins/Language/ObjC/Cocoa.h3
2 files changed, 39 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp
index 017c46ee3bb..e09a70001fa 100644
--- a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp
+++ b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp
@@ -30,6 +30,8 @@
#include "lldb/Target/Process.h"
#include "lldb/Utility/ProcessStructReader.h"
+#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h"
+
#include "NSString.h"
using namespace lldb;
@@ -466,6 +468,9 @@ lldb_private::formatters::NSNumberSummaryProvider (ValueObject& valobj, Stream&
if (!class_name || !*class_name)
return false;
+ if (!strcmp(class_name, "__NSCFBoolean"))
+ return ObjCBooleanSummaryProvider(valobj, stream, options);
+
if (!strcmp(class_name,"NSNumber") || !strcmp(class_name,"__NSCFNumber"))
{
uint64_t value = 0;
@@ -889,6 +894,37 @@ lldb_private::formatters::ObjCBOOLSummaryProvider (ValueObject& valobj, Stream&
return true;
}
+bool
+lldb_private::formatters::ObjCBooleanSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
+{
+ lldb::addr_t valobj_ptr_value = valobj.GetValueAsUnsigned(LLDB_INVALID_ADDRESS);
+ if (valobj_ptr_value == LLDB_INVALID_ADDRESS)
+ return false;
+
+ ProcessSP process_sp(valobj.GetProcessSP());
+ if (!process_sp)
+ return false;
+
+ if (AppleObjCRuntime *objc_runtime = (AppleObjCRuntime*)process_sp->GetObjCLanguageRuntime())
+ {
+ lldb::addr_t cf_true = LLDB_INVALID_ADDRESS,
+ cf_false = LLDB_INVALID_ADDRESS;
+ objc_runtime->GetValuesForGlobalCFBooleans(cf_true, cf_false);
+ if (valobj_ptr_value == cf_true)
+ {
+ stream.PutCString("YES");
+ return true;
+ }
+ if (valobj_ptr_value == cf_false)
+ {
+ stream.PutCString("NO");
+ return true;
+ }
+ }
+
+ return false;
+}
+
template <bool is_sel_ptr>
bool
lldb_private::formatters::ObjCSELSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
diff --git a/lldb/source/Plugins/Language/ObjC/Cocoa.h b/lldb/source/Plugins/Language/ObjC/Cocoa.h
index f43b1639cb3..5ab35446234 100644
--- a/lldb/source/Plugins/Language/ObjC/Cocoa.h
+++ b/lldb/source/Plugins/Language/ObjC/Cocoa.h
@@ -67,6 +67,9 @@ namespace lldb_private {
bool
ObjCBOOLSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
+
+ bool
+ ObjCBooleanSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
template <bool is_sel_ptr>
bool
OpenPOWER on IntegriCloud