Author: enrico Date: Tue Oct 6 21:36:35 2015 New Revision: 249507 URL: http://llvm.org/viewvc/llvm-project?rev=249507&view=rev Log: Route the preferred-display-language mechanism to the ValueObjectPrinter and actually fill in a few gaps for dynamic and synthetic values to be able to adopt this in useful ways
Modified: lldb/trunk/include/lldb/Core/ValueObject.h lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h lldb/trunk/source/Commands/CommandObjectExpression.cpp lldb/trunk/source/Commands/CommandObjectFrame.cpp lldb/trunk/source/Core/ValueObject.cpp lldb/trunk/source/Core/ValueObjectConstResult.cpp lldb/trunk/source/Core/ValueObjectDynamicValue.cpp lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py Modified: lldb/trunk/include/lldb/Core/ValueObject.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObject.h?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/include/lldb/Core/ValueObject.h (original) +++ lldb/trunk/include/lldb/Core/ValueObject.h Tue Oct 6 21:36:35 2015 @@ -1242,6 +1242,9 @@ protected: bool IsChecksumEmpty (); + void + SetPreferredDisplayLanguageIfNeeded (lldb::LanguageType); + private: //------------------------------------------------------------------ // For ValueObject only Modified: lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h (original) +++ lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h Tue Oct 6 21:36:35 2015 @@ -105,6 +105,12 @@ public: virtual TypeImpl GetTypeImpl (); + virtual lldb::LanguageType + GetPreferredDisplayLanguage (); + + void + SetPreferredDisplayLanguage (lldb::LanguageType); + virtual bool GetDeclaration (Declaration &decl); Modified: lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h (original) +++ lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h Tue Oct 6 21:36:35 2015 @@ -152,6 +152,12 @@ public: virtual void SetFormat (lldb::Format format); + virtual lldb::LanguageType + GetPreferredDisplayLanguage (); + + void + SetPreferredDisplayLanguage (lldb::LanguageType); + virtual bool GetDeclaration (Declaration &decl); Modified: lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h (original) +++ lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h Tue Oct 6 21:36:35 2015 @@ -61,6 +61,7 @@ struct DumpValueObjectOptions lldb::Format m_format = lldb::eFormatDefault; lldb::TypeSummaryImplSP m_summary_sp; std::string m_root_valobj_name; + lldb::LanguageType m_varformat_language = lldb::eLanguageTypeUnknown; PointerDepth m_max_ptr_depth; bool m_use_synthetic : 1; bool m_scope_already_checked : 1; @@ -252,6 +253,13 @@ struct DumpValueObjectOptions return *this; } + DumpValueObjectOptions& + SetVariableFormatDisplayLanguage (lldb::LanguageType lang = lldb::eLanguageTypeUnknown) + { + m_varformat_language = lang; + return *this; + } + DumpValueObjectOptions& SetRunValidator (bool run = true) { Modified: lldb/trunk/source/Commands/CommandObjectExpression.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectExpression.cpp?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectExpression.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectExpression.cpp Tue Oct 6 21:36:35 2015 @@ -335,6 +335,7 @@ CommandObjectExpression::EvaluateExpress result_valobj_sp->SetFormat (format); DumpValueObjectOptions options(m_varobj_options.GetAsDumpOptions(m_command_options.m_verbosity,format)); + options.SetVariableFormatDisplayLanguage(result_valobj_sp->GetPreferredDisplayLanguage()); result_valobj_sp->Dump(*output_stream,options); Modified: lldb/trunk/source/Commands/CommandObjectFrame.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectFrame.cpp?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectFrame.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectFrame.cpp Tue Oct 6 21:36:35 2015 @@ -500,6 +500,7 @@ protected: } options.SetFormat(format); + options.SetVariableFormatDisplayLanguage(valobj_sp->GetPreferredDisplayLanguage()); Stream &output_stream = result.GetOutputStream(); options.SetRootValueObjectName(valobj_sp->GetParent() ? name_cstr : NULL); @@ -586,6 +587,7 @@ protected: } options.SetFormat(format); + options.SetVariableFormatDisplayLanguage(valobj_sp->GetPreferredDisplayLanguage()); options.SetRootValueObjectName(name_cstr); valobj_sp->Dump(result.GetOutputStream(),options); } Modified: lldb/trunk/source/Core/ValueObject.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/source/Core/ValueObject.cpp (original) +++ lldb/trunk/source/Core/ValueObject.cpp Tue Oct 6 21:36:35 2015 @@ -4259,6 +4259,13 @@ ValueObject::SetPreferredDisplayLanguage m_preferred_display_language = lt; } +void +ValueObject::SetPreferredDisplayLanguageIfNeeded (lldb::LanguageType lt) +{ + if (m_preferred_display_language == lldb::eLanguageTypeUnknown) + SetPreferredDisplayLanguage(lt); +} + bool ValueObject::CanProvideValue () { Modified: lldb/trunk/source/Core/ValueObjectConstResult.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectConstResult.cpp?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/source/Core/ValueObjectConstResult.cpp (original) +++ lldb/trunk/source/Core/ValueObjectConstResult.cpp Tue Oct 6 21:36:35 2015 @@ -374,5 +374,7 @@ ValueObjectConstResult::Cast (const Comp lldb::LanguageType ValueObjectConstResult::GetPreferredDisplayLanguage () { - return lldb::eLanguageTypeUnknown; + if (m_preferred_display_language != lldb::eLanguageTypeUnknown) + return m_preferred_display_language; + return GetCompilerTypeImpl().GetMinimumLanguage(); } Modified: lldb/trunk/source/Core/ValueObjectDynamicValue.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectDynamicValue.cpp?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/source/Core/ValueObjectDynamicValue.cpp (original) +++ lldb/trunk/source/Core/ValueObjectDynamicValue.cpp Tue Oct 6 21:36:35 2015 @@ -391,6 +391,27 @@ ValueObjectDynamicValue::SetData (DataEx return ret_val; } +void +ValueObjectDynamicValue::SetPreferredDisplayLanguage (lldb::LanguageType lang) +{ + this->ValueObject::SetPreferredDisplayLanguage(lang); + if (m_parent) + m_parent->SetPreferredDisplayLanguage(lang); +} + +lldb::LanguageType +ValueObjectDynamicValue::GetPreferredDisplayLanguage () +{ + if (m_preferred_display_language == lldb::eLanguageTypeUnknown) + { + if (m_parent) + return m_parent->GetPreferredDisplayLanguage(); + return lldb::eLanguageTypeUnknown; + } + else + return m_preferred_display_language; +} + bool ValueObjectDynamicValue::GetDeclaration (Declaration &decl) { Modified: lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp (original) +++ lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp Tue Oct 6 21:36:35 2015 @@ -223,6 +223,7 @@ ValueObjectSynthetic::GetChildAtIndex (s if (!synth_guy) return synth_guy; m_children_byindex.SetValueForKey(idx, synth_guy.get()); + synth_guy->SetPreferredDisplayLanguageIfNeeded(GetPreferredDisplayLanguage()); return synth_guy; } else @@ -315,6 +316,27 @@ ValueObjectSynthetic::SetFormat (lldb::F this->ClearUserVisibleData(eClearUserVisibleDataItemsAll); } +void +ValueObjectSynthetic::SetPreferredDisplayLanguage (lldb::LanguageType lang) +{ + this->ValueObject::SetPreferredDisplayLanguage(lang); + if (m_parent) + m_parent->SetPreferredDisplayLanguage(lang); +} + +lldb::LanguageType +ValueObjectSynthetic::GetPreferredDisplayLanguage () +{ + if (m_preferred_display_language == lldb::eLanguageTypeUnknown) + { + if (m_parent) + return m_parent->GetPreferredDisplayLanguage(); + return lldb::eLanguageTypeUnknown; + } + else + return m_preferred_display_language; +} + bool ValueObjectSynthetic::GetDeclaration (Declaration &decl) { Modified: lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp (original) +++ lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp Tue Oct 6 21:36:35 2015 @@ -26,6 +26,7 @@ DumpValueObjectOptions() { m_use_dynamic = valobj.GetDynamicValueType(); m_use_synthetic = valobj.IsSynthetic(); + m_varformat_language = valobj.GetPreferredDisplayLanguage(); } ValueObjectPrinter::ValueObjectPrinter (ValueObject* valobj, @@ -354,10 +355,10 @@ ValueObjectPrinter::GetValueSummaryError { TypeSummaryImpl* entry = GetSummaryFormatter(); if (entry) - m_valobj->GetSummaryAsCString(entry, summary); + m_valobj->GetSummaryAsCString(entry, summary, options.m_varformat_language); else { - const char* sum_cstr = m_valobj->GetSummaryAsCString(); + const char* sum_cstr = m_valobj->GetSummaryAsCString(options.m_varformat_language); if (sum_cstr) summary.assign(sum_cstr); } Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py?rev=249507&r1=249506&r2=249507&view=diff ============================================================================== --- lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py (original) +++ lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py Tue Oct 6 21:36:35 2015 @@ -387,7 +387,6 @@ class ObjCDataFormatterTestCase(TestBase self.addTearDownHook(cleanup) # check formatters for common Objective-C types - self.runCmd("log timers enable") expect_strings = ['(CFGregorianUnits) cf_greg_units = 1 years, 3 months, 5 days, 12 hours, 5 minutes 7 seconds', '(CFRange) cf_range = location=4 length=4', '(NSPoint) ns_point = (x = 4, y = 4)', @@ -414,7 +413,6 @@ class ObjCDataFormatterTestCase(TestBase self.expect("frame variable", substrs = expect_strings) - self.runCmd('log timers dump') def kvo_data_formatter_commands(self): _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits