diff options
Diffstat (limited to 'lldb/source/DataFormatters')
-rw-r--r-- | lldb/source/DataFormatters/CXXFormatterFunctions.cpp | 33 | ||||
-rw-r--r-- | lldb/source/DataFormatters/FormatManager.cpp | 1 |
2 files changed, 23 insertions, 11 deletions
diff --git a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp index d03d76156a0..8fb75289d35 100644 --- a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp +++ b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp @@ -1175,22 +1175,33 @@ template <bool is_sel_ptr> bool lldb_private::formatters::ObjCSELSummaryProvider (ValueObject& valobj, Stream& stream) { - lldb::addr_t data_address = LLDB_INVALID_ADDRESS; - - if (is_sel_ptr) - data_address = valobj.GetValueAsUnsigned(LLDB_INVALID_ADDRESS); - else - data_address = valobj.GetAddressOf(); + lldb::ValueObjectSP valobj_sp; - if (data_address == LLDB_INVALID_ADDRESS) + if (!valobj.GetClangAST()) return false; - - ExecutionContext exe_ctx(valobj.GetExecutionContextRef()); - void* char_opaque_type = valobj.GetClangAST()->CharTy.getAsOpaquePtr(); + if (!char_opaque_type) + return false; ClangASTType charstar(valobj.GetClangAST(),ClangASTType::GetPointerType(valobj.GetClangAST(), char_opaque_type)); + + ExecutionContext exe_ctx(valobj.GetExecutionContextRef()); - ValueObjectSP valobj_sp(ValueObject::CreateValueObjectFromAddress("text", data_address, exe_ctx, charstar)); + if (is_sel_ptr) + { + lldb::addr_t data_address = valobj.GetValueAsUnsigned(LLDB_INVALID_ADDRESS); + if (data_address == LLDB_INVALID_ADDRESS) + return false; + valobj_sp = ValueObject::CreateValueObjectFromAddress("text", data_address, exe_ctx, charstar); + } + else + { + DataExtractor data; + valobj.GetData(data); + valobj_sp = ValueObject::CreateValueObjectFromData("text", data, exe_ctx, charstar); + } + + if (!valobj_sp) + return false; stream.Printf("%s",valobj_sp->GetSummaryAsCString()); return true; diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp index eb8a3386a25..391b3ee981e 100644 --- a/lldb/source/DataFormatters/FormatManager.cpp +++ b/lldb/source/DataFormatters/FormatManager.cpp @@ -753,6 +753,7 @@ FormatManager::LoadObjCFormatters() AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("struct objc_selector"), objc_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("objc_selector"), objc_flags); AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<true>, "SEL summary provider", ConstString("objc_selector *"), objc_flags); + AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<true>, "SEL summary provider", ConstString("SEL *"), objc_flags); AddScriptSummary(objc_category_sp, "lldb.formatters.objc.Class.Class_Summary", ConstString("Class"), objc_flags); #endif // LLDB_DISABLE_PYTHON |