<div dir="ltr">It looks like there's only 1 test added for all of this functionality from this and the last few commits, and that the test is specific to Objective C.  The functionality itself seems language agnostic though.  Is there any way to write a test that does not rely on a particular language?  That would improve the test coverage of this functionality.</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Oct 6, 2015 at 7:38 PM Enrico Granata via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org">lldb-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: enrico<br>
Date: Tue Oct  6 21:36:35 2015<br>
New Revision: 249507<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=249507&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=249507&view=rev</a><br>
Log:<br>
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<br>
<br>
<br>
Modified:<br>
    lldb/trunk/include/lldb/Core/ValueObject.h<br>
    lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h<br>
    lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h<br>
    lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h<br>
    lldb/trunk/source/Commands/CommandObjectExpression.cpp<br>
    lldb/trunk/source/Commands/CommandObjectFrame.cpp<br>
    lldb/trunk/source/Core/ValueObject.cpp<br>
    lldb/trunk/source/Core/ValueObjectConstResult.cpp<br>
    lldb/trunk/source/Core/ValueObjectDynamicValue.cpp<br>
    lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp<br>
    lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp<br>
    lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py<br>
<br>
Modified: lldb/trunk/include/lldb/Core/ValueObject.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObject.h?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObject.h?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Core/ValueObject.h (original)<br>
+++ lldb/trunk/include/lldb/Core/ValueObject.h Tue Oct  6 21:36:35 2015<br>
@@ -1242,6 +1242,9 @@ protected:<br>
     bool<br>
     IsChecksumEmpty ();<br>
<br>
+    void<br>
+    SetPreferredDisplayLanguageIfNeeded (lldb::LanguageType);<br>
+<br>
 private:<br>
     //------------------------------------------------------------------<br>
     // For ValueObject only<br>
<br>
Modified: lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h (original)<br>
+++ lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h Tue Oct  6 21:36:35 2015<br>
@@ -105,6 +105,12 @@ public:<br>
     virtual TypeImpl<br>
     GetTypeImpl ();<br>
<br>
+    virtual lldb::LanguageType<br>
+    GetPreferredDisplayLanguage ();<br>
+<br>
+    void<br>
+    SetPreferredDisplayLanguage (lldb::LanguageType);<br>
+<br>
     virtual bool<br>
     GetDeclaration (Declaration &decl);<br>
<br>
<br>
Modified: lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h (original)<br>
+++ lldb/trunk/include/lldb/Core/ValueObjectSyntheticFilter.h Tue Oct  6 21:36:35 2015<br>
@@ -152,6 +152,12 @@ public:<br>
     virtual void<br>
     SetFormat (lldb::Format format);<br>
<br>
+    virtual lldb::LanguageType<br>
+    GetPreferredDisplayLanguage ();<br>
+<br>
+    void<br>
+    SetPreferredDisplayLanguage (lldb::LanguageType);<br>
+<br>
     virtual bool<br>
     GetDeclaration (Declaration &decl);<br>
<br>
<br>
Modified: lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h (original)<br>
+++ lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h Tue Oct  6 21:36:35 2015<br>
@@ -61,6 +61,7 @@ struct DumpValueObjectOptions<br>
     lldb::Format m_format = lldb::eFormatDefault;<br>
     lldb::TypeSummaryImplSP m_summary_sp;<br>
     std::string m_root_valobj_name;<br>
+    lldb::LanguageType m_varformat_language = lldb::eLanguageTypeUnknown;<br>
     PointerDepth m_max_ptr_depth;<br>
     bool m_use_synthetic : 1;<br>
     bool m_scope_already_checked : 1;<br>
@@ -252,6 +253,13 @@ struct DumpValueObjectOptions<br>
         return *this;<br>
     }<br>
