From 2094e44f9b703d28cea8c2b0f2191b6b8f1e00ca Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Mon, 22 Aug 2016 18:07:52 +0000 Subject: [PATCH] Add a non-code-running data formatter for __NSCFBoolean llvm-svn: 279446 --- lldb/source/Plugins/Language/ObjC/Cocoa.cpp | 36 +++++++++++++++++++++++++++++ lldb/source/Plugins/Language/ObjC/Cocoa.h | 3 +++ 2 files changed, 39 insertions(+) diff --git a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp index 017c46e..e09a700 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 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 f43b163..5ab3544 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 -- 2.7.4