From ed560ae76a2f5131498e22f99a80a2e0e6527a23 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Fri, 2 Aug 2019 07:22:34 +0000 Subject: [PATCH] Revert r367649: Improve raw_ostream so that you can "write" colors using operator<< This reverts commit r367649 in an attempt to unbreak Windows bots. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367658 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/FormattedStream.h | 4 +-- include/llvm/Support/WithColor.h | 5 +-- include/llvm/Support/raw_ostream.h | 41 +++++------------------ lib/Support/WithColor.cpp | 7 ++-- lib/Support/raw_ostream.cpp | 41 ++++------------------- tools/llvm-cov/CoverageReport.cpp | 2 +- tools/llvm-cov/CoverageViewOptions.h | 2 +- tools/llvm-cov/RenderingSupport.h | 2 +- tools/llvm-cov/SourceCoverageViewText.cpp | 2 +- tools/llvm-cov/llvm-cov.cpp | 11 +++--- tools/llvm-mca/Views/TimelineView.cpp | 6 ++-- utils/FileCheck/FileCheck.cpp | 5 +-- 12 files changed, 39 insertions(+), 89 deletions(-) diff --git a/include/llvm/Support/FormattedStream.h b/include/llvm/Support/FormattedStream.h index a029925a390..b49c8d86531 100644 --- a/include/llvm/Support/FormattedStream.h +++ b/include/llvm/Support/FormattedStream.h @@ -121,8 +121,8 @@ public: return *this; } - raw_ostream &changeColor(Color C, bool Bold, bool BG) override { - TheStream->changeColor(C, Bold, BG); + raw_ostream &changeColor(enum Colors Color, bool Bold, bool BG) override { + TheStream->changeColor(Color, Bold, BG); return *this; } diff --git a/include/llvm/Support/WithColor.h b/include/llvm/Support/WithColor.h index ab9f524de19..f4e10758117 100644 --- a/include/llvm/Support/WithColor.h +++ b/include/llvm/Support/WithColor.h @@ -53,7 +53,8 @@ public: /// @param BG If true, change the background, default: change foreground /// @param DisableColors Whether to ignore color changes regardless of -color /// and support in OS - WithColor(raw_ostream &OS, raw_ostream::Color Color = raw_ostream::SAVEDCOLOR, + WithColor(raw_ostream &OS, + raw_ostream::Colors Color = raw_ostream::SAVEDCOLOR, bool Bold = false, bool BG = false, bool DisableColors = false) : OS(OS), DisableColors(DisableColors) { changeColor(Color, Bold, BG); @@ -101,7 +102,7 @@ public: /// change only the bold attribute, and keep colors untouched /// @param Bold Bold/brighter text, default false /// @param BG If true, change the background, default: change foreground - WithColor &changeColor(raw_ostream::Color Color, bool Bold = false, + WithColor &changeColor(raw_ostream::Colors Color, bool Bold = false, bool BG = false); /// Reset the colors to terminal defaults. Call this when you are done diff --git a/include/llvm/Support/raw_ostream.h b/include/llvm/Support/raw_ostream.h index f4321b0195a..48bb623b063 100644 --- a/include/llvm/Support/raw_ostream.h +++ b/include/llvm/Support/raw_ostream.h @@ -72,7 +72,7 @@ private: public: // color order matches ANSI escape sequence, don't change - enum class Color { + enum Colors { BLACK = 0, RED, GREEN, @@ -81,21 +81,9 @@ public: MAGENTA, CYAN, WHITE, - SAVEDCOLOR, - RESET, + SAVEDCOLOR }; - static const Color BLACK = Color::BLACK; - static const Color RED = Color::RED; - static const Color GREEN = Color::GREEN; - static const Color YELLOW = Color::YELLOW; - static const Color BLUE = Color::BLUE; - static const Color MAGENTA = Color::MAGENTA; - static const Color CYAN = Color::CYAN; - static const Color WHITE = Color::WHITE; - static const Color SAVEDCOLOR = Color::SAVEDCOLOR; - static const Color RESET = Color::RESET; - explicit raw_ostream(bool unbuffered = false) : BufferMode(unbuffered ? Unbuffered : InternalBuffer) { // Start out ready to flush. @@ -226,9 +214,6 @@ public: /// Output \p N in hexadecimal, without any prefix or padding. raw_ostream &write_hex(unsigned long long N); - // Change the foreground color of text. - raw_ostream &operator<<(Color C); - /// Output a formatted UUID with dash separators. using uuid_t = uint8_t[16]; raw_ostream &write_uuid(const uuid_t UUID); @@ -263,14 +248,15 @@ public: /// Changes the foreground color of text that will be output from this point /// forward. - /// @param C ANSI color to use, the special SAVEDCOLOR can be used to + /// @param Color ANSI color to use, the special SAVEDCOLOR can be used to /// change only the bold attribute, and keep colors untouched /// @param Bold bold/brighter text, default false /// @param BG if true change the background, default: change foreground /// @returns itself so it can be used within << invocations - virtual raw_ostream &changeColor(Color C, bool Bold = false, + virtual raw_ostream &changeColor(enum Colors Color, + bool Bold = false, bool BG = false) { - (void)C; + (void)Color; (void)Bold; (void)BG; return *this; @@ -291,11 +277,6 @@ public: /// This function determines if this stream is displayed and supports colors. virtual bool has_colors() const { return is_displayed(); } - // Enable or disable colors. Once disable_colors() is called, - // changeColor() has no effect until enable_colors() is called. - virtual void enable_colors() {} - virtual void disable_colors() {} - //===--------------------------------------------------------------------===// // Subclass Interface //===--------------------------------------------------------------------===// @@ -387,8 +368,6 @@ class raw_fd_ostream : public raw_pwrite_stream { bool SupportsSeeking; - bool ColorEnabled; - #ifdef _WIN32 /// True if this fd refers to a Windows console device. Mintty and other /// terminal emulators are TTYs, but they are not consoles. @@ -453,8 +432,8 @@ public: /// to the offset specified from the beginning of the file. uint64_t seek(uint64_t off); - raw_ostream &changeColor(Color C, bool bold = false, - bool bg = false) override; + raw_ostream &changeColor(enum Colors colors, bool bold=false, + bool bg=false) override; raw_ostream &resetColor() override; raw_ostream &reverseColor() override; @@ -463,10 +442,6 @@ public: bool has_colors() const override; - void enable_colors() override { ColorEnabled = true; } - - void disable_colors() override { ColorEnabled = false; } - std::error_code error() const { return EC; } /// Return the value of the flag in this raw_fd_ostream indicating whether an diff --git a/lib/Support/WithColor.cpp b/lib/Support/WithColor.cpp index 1c380c65902..345dd9cf394 100644 --- a/lib/Support/WithColor.cpp +++ b/lib/Support/WithColor.cpp @@ -22,8 +22,6 @@ WithColor::WithColor(raw_ostream &OS, HighlightColor Color, bool DisableColors) : OS(OS), DisableColors(DisableColors) { // Detect color from terminal type unless the user passed the --color option. if (colorsEnabled()) { - OS.enable_colors(); - switch (Color) { case HighlightColor::Address: OS.changeColor(raw_ostream::YELLOW); @@ -106,9 +104,10 @@ bool WithColor::colorsEnabled() { return UseColor == cl::BOU_TRUE; } -WithColor &WithColor::changeColor(raw_ostream::Color C, bool Bold, bool BG) { +WithColor &WithColor::changeColor(raw_ostream::Colors Color, bool Bold, + bool BG) { if (colorsEnabled()) - OS.changeColor(C, Bold, BG); + OS.changeColor(Color, Bold, BG); return *this; } diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index da24fe29471..2baccaa0cbd 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -65,17 +65,6 @@ using namespace llvm; -const raw_ostream::Color raw_ostream::BLACK; -const raw_ostream::Color raw_ostream::RED; -const raw_ostream::Color raw_ostream::GREEN; -const raw_ostream::Color raw_ostream::YELLOW; -const raw_ostream::Color raw_ostream::BLUE; -const raw_ostream::Color raw_ostream::MAGENTA; -const raw_ostream::Color raw_ostream::CYAN; -const raw_ostream::Color raw_ostream::WHITE; -const raw_ostream::Color raw_ostream::SAVEDCOLOR; -const raw_ostream::Color raw_ostream::RESET; - raw_ostream::~raw_ostream() { // raw_ostream's subclasses should take care to flush the buffer // in their destructors. @@ -144,14 +133,6 @@ raw_ostream &raw_ostream::write_hex(unsigned long long N) { return *this; } -raw_ostream &raw_ostream::operator<<(Color C) { - if (C == Color::RESET) - resetColor(); - else - changeColor(C); - return *this; -} - raw_ostream &raw_ostream::write_uuid(const uuid_t UUID) { for (int Idx = 0; Idx < 16; ++Idx) { *this << format("%02" PRIX32, UUID[Idx]); @@ -571,9 +552,8 @@ raw_fd_ostream::raw_fd_ostream(StringRef Filename, std::error_code &EC, /// FD is the file descriptor that this writes to. If ShouldClose is true, this /// closes the file when the stream is destroyed. raw_fd_ostream::raw_fd_ostream(int fd, bool shouldClose, bool unbuffered) - : raw_pwrite_stream(unbuffered), FD(fd), ShouldClose(shouldClose), - ColorEnabled(sys::Process::FileDescriptorHasColors(fd)) { - if (FD < 0) { + : raw_pwrite_stream(unbuffered), FD(fd), ShouldClose(shouldClose) { + if (FD < 0 ) { ShouldClose = false; return; } @@ -802,16 +782,13 @@ size_t raw_fd_ostream::preferred_buffer_size() const { #endif } -raw_ostream &raw_fd_ostream::changeColor(Color color, bool bold, bool bg) { - if (!ColorEnabled) - return *this; - +raw_ostream &raw_fd_ostream::changeColor(enum Colors colors, bool bold, + bool bg) { if (sys::Process::ColorNeedsFlush()) flush(); const char *colorcode = - (color == Color::SAVEDCOLOR) - ? sys::Process::OutputBold(bg) - : sys::Process::OutputColor(static_cast(color), bold, bg); + (colors == SAVEDCOLOR) ? sys::Process::OutputBold(bg) + : sys::Process::OutputColor(colors, bold, bg); if (colorcode) { size_t len = strlen(colorcode); write(colorcode, len); @@ -822,9 +799,6 @@ raw_ostream &raw_fd_ostream::changeColor(Color color, bool bold, bool bg) { } raw_ostream &raw_fd_ostream::resetColor() { - if (!ColorEnabled) - return *this; - if (sys::Process::ColorNeedsFlush()) flush(); const char *colorcode = sys::Process::ResetColor(); @@ -838,9 +812,6 @@ raw_ostream &raw_fd_ostream::resetColor() { } raw_ostream &raw_fd_ostream::reverseColor() { - if (!ColorEnabled) - return *this; - if (sys::Process::ColorNeedsFlush()) flush(); const char *colorcode = sys::Process::OutputReverse(); diff --git a/tools/llvm-cov/CoverageReport.cpp b/tools/llvm-cov/CoverageReport.cpp index 1750d18d4e0..82259542c59 100644 --- a/tools/llvm-cov/CoverageReport.cpp +++ b/tools/llvm-cov/CoverageReport.cpp @@ -111,7 +111,7 @@ void renderDivider(ArrayRef ColumnWidths, raw_ostream &OS) { /// Return the color which correponds to the coverage percentage of a /// certain metric. template -raw_ostream::Color determineCoveragePercentageColor(const T &Info) { +raw_ostream::Colors determineCoveragePercentageColor(const T &Info) { if (Info.isFullyCovered()) return raw_ostream::GREEN; return Info.getPercentCovered() >= 80.0 ? raw_ostream::YELLOW diff --git a/tools/llvm-cov/CoverageViewOptions.h b/tools/llvm-cov/CoverageViewOptions.h index 3dbb0131ddb..dde0c692ab0 100644 --- a/tools/llvm-cov/CoverageViewOptions.h +++ b/tools/llvm-cov/CoverageViewOptions.h @@ -46,7 +46,7 @@ struct CoverageViewOptions { /// Change the output's stream color if the colors are enabled. ColoredRawOstream colored_ostream(raw_ostream &OS, - raw_ostream::Color Color) const { + raw_ostream::Colors Color) const { return llvm::colored_ostream(OS, Color, Colors); } diff --git a/tools/llvm-cov/RenderingSupport.h b/tools/llvm-cov/RenderingSupport.h index b25792e2c4b..0674fbac9a3 100644 --- a/tools/llvm-cov/RenderingSupport.h +++ b/tools/llvm-cov/RenderingSupport.h @@ -47,7 +47,7 @@ inline raw_ostream &operator<<(const ColoredRawOstream &OS, T &&Value) { /// Change the color of the output stream if the `IsColorUsed` flag /// is true. Returns an object that resets the color when destroyed. inline ColoredRawOstream colored_ostream(raw_ostream &OS, - raw_ostream::Color Color, + raw_ostream::Colors Color, bool IsColorUsed = true, bool Bold = false, bool BG = false) { if (IsColorUsed) diff --git a/tools/llvm-cov/SourceCoverageViewText.cpp b/tools/llvm-cov/SourceCoverageViewText.cpp index f73b91a8511..fcabee2ee69 100644 --- a/tools/llvm-cov/SourceCoverageViewText.cpp +++ b/tools/llvm-cov/SourceCoverageViewText.cpp @@ -101,7 +101,7 @@ void SourceCoverageViewText::renderLine(raw_ostream &OS, LineRef L, auto *WrappedSegment = LCS.getWrappedSegment(); CoverageSegmentArray Segments = LCS.getLineSegments(); - Optional Highlight; + Optional Highlight; SmallVector, 2> HighlightedRanges; // The first segment overlaps from a previous line, so we treat it specially. diff --git a/tools/llvm-cov/llvm-cov.cpp b/tools/llvm-cov/llvm-cov.cpp index dabb8afedc8..172ec9f3ced 100644 --- a/tools/llvm-cov/llvm-cov.cpp +++ b/tools/llvm-cov/llvm-cov.cpp @@ -83,10 +83,13 @@ int main(int argc, const char **argv) { } } - if (argc > 1) - errs() << raw_ostream::RED << "Unrecognized command: " << argv[1] << ".\n\n" - << raw_ostream::RESET; - + if (argc > 1) { + if (sys::Process::StandardErrHasColors()) + errs().changeColor(raw_ostream::RED); + errs() << "Unrecognized command: " << argv[1] << ".\n\n"; + if (sys::Process::StandardErrHasColors()) + errs().resetColor(); + } helpMain(argc, argv); return 1; } diff --git a/tools/llvm-mca/Views/TimelineView.cpp b/tools/llvm-mca/Views/TimelineView.cpp index 09b6b2a3efe..fe3f16ba344 100644 --- a/tools/llvm-mca/Views/TimelineView.cpp +++ b/tools/llvm-mca/Views/TimelineView.cpp @@ -103,8 +103,8 @@ void TimelineView::onEvent(const HWInstructionEvent &Event) { LastCycle = std::max(LastCycle, CurrentCycle); } -static raw_ostream::Color chooseColor(unsigned CumulativeCycles, - unsigned Executions, int BufferSize) { +static raw_ostream::Colors chooseColor(unsigned CumulativeCycles, + unsigned Executions, int BufferSize) { if (CumulativeCycles && BufferSize < 0) return raw_ostream::MAGENTA; unsigned Size = static_cast(BufferSize); @@ -120,7 +120,7 @@ static void tryChangeColor(raw_ostream &OS, unsigned Cycles, if (!OS.has_colors()) return; - raw_ostream::Color Color = chooseColor(Cycles, Executions, BufferSize); + raw_ostream::Colors Color = chooseColor(Cycles, Executions, BufferSize); if (Color == raw_ostream::SAVEDCOLOR) { OS.resetColor(); return; diff --git a/utils/FileCheck/FileCheck.cpp b/utils/FileCheck/FileCheck.cpp index b63447faa1c..d9cad13c465 100644 --- a/utils/FileCheck/FileCheck.cpp +++ b/utils/FileCheck/FileCheck.cpp @@ -138,11 +138,12 @@ struct MarkerStyle { /// The starting char (before tildes) for marking the line. char Lead; /// What color to use for this annotation. - raw_ostream::Color Color; + raw_ostream::Colors Color; /// A note to follow the marker, or empty string if none. std::string Note; MarkerStyle() {} - MarkerStyle(char Lead, raw_ostream::Color Color, const std::string &Note = "") + MarkerStyle(char Lead, raw_ostream::Colors Color, + const std::string &Note = "") : Lead(Lead), Color(Color), Note(Note) {} }; -- 2.40.0