From 559008649bb458d2991143fdb3c5841f4a91eacb Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Fri, 15 Mar 2013 18:55:30 +0000 Subject: [PATCH] =?utf8?q?Porting=20the=20Objective-C=20Class=20data=20typ?= =?utf8?q?e=E2=80=99s=20summary=20from=20Python=20to=20C++?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit llvm-svn: 177172 --- .../lldb/DataFormatters/CXXFormatterFunctions.h | 3 +++ .../DataFormatters/CXXFormatterFunctions.cpp | 26 ++++++++++++++++++++++ lldb/source/DataFormatters/FormatManager.cpp | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h b/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h index 8dc2a90..f06467e 100644 --- a/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h +++ b/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h @@ -73,6 +73,9 @@ namespace lldb_private { bool LibcxxWStringSummaryProvider (ValueObject& valobj, Stream& stream); // libc++ std::wstring + bool + ObjCClassSummaryProvider (ValueObject& valobj, Stream& stream); + template bool NSDictionarySummaryProvider (ValueObject& valobj, Stream& stream); diff --git a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp index 6f7e84a..1107566 100644 --- a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp +++ b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp @@ -558,6 +558,32 @@ lldb_private::formatters::LibcxxStringSummaryProvider (ValueObject& valobj, Stre return error.Success(); } +bool +lldb_private::formatters::ObjCClassSummaryProvider (ValueObject& valobj, Stream& stream) +{ + ProcessSP process_sp = valobj.GetProcessSP(); + if (!process_sp) + return false; + + ObjCLanguageRuntime* runtime = (ObjCLanguageRuntime*)process_sp->GetLanguageRuntime(lldb::eLanguageTypeObjC); + + if (!runtime) + return false; + + ObjCLanguageRuntime::ClassDescriptorSP descriptor(runtime->GetClassDescriptor(valobj.GetValueAsUnsigned(0))); + + if (!descriptor.get() || !descriptor->IsValid()) + return false; + + const char* class_name = descriptor->GetClassName().GetCString(); + + if (!class_name || !*class_name) + return false; + + stream.Printf("%s",class_name); + return true; +} + template bool lldb_private::formatters::NSDataSummaryProvider (ValueObject& valobj, Stream& stream) diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp index a14f6b1..b13c468 100644 --- a/lldb/source/DataFormatters/FormatManager.cpp +++ b/lldb/source/DataFormatters/FormatManager.cpp @@ -777,7 +777,7 @@ FormatManager::LoadObjCFormatters() AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider, "SEL summary provider", ConstString("objc_selector *"), objc_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider, "SEL summary provider", ConstString("SEL *"), objc_flags); - AddScriptSummary(objc_category_sp, "lldb.formatters.objc.Class.Class_Summary", ConstString("Class"), objc_flags); + AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCClassSummaryProvider, "Class summary provider", ConstString("Class"), objc_flags); #endif // LLDB_DISABLE_PYTHON objc_flags.SetSkipPointers(false); -- 2.7.4