<br>
+    DumpValueObjectOptions&<br>
+    SetVariableFormatDisplayLanguage (lldb::LanguageType lang = lldb::eLanguageTypeUnknown)<br>
+    {<br>
+        m_varformat_language = lang;<br>
+        return *this;<br>
+    }<br>
+<br>
     DumpValueObjectOptions&<br>
     SetRunValidator (bool run = true)<br>
     {<br>
<br>
Modified: lldb/trunk/source/Commands/CommandObjectExpression.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectExpression.cpp?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectExpression.cpp?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Commands/CommandObjectExpression.cpp (original)<br>
+++ lldb/trunk/source/Commands/CommandObjectExpression.cpp Tue Oct  6 21:36:35 2015<br>
@@ -335,6 +335,7 @@ CommandObjectExpression::EvaluateExpress<br>
                         result_valobj_sp->SetFormat (format);<br>
<br>
                     DumpValueObjectOptions options(m_varobj_options.GetAsDumpOptions(m_command_options.m_verbosity,format));<br>
+                    options.SetVariableFormatDisplayLanguage(result_valobj_sp->GetPreferredDisplayLanguage());<br>
<br>
                     result_valobj_sp->Dump(*output_stream,options);<br>
<br>
<br>
Modified: lldb/trunk/source/Commands/CommandObjectFrame.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectFrame.cpp?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectFrame.cpp?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Commands/CommandObjectFrame.cpp (original)<br>
+++ lldb/trunk/source/Commands/CommandObjectFrame.cpp Tue Oct  6 21:36:35 2015<br>
@@ -500,6 +500,7 @@ protected:<br>
                             }<br>
<br>
                             options.SetFormat(format);<br>
+                            options.SetVariableFormatDisplayLanguage(valobj_sp->GetPreferredDisplayLanguage());<br>
<br>
                             Stream &output_stream = result.GetOutputStream();<br>
                             options.SetRootValueObjectName(valobj_sp->GetParent() ? name_cstr : NULL);<br>
@@ -586,6 +587,7 @@ protected:<br>
                                     }<br>
<br>
                                     options.SetFormat(format);<br>
+                                    options.SetVariableFormatDisplayLanguage(valobj_sp->GetPreferredDisplayLanguage());<br>
                                     options.SetRootValueObjectName(name_cstr);<br>
                                     valobj_sp->Dump(result.GetOutputStream(),options);<br>
                                 }<br>
<br>
Modified: lldb/trunk/source/Core/ValueObject.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Core/ValueObject.cpp (original)<br>
+++ lldb/trunk/source/Core/ValueObject.cpp Tue Oct  6 21:36:35 2015<br>
@@ -4259,6 +4259,13 @@ ValueObject::SetPreferredDisplayLanguage<br>
     m_preferred_display_language = lt;<br>
 }<br>
