X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=tools%2Fllvm-cov%2FSourceCoverageView.h;h=54a11d8c51caae850ebae6a8e8e89568be58c0b2;hb=b3edb564859b93eabc86392c38d925384f136e0e;hp=80669d37f7692e2bbc7696a365b2db031429b672;hpb=cc0c4e7cace9bd5db12633cfdb749ef43d8c738d;p=oota-llvm.git diff --git a/tools/llvm-cov/SourceCoverageView.h b/tools/llvm-cov/SourceCoverageView.h index 80669d37f76..54a11d8c51c 100644 --- a/tools/llvm-cov/SourceCoverageView.h +++ b/tools/llvm-cov/SourceCoverageView.h @@ -77,7 +77,7 @@ struct InstantiationView { /// \brief A code coverage view of a specific source file. /// It can have embedded coverage views. class SourceCoverageView { -public: +private: /// \brief Coverage information for a single line. struct LineCoverageInfo { uint64_t ExecutionCount; @@ -98,90 +98,22 @@ public: void addRegionCount(uint64_t Count) { Mapped = true; - ExecutionCount = Count; - } - }; - - /// \brief A marker that points at the start - /// of a specific mapping region. - struct RegionMarker { - unsigned Line, Column; - uint64_t ExecutionCount; - - RegionMarker(unsigned Line, unsigned Column, uint64_t Value) - : Line(Line), Column(Column), ExecutionCount(Value) {} - }; - - /// \brief A single line source range used to - /// render highlighted text. - struct HighlightRange { - enum HighlightKind { - /// The code that wasn't executed. - NotCovered, - - /// The region of code that was expanded. - Expanded - }; - HighlightKind Kind; - unsigned Line; - unsigned ColumnStart; - unsigned ColumnEnd; - - HighlightRange(unsigned Line, unsigned ColumnStart, unsigned ColumnEnd, - HighlightKind Kind = NotCovered) - : Kind(Kind), Line(Line), ColumnStart(ColumnStart), - ColumnEnd(ColumnEnd) {} - - bool operator<(const HighlightRange &Other) const { - if (Line == Other.Line) - return ColumnStart < Other.ColumnStart; - return Line < Other.Line; - } - - bool columnStartOverlaps(const HighlightRange &Other) const { - return ColumnStart <= Other.ColumnStart && ColumnEnd > Other.ColumnStart; - } - bool columnEndOverlaps(const HighlightRange &Other) const { - return ColumnEnd >= Other.ColumnEnd && ColumnStart < Other.ColumnEnd; - } - bool contains(const HighlightRange &Other) const { - if (Line != Other.Line) - return false; - return ColumnStart <= Other.ColumnStart && ColumnEnd >= Other.ColumnEnd; - } - - bool overlaps(const HighlightRange &Other) const { - if (Line != Other.Line) - return false; - return columnStartOverlaps(Other) || columnEndOverlaps(Other); + if (!RegionCount) + ExecutionCount = Count; } }; -private: const MemoryBuffer &File; const CoverageViewOptions &Options; - unsigned LineOffset; + std::unique_ptr RegionManager; std::vector ExpansionSubViews; std::vector InstantiationSubViews; - std::vector LineStats; - std::vector HighlightRanges; - std::vector Markers; - - /// \brief Initialize the visible source range for this view. - void setUpVisibleRange(SourceCoverageDataManager &Data); - - /// \brief Create the line coverage information using the coverage data. - void createLineCoverageInfo(SourceCoverageDataManager &Data); - - /// \brief Create the line highlighting ranges using the coverage data. - void createHighlightRanges(SourceCoverageDataManager &Data); - - /// \brief Create the region markers using the coverage data. - void createRegionMarkers(SourceCoverageDataManager &Data); /// \brief Render a source line with highlighting. - void renderLine(raw_ostream &OS, StringRef Line, - ArrayRef Ranges); + void renderLine(raw_ostream &OS, StringRef Line, int64_t LineNumber, + const CoverageSegment *WrappedSegment, + ArrayRef Segments, + unsigned ExpansionCol); void renderIndent(raw_ostream &OS, unsigned Level); @@ -194,7 +126,8 @@ private: void renderLineNumberColumn(raw_ostream &OS, unsigned LineNo); /// \brief Render all the region's execution counts on a line. - void renderRegionMarkers(raw_ostream &OS, ArrayRef Regions); + void renderRegionMarkers(raw_ostream &OS, + ArrayRef Segments); static const unsigned LineCoverageColumnWidth = 7; static const unsigned LineNumberColumnWidth = 5; @@ -202,7 +135,7 @@ private: public: SourceCoverageView(const MemoryBuffer &File, const CoverageViewOptions &Options) - : File(File), Options(Options), LineOffset(0) {} + : File(File), Options(Options) {} const CoverageViewOptions &getOptions() const { return Options; } @@ -220,11 +153,13 @@ public: /// \brief Print the code coverage information for a specific /// portion of a source file to the output stream. - void render(raw_ostream &OS, unsigned IndentLevel = 0); + void render(raw_ostream &OS, bool WholeFile, unsigned IndentLevel = 0); /// \brief Load the coverage information required for rendering /// from the mapping regions in the data manager. - void load(SourceCoverageDataManager &Data); + void load(std::unique_ptr Data) { + RegionManager = std::move(Data); + } }; } // namespace llvm