aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2016-06-24 00:34:51 +0000
committerVedant Kumar <vsk@apple.com>2016-06-24 00:34:51 +0000
commit9d70d0b5ffe1e920ff28d506c8ddaefc5c51bb94 (patch)
treecc96ca39c86e29c58ef437be720034590fb64b3e /llvm/tools
parent60dcb48ad0ecc0b065ca55fdf70f4957518a4cc3 (diff)
downloadllvm-9d70d0b5ffe1e920ff28d506c8ddaefc5c51bb94.zip
llvm-9d70d0b5ffe1e920ff28d506c8ddaefc5c51bb94.tar.gz
llvm-9d70d0b5ffe1e920ff28d506c8ddaefc5c51bb94.tar.bz2
[llvm-cov] Add SourceNames to SourceCoverageViews, NFC
A SourceName can be a file or a function. It makes sense to attach this information to a SourceCoverageView, seeing as views (1) already point to the text corresponding to the relevant source code and (2) are already used to render that text along with the SourceNames. This is a nice cleanup which is independent of the upcoming html patch. While we're at it, document the fields in SourceCoverageView. llvm-svn: 273634
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/llvm-cov/CodeCoverage.cpp21
-rw-r--r--llvm/tools/llvm-cov/SourceCoverageView.cpp9
-rw-r--r--llvm/tools/llvm-cov/SourceCoverageView.h23
3 files changed, 37 insertions, 16 deletions
diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp
index 947bc7c..aa21561 100644
--- a/llvm/tools/llvm-cov/CodeCoverage.cpp
+++ b/llvm/tools/llvm-cov/CodeCoverage.cpp
@@ -133,7 +133,8 @@ CodeCoverageTool::attachExpansionSubViews(SourceCoverageView &View,
auto SubViewExpansions = ExpansionCoverage.getExpansions();
auto SubView = llvm::make_unique<SourceCoverageView>(
- SourceBuffer.get(), ViewOpts, std::move(ExpansionCoverage));
+ Expansion.Function.Name, SourceBuffer.get(), ViewOpts,
+ std::move(ExpansionCoverage));
attachExpansionSubViews(*SubView, SubViewExpansions, Coverage);
View.addExpansion(Expansion.Region, std::move(SubView));
}
@@ -151,7 +152,7 @@ CodeCoverageTool::createFunctionView(const FunctionRecord &Function,
auto Expansions = FunctionCoverage.getExpansions();
auto View = llvm::make_unique<SourceCoverageView>(
- SourceBuffer.get(), ViewOpts, std::move(FunctionCoverage));
+ Function.Name, SourceBuffer.get(), ViewOpts, std::move(FunctionCoverage));
attachExpansionSubViews(*View, Expansions, Coverage);
return View;
@@ -169,14 +170,15 @@ CodeCoverageTool::createSourceFileView(StringRef SourceFile,
auto Expansions = FileCoverage.getExpansions();
auto View = llvm::make_unique<SourceCoverageView>(
- SourceBuffer.get(), ViewOpts, std::move(FileCoverage));
+ SourceFile, SourceBuffer.get(), ViewOpts, std::move(FileCoverage));
attachExpansionSubViews(*View, Expansions, Coverage);
for (auto Function : Coverage.getInstantiations(SourceFile)) {
auto SubViewCoverage = Coverage.getCoverageForFunction(*Function);
auto SubViewExpansions = SubViewCoverage.getExpansions();
auto SubView = llvm::make_unique<SourceCoverageView>(
- SourceBuffer.get(), ViewOpts, std::move(SubViewCoverage));
+ Function->Name, SourceBuffer.get(), ViewOpts,
+ std::move(SubViewCoverage));
attachExpansionSubViews(*SubView, SubViewExpansions, Coverage);
if (SubView) {
@@ -426,9 +428,7 @@ int CodeCoverageTool::show(int argc, const char **argv,
outs() << "\n";
continue;
}
- ViewOpts.colored_ostream(outs(), raw_ostream::CYAN) << Function.Name
- << ":";
- outs() << "\n";
+ mainView->renderSourceName(outs());
mainView->render(outs(), /*WholeFile=*/false);
outs() << "\n";
}
@@ -452,10 +452,9 @@ int CodeCoverageTool::show(int argc, const char **argv,
continue;
}
- if (ShowFilenames) {
- ViewOpts.colored_ostream(outs(), raw_ostream::CYAN) << SourceFile << ":";
- outs() << "\n";
- }
+ if (ShowFilenames)
+ mainView->renderSourceName(outs());
+
mainView->render(outs(), /*Wholefile=*/true);
if (SourceFiles.size() > 1)
outs() << "\n";
diff --git a/llvm/tools/llvm-cov/SourceCoverageView.cpp b/llvm/tools/llvm-cov/SourceCoverageView.cpp
index 0d28006..fb5dcb3 100644
--- a/llvm/tools/llvm-cov/SourceCoverageView.cpp
+++ b/llvm/tools/llvm-cov/SourceCoverageView.cpp
@@ -250,9 +250,7 @@ void SourceCoverageView::render(raw_ostream &OS, bool WholeFile,
OS << "\n";
renderIndent(OS, NestedIndent);
OS << ' ';
- Options.colored_ostream(OS, raw_ostream::CYAN) << NextISV->FunctionName
- << ":";
- OS << "\n";
+ NextISV->View->renderSourceName(OS);
NextISV->View->render(OS, false, NestedIndent);
RenderedSubView = true;
}
@@ -262,3 +260,8 @@ void SourceCoverageView::render(raw_ostream &OS, bool WholeFile,
}
}
}
+
+void SourceCoverageView::renderSourceName(raw_ostream &OS) {
+ getOptions().colored_ostream(OS, raw_ostream::CYAN) << getSourceName()
+ << ":\n";
+}
diff --git a/llvm/tools/llvm-cov/SourceCoverageView.h b/llvm/tools/llvm-cov/SourceCoverageView.h
index 49a5f4ac..2e98151 100644
--- a/llvm/tools/llvm-cov/SourceCoverageView.h
+++ b/llvm/tools/llvm-cov/SourceCoverageView.h
@@ -101,10 +101,23 @@ struct LineCoverageStats {
/// It can have embedded coverage views.
class SourceCoverageView {
private:
+ /// A function or file name.
+ StringRef SourceName;
+
+ /// A memory buffer backing the source on display.
const MemoryBuffer &File;
+
+ /// Various options to guide the coverage renderer.
const CoverageViewOptions &Options;
+
+ /// Complete coverage information about the source on display.
coverage::CoverageData CoverageInfo;
+
+ /// A container for all expansions (e.g macros) in the source on display.
std::vector<ExpansionView> ExpansionSubViews;
+
+ /// A container for all instantiations (e.g template functions) in the source
+ /// on display.
std::vector<InstantiationView> InstantiationSubViews;
/// \brief Render a source line with highlighting.
@@ -132,10 +145,13 @@ private:
static const unsigned LineNumberColumnWidth = 5;
public:
- SourceCoverageView(const MemoryBuffer &File,
+ SourceCoverageView(StringRef SourceName, const MemoryBuffer &File,
const CoverageViewOptions &Options,
coverage::CoverageData &&CoverageInfo)
- : File(File), Options(Options), CoverageInfo(std::move(CoverageInfo)) {}
+ : SourceName(SourceName), File(File), Options(Options),
+ CoverageInfo(std::move(CoverageInfo)) {}
+
+ StringRef getSourceName() const { return SourceName; }
const CoverageViewOptions &getOptions() const { return Options; }
@@ -154,6 +170,9 @@ public:
/// \brief Print the code coverage information for a specific
/// portion of a source file to the output stream.
void render(raw_ostream &OS, bool WholeFile, unsigned IndentLevel = 0);
+
+ /// \brief Print the source name corresponding to this view.
+ void renderSourceName(raw_ostream &OS);
};
} // namespace llvm