diff options
author | Vedant Kumar <vsk@apple.com> | 2016-06-26 02:45:13 +0000 |
---|---|---|
committer | Vedant Kumar <vsk@apple.com> | 2016-06-26 02:45:13 +0000 |
commit | e4356613e322b29f62a6cb34f1a237dcf8aad2f7 (patch) | |
tree | d66f7dc5efb656da4c48efe9c303b4690dab8cfd | |
parent | 9a17918d1cf510fd0ecf20d0fcb17128036fd203 (diff) |
[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<LineRef> parameter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273789 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | tools/llvm-cov/SourceCoverageView.cpp | 18 | ||||
-rw-r--r-- | tools/llvm-cov/SourceCoverageView.h | 15 | ||||
-rw-r--r-- | tools/llvm-cov/SourceCoverageViewText.cpp | 27 | ||||
-rw-r--r-- | tools/llvm-cov/SourceCoverageViewText.h | 13 |
4 files changed, 38 insertions, 35 deletions
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<LineRef>({*LI, LI.line_number()}) - : Optional<LineRef>(), - 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 <vector> @@ -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<LineRef> 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<LineRef> 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<LineRef> 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; |