<br>
+void<br>
+ValueObject::SetPreferredDisplayLanguageIfNeeded (lldb::LanguageType lt)<br>
+{<br>
+    if (m_preferred_display_language == lldb::eLanguageTypeUnknown)<br>
+        SetPreferredDisplayLanguage(lt);<br>
+}<br>
+<br>
 bool<br>
 ValueObject::CanProvideValue ()<br>
 {<br>
<br>
Modified: lldb/trunk/source/Core/ValueObjectConstResult.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectConstResult.cpp?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectConstResult.cpp?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Core/ValueObjectConstResult.cpp (original)<br>
+++ lldb/trunk/source/Core/ValueObjectConstResult.cpp Tue Oct  6 21:36:35 2015<br>
@@ -374,5 +374,7 @@ ValueObjectConstResult::Cast (const Comp<br>
 lldb::LanguageType<br>
 ValueObjectConstResult::GetPreferredDisplayLanguage ()<br>
 {<br>
-    return lldb::eLanguageTypeUnknown;<br>
+    if (m_preferred_display_language != lldb::eLanguageTypeUnknown)<br>
+        return m_preferred_display_language;<br>
+    return GetCompilerTypeImpl().GetMinimumLanguage();<br>
 }<br>
<br>
Modified: lldb/trunk/source/Core/ValueObjectDynamicValue.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectDynamicValue.cpp?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectDynamicValue.cpp?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Core/ValueObjectDynamicValue.cpp (original)<br>
+++ lldb/trunk/source/Core/ValueObjectDynamicValue.cpp Tue Oct  6 21:36:35 2015<br>
@@ -391,6 +391,27 @@ ValueObjectDynamicValue::SetData (DataEx<br>
     return ret_val;<br>
 }<br>
<br>
+void<br>
+ValueObjectDynamicValue::SetPreferredDisplayLanguage (lldb::LanguageType lang)<br>
+{<br>
+    this->ValueObject::SetPreferredDisplayLanguage(lang);<br>
+    if (m_parent)<br>
+        m_parent->SetPreferredDisplayLanguage(lang);<br>
+}<br>
+<br>
+lldb::LanguageType<br>
+ValueObjectDynamicValue::GetPreferredDisplayLanguage ()<br>
+{<br>
+    if (m_preferred_display_language == lldb::eLanguageTypeUnknown)<br>
+    {<br>
+        if (m_parent)<br>
+            return m_parent->GetPreferredDisplayLanguage();<br>
+        return lldb::eLanguageTypeUnknown;<br>
+    }<br>
+    else<br>
+        return m_preferred_display_language;<br>
+}<br>
+<br>
 bool<br>
 ValueObjectDynamicValue::GetDeclaration (Declaration &decl)<br>
 {<br>
<br>
Modified: lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp (original)<br>
+++ lldb/trunk/source/Core/ValueObjectSyntheticFilter.cpp Tue Oct  6 21:36:35 2015<br>
@@ -223,6 +223,7 @@ ValueObjectSynthetic::GetChildAtIndex (s<br>
             if (!synth_guy)<br>
                 return synth_guy;<br>
             m_children_byindex.SetValueForKey(idx, synth_guy.get());<br>
+            synth_guy->SetPreferredDisplayLanguageIfNeeded(GetPreferredDisplayLanguage());<br>
             return synth_guy;<br>
         }<br>
         else<br>
@@ -315,6 +316,27 @@ ValueObjectSynthetic::SetFormat (lldb::F<br>
     this->ClearUserVisibleData(eClearUserVisibleDataItemsAll);<br>
 }<br>
<br>
+void<br>
+ValueObjectSynthetic::SetPreferredDisplayLanguage (lldb::LanguageType lang)<br>
+{<br>
+    this->ValueObject::SetPreferredDisplayLanguage(lang);<br>
+    if (m_parent)<br>
+        m_parent->SetPreferredDisplayLanguage(lang);<br>
+}<br>
+<br>
+lldb::LanguageType<br>
+ValueObjectSynthetic::GetPreferredDisplayLanguage ()<br>
+{<br>
+    if (m_preferred_display_language == lldb::eLanguageTypeUnknown)<br>
+    {<br>
+        if (m_parent)<br>
+            return m_parent->GetPreferredDisplayLanguage();<br>
+        return lldb::eLanguageTypeUnknown;<br>
+    }<br>
+    else<br>
+        return m_preferred_display_language;<br>
+}<br>
+<br>
 bool<br>
 ValueObjectSynthetic::GetDeclaration (Declaration &decl)<br>
 {<br>
<br>
Modified: lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp?rev=249507&r1=249506&r2=249507&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp?rev=249507&r1=249506&r2=249507&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp (original)<br>
+++ lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp Tue Oct  6 21:36:35 2015<br>
@@ -26,6 +26,7 @@ DumpValueObjectOptions()<br>
 {<br>
     m_use_dynamic = valobj.GetDynamicValueType();<br>
     m_use_synthetic = valobj.IsSynthetic();<br>
+    m_varformat_language = valobj.GetPreferredDisplayLanguage();<br>
 }<br>
<br>
 ValueObjectPrinter::ValueObjectPrinter (ValueObject* valobj,<br>
@@ -354,10 +355,10 @@ ValueObjectPrinter::GetValueSummaryError<br>
         {<br>
             TypeSummaryImpl* entry = GetSummaryFormatter();<br>
             if (entry)<br>
-                m_valobj->GetSummaryAsCString(entry, summary);<br>
+                m_valobj->GetSummaryAsCString(entry, summary, options.m_varformat_language);<br>
             else<br>
             {<br>
-                const char* sum_cstr = m_valobj->GetSummaryAsCString();<br>
+                const char* sum_cstr = m_valobj->GetSummaryAsCString(options.m_varformat_language);<br>
                 if (sum_cstr)<br>
                     summary.assign(sum_cstr);<br>
             }<br>
<br>
Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py<br>
URL: <a href="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" rel="noreferrer" target="_blank">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</a><br>
==============================================================================<br>
--- lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py (original)<br>
+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py Tue Oct  6 21:36:35 2015<br>
@@ -387,7 +387,6 @@ class ObjCDataFormatterTestCase(TestBase<br>
         self.addTearDownHook(cleanup)<br>
<br>
         # check formatters for common Objective-C types<br>
-        self.runCmd("log timers enable")<br>
         expect_strings = ['(CFGregorianUnits) cf_greg_units = 1 years, 3 months, 5 days, 12 hours, 5 minutes 7 seconds',<br>
          '(CFRange) cf_range = location=4 length=4',<br>
          '(NSPoint) ns_point = (x = 4, y = 4)',<br>
@@ -414,7 +413,6 @@ class ObjCDataFormatterTestCase(TestBase<br>
<br>
         self.expect("frame variable",<br>
              substrs = expect_strings)<br>
-        self.runCmd('log timers dump')<br>
<br>
<br>
     def kvo_data_formatter_commands(self):<br>
<br>
<br>
_______________________________________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a><br>
</blockquote></div>