[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 23:22:04 PDT 2015
Thanks for the clarification!
On Tue, Oct 6, 2015 at 10:51 PM Enrico Granata <egranata at apple.com> wrote:
> I am not done here.
> Also, even once I am done, all that you will be able to see here is no
> regressions in existing functionality.
>
> I am plumbing through a set of facilities that I need in order to make
> certain parts of data formatting logic Language-plugin based.
>
> That is required to make it easier to support new source languages in a
> clean fashion.
>
> Since the C++ and ObjC support is already there, there will be no
> (unintended) change in functionality. What you want to see here
> testing-wise is the lack of any regression for existing languages.
>
> The benefits are to be reaped if you were to add support for a new source
> language, which then would require its own testing, ..., but I plan to do
> no such thing at the moment.
>
> *tl;dr* existing tests cover this already; this is refactoring work
>
> Sent from my iPhone
>
> On Oct 6, 2015, at 9:20 PM, Zachary Turner <zturner at google.com> wrote:
>
> Actually upon further inspection it looks like the test that was updated
> was not really anything new, but an update of an existing test to pass a
> new argument through.
>
> Can you add some tests that test this specific functionality?
>
> On Tue, Oct 6, 2015 at 9:09 PM Zachary Turner <zturner at google.com> wrote:
>
>> 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/65d7d788/attachment-0001.html>
More information about the lldb-commits
mailing list