[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

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Tue Oct 6 21:09:46 PDT 2015


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.

On Tue, Oct 6, 2015 at 7:38 PM Enrico Granata via lldb-commits <
lldb-commits at lists.llvm.org> wrote:

> 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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20151007/91974d3d/attachment-0001.html>


More information about the lldb-commits mailing list