From: Vedant Kumar Date: Sun, 26 Jun 2016 02:45:13 +0000 (+0000) Subject: [llvm-cov] Simplify the way expansion views are rendered (NFC) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e4356613e322b29f62a6cb34f1a237dcf8aad2f7;p=llvm [llvm-cov] Simplify the way expansion views are rendered (NFC) If a sub-view has already been rendered, it's helpful to re-render the expansion site before rendering the next expansion view. Make this fact explicit in the rendering interface, instead of hiding it behind an awkward Optional parameter. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273789 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/llvm-cov/SourceCoverageView.cpp b/tools/llvm-cov/SourceCoverageView.cpp index 45684d78e31..0c2a8878f3b 100644 --- a/tools/llvm-cov/SourceCoverageView.cpp +++ b/tools/llvm-cov/SourceCoverageView.cpp @@ -129,14 +129,22 @@ void SourceCoverageView::print(raw_ostream &OS, bool WholeFile, for (; NextESV != EndESV && NextESV->getLine() == LI.line_number(); ++NextESV) { renderViewDivider(OS, ViewDepth + 1); - ExpansionColumn = renderExpansionView( - OS, *NextESV, - RenderedSubView ? Optional({*LI, LI.line_number()}) - : Optional(), - WrappedSegment, LineSegments, ExpansionColumn, ViewDepth); + + // Re-render the current line and highlight the expansion range for + // this subview. + if (RenderedSubView) { + ExpansionColumn = NextESV->getStartCol(); + renderExpansionSite( + OS, *NextESV, {*LI, LI.line_number()}, WrappedSegment, LineSegments, + ExpansionColumn, ViewDepth); + renderViewDivider(OS, ViewDepth + 1); + } + + renderExpansionView(OS, *NextESV, ViewDepth + 1); RenderedSubView = true; } for (; NextISV != EndISV && NextISV->Line == LI.line_number(); ++NextISV) { + renderViewDivider(OS, ViewDepth + 1); renderInstantiationView(OS, *NextISV, ViewDepth + 1); RenderedSubView = true; } diff --git a/tools/llvm-cov/SourceCoverageView.h b/tools/llvm-cov/SourceCoverageView.h index 763529a476b..03c07422964 100644 --- a/tools/llvm-cov/SourceCoverageView.h +++ b/tools/llvm-cov/SourceCoverageView.h @@ -16,7 +16,6 @@ #include "CoverageViewOptions.h" #include "llvm/ProfileData/Coverage/CoverageMapping.h" -#include "llvm/ADT/Optional.h" #include "llvm/Support/MemoryBuffer.h" #include @@ -163,16 +162,18 @@ protected: CoverageSegmentArray Segments, unsigned ViewDepth) = 0; - /// \brief Render an expansion view. If the expansion site must be re-rendered - /// for clarity, it is passed in via \p FirstLine. - virtual unsigned - renderExpansionView(raw_ostream &OS, ExpansionView &ESV, - Optional FirstLine, + /// \brief Render the site of an expansion. + virtual void + renderExpansionSite(raw_ostream &OS, ExpansionView &ESV, LineRef L, const coverage::CoverageSegment *WrappedSegment, CoverageSegmentArray Segments, unsigned ExpansionCol, unsigned ViewDepth) = 0; - /// \brief Render an instantiation view. + /// \brief Render an expansion view and any nested views. + virtual void renderExpansionView(raw_ostream &OS, ExpansionView &ESV, + unsigned ViewDepth) = 0; + + /// \brief Render an instantiation view and any nested views. virtual void renderInstantiationView(raw_ostream &OS, InstantiationView &ISV, unsigned ViewDepth) = 0; diff --git a/tools/llvm-cov/SourceCoverageViewText.cpp b/tools/llvm-cov/SourceCoverageViewText.cpp index e02f4b1ae42..0757a4ebd95 100644 --- a/tools/llvm-cov/SourceCoverageViewText.cpp +++ b/tools/llvm-cov/SourceCoverageViewText.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "SourceCoverageViewText.h" +#include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringExtras.h" @@ -156,37 +157,29 @@ void SourceCoverageViewText::renderRegionMarkers( << formatCount(S->Count) << (S->IsRegionEntry ? "\n" : " (pop)\n"); } -unsigned SourceCoverageViewText::renderExpansionView( - raw_ostream &OS, ExpansionView &ESV, Optional FirstLine, +void SourceCoverageViewText::renderExpansionSite( + raw_ostream &OS, ExpansionView &ESV, LineRef L, const coverage::CoverageSegment *WrappedSegment, CoverageSegmentArray Segments, unsigned ExpansionCol, unsigned ViewDepth) { - unsigned NextExpansionCol = ExpansionCol; - - if (FirstLine.hasValue()) { - // Re-render the current line and highlight the expansion range for - // this subview. - NextExpansionCol = ESV.getStartCol(); - renderLinePrefix(OS, ViewDepth); - OS.indent(getCombinedColumnWidth(getOptions()) + (ViewDepth == 0 ? 0 : 1)); - renderLine(OS, *FirstLine, WrappedSegment, Segments, ExpansionCol, - ViewDepth); - renderViewDivider(OS, ViewDepth + 1); - } + renderLinePrefix(OS, ViewDepth); + OS.indent(getCombinedColumnWidth(getOptions()) + (ViewDepth == 0 ? 0 : 1)); + renderLine(OS, L, WrappedSegment, Segments, ExpansionCol, ViewDepth); +} +void SourceCoverageViewText::renderExpansionView(raw_ostream &OS, + ExpansionView &ESV, + unsigned ViewDepth) { // Render the child subview. if (getOptions().Debug) errs() << "Expansion at line " << ESV.getLine() << ", " << ESV.getStartCol() << " -> " << ESV.getEndCol() << '\n'; ESV.View->print(OS, /*WholeFile=*/false, /*ShowSourceName=*/false, ViewDepth + 1); - - return NextExpansionCol; } void SourceCoverageViewText::renderInstantiationView(raw_ostream &OS, InstantiationView &ISV, unsigned ViewDepth) { - renderViewDivider(OS, ViewDepth); renderLinePrefix(OS, ViewDepth); OS << ' '; ISV.View->print(OS, /*WholeFile=*/false, /*ShowSourceName=*/true, ViewDepth); diff --git a/tools/llvm-cov/SourceCoverageViewText.h b/tools/llvm-cov/SourceCoverageViewText.h index 36b7c9659c2..17f2e797abd 100644 --- a/tools/llvm-cov/SourceCoverageViewText.h +++ b/tools/llvm-cov/SourceCoverageViewText.h @@ -31,12 +31,13 @@ class SourceCoverageViewText : public SourceCoverageView { CoverageSegmentArray Segments, unsigned ExpansionCol, unsigned ViewDepth) override; - unsigned renderExpansionView(raw_ostream &OS, ExpansionView &ESV, - Optional FirstLine, - const coverage::CoverageSegment *WrappedSegment, - CoverageSegmentArray Segments, - unsigned ExpansionCol, - unsigned ViewDepth) override; + void renderExpansionSite(raw_ostream &OS, ExpansionView &ESV, LineRef L, + const coverage::CoverageSegment *WrappedSegment, + CoverageSegmentArray Segments, unsigned ExpansionCol, + unsigned ViewDepth) override; + + void renderExpansionView(raw_ostream &OS, ExpansionView &ESV, + unsigned ViewDepth) override; void renderInstantiationView(raw_ostream &OS, InstantiationView &ISV, unsigned ViewDepth) override;