kastiglione created this revision. kastiglione added reviewers: aprantl, JDevlieghere, jingham. Herald added a project: All. kastiglione requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
When `ValueObjectPrinter` calls its `m_decl_printing_helper`, not all state is passed to the helper. In particular, the helper doesn't have access to `m_curr_depth`, and thus can't act on the logic within `ShouldShowName`. To address this, this change passes in a modified copy of `m_options`. The modified copy has has `m_hide_name` set according to the results of `ShouldShowName`. This allows helper functions to know whether the name should be shown or hidden, without having access to `ValueObjectPrinter`'s full state. This is NFC in mainline lldb, as the only decl printing helper doesn't make use of this. However in swift-lldb at least, there are decl printing helpers that do need this information passed to them. See https://github.com/apple/llvm-project/pull/6795 where a test is also included. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D150129 Files: lldb/source/DataFormatters/ValueObjectPrinter.cpp Index: lldb/source/DataFormatters/ValueObjectPrinter.cpp =================================================================== --- lldb/source/DataFormatters/ValueObjectPrinter.cpp +++ lldb/source/DataFormatters/ValueObjectPrinter.cpp @@ -300,9 +300,14 @@ ConstString type_name_cstr(typeName.GetString()); ConstString var_name_cstr(varName.GetString()); + DumpValueObjectOptions decl_print_options = m_options; + // Pass printing helpers an option object that indicates whether the name + // should be shown or hidden. + decl_print_options.SetHideName(!ShouldShowName()); + StreamString dest_stream; if (m_options.m_decl_printing_helper(type_name_cstr, var_name_cstr, - m_options, dest_stream)) { + decl_print_options, dest_stream)) { decl_printed = true; m_stream->PutCString(dest_stream.GetString()); }
Index: lldb/source/DataFormatters/ValueObjectPrinter.cpp =================================================================== --- lldb/source/DataFormatters/ValueObjectPrinter.cpp +++ lldb/source/DataFormatters/ValueObjectPrinter.cpp @@ -300,9 +300,14 @@ ConstString type_name_cstr(typeName.GetString()); ConstString var_name_cstr(varName.GetString()); + DumpValueObjectOptions decl_print_options = m_options; + // Pass printing helpers an option object that indicates whether the name + // should be shown or hidden. + decl_print_options.SetHideName(!ShouldShowName()); + StreamString dest_stream; if (m_options.m_decl_printing_helper(type_name_cstr, var_name_cstr, - m_options, dest_stream)) { + decl_print_options, dest_stream)) { decl_printed = true; m_stream->PutCString(dest_stream.GetString()); }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits