Author: Dave Lee Date: 2023-03-28T09:38:46-07:00 New Revision: 51dd8a20c1c32c60d03719e0e40bbc8e6c125477
URL: https://github.com/llvm/llvm-project/commit/51dd8a20c1c32c60d03719e0e40bbc8e6c125477 DIFF: https://github.com/llvm/llvm-project/commit/51dd8a20c1c32c60d03719e0e40bbc8e6c125477.diff LOG: [lldb] Fix value printing for a specific case Fixes printing of spaces in cases where the following are true: 1. Persistent results are disabled 2. The type has a summary string As reported by @jgorbe in D146783, two spaces were being printed before the summary string, and no spaces were printed after. Differential Revision: https://reviews.llvm.org/D147006 Added: Modified: lldb/include/lldb/DataFormatters/ValueObjectPrinter.h lldb/source/DataFormatters/ValueObjectPrinter.cpp lldb/test/API/commands/dwim-print/TestDWIMPrint.py Removed: ################################################################################ diff --git a/lldb/include/lldb/DataFormatters/ValueObjectPrinter.h b/lldb/include/lldb/DataFormatters/ValueObjectPrinter.h index e1a4b8e12e59c..a4946a20591a5 100644 --- a/lldb/include/lldb/DataFormatters/ValueObjectPrinter.h +++ b/lldb/include/lldb/DataFormatters/ValueObjectPrinter.h @@ -98,7 +98,7 @@ class ValueObjectPrinter { ValueObject *GetValueObjectForChildrenGeneration(); - void PrintChildrenPreamble(); + void PrintChildrenPreamble(bool value_printed, bool summary_printed); void PrintChildrenPostamble(bool print_dotdotdot); diff --git a/lldb/source/DataFormatters/ValueObjectPrinter.cpp b/lldb/source/DataFormatters/ValueObjectPrinter.cpp index 5915c04a69b06..30f69d89fc5a3 100644 --- a/lldb/source/DataFormatters/ValueObjectPrinter.cpp +++ b/lldb/source/DataFormatters/ValueObjectPrinter.cpp @@ -445,7 +445,9 @@ bool ValueObjectPrinter::PrintValueAndSummaryIfNeeded(bool &value_printed, } if (m_summary.size()) { - m_stream->Printf(" %s", m_summary.c_str()); + if (ShouldShowName() || value_printed) + m_stream->PutChar(' '); + m_stream->PutCString(m_summary); summary_printed = true; } } @@ -560,7 +562,8 @@ ValueObject *ValueObjectPrinter::GetValueObjectForChildrenGeneration() { return m_valobj; } -void ValueObjectPrinter::PrintChildrenPreamble() { +void ValueObjectPrinter::PrintChildrenPreamble(bool value_printed, + bool summary_printed) { if (m_options.m_flat_output) { if (ShouldPrintValueObject()) m_stream->EOL(); @@ -568,7 +571,7 @@ void ValueObjectPrinter::PrintChildrenPreamble() { if (ShouldPrintValueObject()) { if (IsRef()) { m_stream->PutCString(": "); - } else if (ShouldShowName()) { + } else if (value_printed || summary_printed || ShouldShowName()) { m_stream->PutChar(' '); } m_stream->PutCString("{\n"); @@ -694,7 +697,7 @@ void ValueObjectPrinter::PrintChildren( for (size_t idx = 0; idx < num_children; ++idx) { if (ValueObjectSP child_sp = GenerateChild(synth_m_valobj, idx)) { if (!any_children_printed) { - PrintChildrenPreamble(); + PrintChildrenPreamble(value_printed, summary_printed); any_children_printed = true; } PrintChild(child_sp, curr_ptr_depth); diff --git a/lldb/test/API/commands/dwim-print/TestDWIMPrint.py b/lldb/test/API/commands/dwim-print/TestDWIMPrint.py index b3e3f46ebc83a..26736d5127386 100644 --- a/lldb/test/API/commands/dwim-print/TestDWIMPrint.py +++ b/lldb/test/API/commands/dwim-print/TestDWIMPrint.py @@ -122,3 +122,12 @@ def test_nested_values(self): self.runCmd("settings set auto-one-line-summaries false") self._expect_cmd(f"dwim-print s", "frame variable") self._expect_cmd(f"dwim-print (struct Structure)s", "expression") + + def test_summary_strings(self): + """Test dwim-print with nested values (structs, etc).""" + self.build() + lldbutil.run_to_source_breakpoint(self, "// break here", lldb.SBFileSpec("main.c")) + self.runCmd("settings set auto-one-line-summaries false") + self.runCmd("type summary add -e -s 'stub summary' Structure") + self._expect_cmd(f"dwim-print s", "frame variable") + self._expect_cmd(f"dwim-print (struct Structure)s", "expression") _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits