diff options
-rw-r--r-- | lldb/include/lldb/Core/ValueObject.h | 5 | ||||
-rw-r--r-- | lldb/include/lldb/DataFormatters/FormattersHelpers.h | 3 | ||||
-rw-r--r-- | lldb/source/Core/ValueObject.cpp | 30 | ||||
-rw-r--r-- | lldb/source/DataFormatters/FormattersHelpers.cpp | 7 | ||||
-rw-r--r-- | lldb/source/Plugins/Language/ObjC/Cocoa.cpp | 10 |
5 files changed, 34 insertions, 21 deletions
diff --git a/lldb/include/lldb/Core/ValueObject.h b/lldb/include/lldb/Core/ValueObject.h index 512d779b313..9ba837a3ac5 100644 --- a/lldb/include/lldb/Core/ValueObject.h +++ b/lldb/include/lldb/Core/ValueObject.h @@ -610,11 +610,12 @@ public: GetLocationAsCString (); const char * - GetSummaryAsCString (); + GetSummaryAsCString (lldb::LanguageType lang = lldb::eLanguageTypeUnknown); bool GetSummaryAsCString (TypeSummaryImpl* summary_ptr, - std::string& destination); + std::string& destination, + lldb::LanguageType lang = lldb::eLanguageTypeUnknown); bool GetSummaryAsCString (std::string& destination, diff --git a/lldb/include/lldb/DataFormatters/FormattersHelpers.h b/lldb/include/lldb/DataFormatters/FormattersHelpers.h index 0ba537129f8..4225a9caca3 100644 --- a/lldb/include/lldb/DataFormatters/FormattersHelpers.h +++ b/lldb/include/lldb/DataFormatters/FormattersHelpers.h @@ -89,7 +89,8 @@ namespace lldb_private { ExtractSummaryFromObjCExpression (ValueObject &valobj, const char* target_type, const char* selector, - Stream &stream); + Stream &stream, + lldb::LanguageType lang_type); lldb::ValueObjectSP CallSelectorOnObject (ValueObject &valobj, diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index e083c72c568..a784f49b7ff 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -874,9 +874,10 @@ ValueObject::CreateChildAtIndex (size_t idx, bool synthetic_array_member, int32_ bool ValueObject::GetSummaryAsCString (TypeSummaryImpl* summary_ptr, - std::string& destination) + std::string& destination, + lldb::LanguageType lang) { - return GetSummaryAsCString(summary_ptr, destination, TypeSummaryOptions()); + return GetSummaryAsCString(summary_ptr, destination, TypeSummaryOptions().SetLanguage(lang)); } bool @@ -885,7 +886,7 @@ ValueObject::GetSummaryAsCString (TypeSummaryImpl* summary_ptr, const TypeSummaryOptions& options) { destination.clear(); - + // ideally we would like to bail out if passing NULL, but if we do so // we end up not providing the summary for function pointers anymore if (/*summary_ptr == NULL ||*/ m_is_getting_summary) @@ -893,31 +894,38 @@ ValueObject::GetSummaryAsCString (TypeSummaryImpl* summary_ptr, m_is_getting_summary = true; + TypeSummaryOptions actual_options(options); + + if (actual_options.GetLanguage() == lldb::eLanguageTypeUnknown) + actual_options.SetLanguage(GetPreferredDisplayLanguage()); + // this is a hot path in code and we prefer to avoid setting this string all too often also clearing out other // information that we might care to see in a crash log. might be useful in very specific situations though. /*Host::SetCrashDescriptionWithFormat("Trying to fetch a summary for %s %s. Summary provider's description is %s", - GetTypeName().GetCString(), - GetName().GetCString(), - summary_ptr->GetDescription().c_str());*/ + GetTypeName().GetCString(), + GetName().GetCString(), + summary_ptr->GetDescription().c_str());*/ if (UpdateValueIfNeeded (false) && summary_ptr) { if (HasSyntheticValue()) m_synthetic_value->UpdateValueIfNeeded(); // the summary might depend on the synthetic children being up-to-date (e.g. ${svar%#}) - summary_ptr->FormatObject(this, destination, options); + summary_ptr->FormatObject(this, destination, actual_options); } m_is_getting_summary = false; return !destination.empty(); } const char * -ValueObject::GetSummaryAsCString () +ValueObject::GetSummaryAsCString (lldb::LanguageType lang) { if (UpdateValueIfNeeded(true) && m_summary_str.empty()) { + TypeSummaryOptions summary_options; + summary_options.SetLanguage(lang); GetSummaryAsCString(GetSummaryFormat().get(), m_summary_str, - TypeSummaryOptions()); + summary_options); } if (m_summary_str.empty()) return NULL; @@ -929,8 +937,8 @@ ValueObject::GetSummaryAsCString (std::string& destination, const TypeSummaryOptions& options) { return GetSummaryAsCString(GetSummaryFormat().get(), - destination, - options); + destination, + options); } bool diff --git a/lldb/source/DataFormatters/FormattersHelpers.cpp b/lldb/source/DataFormatters/FormattersHelpers.cpp index 648913ee94b..290fda089f3 100644 --- a/lldb/source/DataFormatters/FormattersHelpers.cpp +++ b/lldb/source/DataFormatters/FormattersHelpers.cpp @@ -187,7 +187,8 @@ bool lldb_private::formatters::ExtractSummaryFromObjCExpression (ValueObject &valobj, const char* target_type, const char* selector, - Stream &stream) + Stream &stream, + lldb::LanguageType lang_type) { if (!target_type || !*target_type) return false; @@ -206,6 +207,8 @@ lldb_private::formatters::ExtractSummaryFromObjCExpression (ValueObject &valobj, options.SetCoerceToId(false); options.SetUnwindOnError(true); options.SetKeepInMemory(true); + options.SetLanguage(lldb::eLanguageTypeObjC_plus_plus); + options.SetResultIsInternal(true); options.SetUseDynamic(lldb::eDynamicCanRunTarget); target->EvaluateExpression(expr.GetData(), @@ -214,7 +217,7 @@ lldb_private::formatters::ExtractSummaryFromObjCExpression (ValueObject &valobj, options); if (!result_sp) return false; - stream.Printf("%s",result_sp->GetSummaryAsCString()); + stream.Printf("%s",result_sp->GetSummaryAsCString(lang_type)); return true; } diff --git a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp index 184b4b3f63c..84699a20b60 100644 --- a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp +++ b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp @@ -75,7 +75,7 @@ lldb_private::formatters::NSBundleSummaryProvider (ValueObject& valobj, Stream& } // this is either an unknown subclass or an NSBundle that comes from [NSBundle mainBundle] // which is encoded differently and needs to be handled by running code - return ExtractSummaryFromObjCExpression(valobj, "NSString*", "bundlePath", stream); + return ExtractSummaryFromObjCExpression(valobj, "NSString*", "bundlePath", stream, options.GetLanguage()); } bool @@ -119,7 +119,7 @@ lldb_private::formatters::NSTimeZoneSummaryProvider (ValueObject& valobj, Stream return true; } } - return ExtractSummaryFromObjCExpression(valobj, "NSString*", "name", stream); + return ExtractSummaryFromObjCExpression(valobj, "NSString*", "name", stream, options.GetLanguage()); } bool @@ -165,7 +165,7 @@ lldb_private::formatters::NSNotificationSummaryProvider (ValueObject& valobj, St } // this is either an unknown subclass or an NSBundle that comes from [NSBundle mainBundle] // which is encoded differently and needs to be handled by running code - return ExtractSummaryFromObjCExpression(valobj, "NSString*", "name", stream); + return ExtractSummaryFromObjCExpression(valobj, "NSString*", "name", stream, options.GetLanguage()); } bool @@ -414,7 +414,7 @@ lldb_private::formatters::NSNumberSummaryProvider (ValueObject& valobj, Stream& } else { - return ExtractSummaryFromObjCExpression(valobj, "NSString*", "stringValue", stream); + return ExtractSummaryFromObjCExpression(valobj, "NSString*", "stringValue", stream, options.GetLanguage()); } } @@ -478,7 +478,7 @@ lldb_private::formatters::NSURLSummaryProvider (ValueObject& valobj, Stream& str } else { - return ExtractSummaryFromObjCExpression(valobj, "NSString*", "description", stream); + return ExtractSummaryFromObjCExpression(valobj, "NSString*", "description", stream, options.GetLanguage()); } return false; } |