[Lldb-commits] [lldb] r249507 - 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

Enrico Granata via lldb-commits lldb-commits at lists.llvm.org
Tue Oct 6 19:36:36 PDT 2015


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):




More information about the lldb-commits mailing list