[Lldb-commits] [lldb] r232114 - Fix a bug in the data formatters where summary strings would not look into the non-synthetic value for child members if the ValueObject being formatted happened to have a synthetic value

Enrico Granata egranata at apple.com
Thu Mar 12 15:27:07 PDT 2015


I just realized I failed to commit the bulk of this patch (and of course, accidentally did a revert…)
Your build will be broken for the next 5 minutes until I actually rewrite the changes and commit them

> On Mar 12, 2015, at 3:17 PM, Enrico Granata <egranata at apple.com> wrote:
> 
> Author: enrico
> Date: Thu Mar 12 17:17:07 2015
> New Revision: 232114
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=232114&view=rev
> Log:
> Fix a bug in the data formatters where summary strings would not look into the non-synthetic value for child members if the ValueObject being formatted happened to have a synthetic value
> 
> rdar://15630776
> 
> 
> Modified:
>    lldb/trunk/include/lldb/Core/ValueObject.h
>    lldb/trunk/source/Core/FormatEntity.cpp
>    lldb/trunk/source/DataFormatters/LibCxx.cpp
>    lldb/trunk/test/functionalities/data-formatter/data-formatter-synth/TestDataFormatterSynth.py
> 
> Modified: lldb/trunk/include/lldb/Core/ValueObject.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObject.h?rev=232114&r1=232113&r2=232114&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Core/ValueObject.h (original)
> +++ lldb/trunk/include/lldb/Core/ValueObject.h Thu Mar 12 17:17:07 2015
> @@ -141,19 +141,27 @@ public:
> 
>     struct GetValueForExpressionPathOptions
>     {
> +        enum class SyntheticChildrenTraversal
> +        {
> +            None,
> +            ToSynthetic,
> +            FromSynthetic,
> +            Both
> +        };
> +        
>         bool m_check_dot_vs_arrow_syntax;
>         bool m_no_fragile_ivar;
>         bool m_allow_bitfields_syntax;
> -        bool m_no_synthetic_children;
> +        SyntheticChildrenTraversal m_synthetic_children_traversal;
> 
>         GetValueForExpressionPathOptions(bool dot = false,
>                                          bool no_ivar = false,
>                                          bool bitfield = true,
> -                                         bool no_synth = false) :
> +                                         SyntheticChildrenTraversal synth_traverse = SyntheticChildrenTraversal::ToSynthetic) :
>             m_check_dot_vs_arrow_syntax(dot),
>             m_no_fragile_ivar(no_ivar),
>             m_allow_bitfields_syntax(bitfield),
> -            m_no_synthetic_children(no_synth)
> +            m_synthetic_children_traversal(synth_traverse)
>         {
>         }
> 
> @@ -200,16 +208,9 @@ public:
>         }
> 
>         GetValueForExpressionPathOptions&
> -        DoAllowSyntheticChildren()
> -        {
> -            m_no_synthetic_children = false;
> -            return *this;
> -        }
> -        
> -        GetValueForExpressionPathOptions&
> -        DontAllowSyntheticChildren()
> +        SetSyntheticChildrenTraversal(SyntheticChildrenTraversal traverse)
>         {
> -            m_no_synthetic_children = true;
> +            m_synthetic_children_traversal = traverse;
>             return *this;
>         }
> 
> 
> Modified: lldb/trunk/source/Core/FormatEntity.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/FormatEntity.cpp?rev=232114&r1=232113&r2=232114&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/FormatEntity.cpp (original)
> +++ lldb/trunk/source/Core/FormatEntity.cpp Thu Mar 12 17:17:07 2015
> @@ -766,7 +766,7 @@ DumpValue (Stream &s,
>     ValueObject::ExpressionPathAftermath what_next = (do_deref_pointer ?
>                                                       ValueObject::eExpressionPathAftermathDereference : ValueObject::eExpressionPathAftermathNothing);
>     ValueObject::GetValueForExpressionPathOptions options;
> -    options.DontCheckDotVsArrowSyntax().DoAllowBitfieldSyntax().DoAllowFragileIVar().DoAllowSyntheticChildren();
> +    options.DontCheckDotVsArrowSyntax().DoAllowBitfieldSyntax().DoAllowFragileIVar().SetSyntheticChildrenTraversal(ValueObject::GetValueForExpressionPathOptions::SyntheticChildrenTraversal::Both);
>     ValueObject* target = NULL;
>     const char* var_name_final_if_array_range = NULL;
>     size_t close_bracket_index = llvm::StringRef::npos;
> 
> Modified: lldb/trunk/source/DataFormatters/LibCxx.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/LibCxx.cpp?rev=232114&r1=232113&r2=232114&view=diff
> ==============================================================================
> --- lldb/trunk/source/DataFormatters/LibCxx.cpp (original)
> +++ lldb/trunk/source/DataFormatters/LibCxx.cpp Thu Mar 12 17:17:07 2015
> @@ -266,7 +266,7 @@ lldb_private::formatters::LibCxxMapItera
>                                                      NULL,
>                                                      NULL,
>                                                      NULL,
> -                                                     ValueObject::GetValueForExpressionPathOptions().DontCheckDotVsArrowSyntax().DontAllowSyntheticChildren(),
> +                                                     ValueObject::GetValueForExpressionPathOptions().DontCheckDotVsArrowSyntax().SetSyntheticChildrenTraversal(ValueObject::GetValueForExpressionPathOptions::SyntheticChildrenTraversal::None),
>                                                      NULL).get();
> 
>     return false;
> 
> Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-synth/TestDataFormatterSynth.py
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-synth/TestDataFormatterSynth.py?rev=232114&r1=232113&r2=232114&view=diff
> ==============================================================================
> --- lldb/trunk/test/functionalities/data-formatter/data-formatter-synth/TestDataFormatterSynth.py (original)
> +++ lldb/trunk/test/functionalities/data-formatter/data-formatter-synth/TestDataFormatterSynth.py Thu Mar 12 17:17:07 2015
> @@ -14,14 +14,12 @@ class SynthDataFormatterTestCase(TestBas
> 
>     @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
>     @dsym_test
> -    @unittest2.expectedFailure("rdar://15630776 - Summary cannot reference non-synthetic children if synthetic children exist")
>     def test_with_dsym_and_run_command(self):
>         """Test data formatter commands."""
>         self.buildDsym()
>         self.data_formatter_commands()
> 
>     @dwarf_test
> -    @unittest2.expectedFailure("rdar://15630776 - Summary cannot reference non-synthetic children if synthetic children exist")
>     def test_with_dwarf_and_run_command(self):
>         """Test data formatter commands."""
>         self.buildDwarf()
> 
> 
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Thanks,
- Enrico
📩 egranata@.com ☎️ 27683




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150312/0c30497e/attachment.html>


More information about the lldb-commits mailing list