diff options
Diffstat (limited to 'llvm/tools/llvm-pdbutil/DiffPrinter.cpp')
-rw-r--r-- | llvm/tools/llvm-pdbutil/DiffPrinter.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/llvm/tools/llvm-pdbutil/DiffPrinter.cpp b/llvm/tools/llvm-pdbutil/DiffPrinter.cpp index 45641e2e4b0..dd61cc18259 100644 --- a/llvm/tools/llvm-pdbutil/DiffPrinter.cpp +++ b/llvm/tools/llvm-pdbutil/DiffPrinter.cpp @@ -6,18 +6,31 @@ using namespace llvm; using namespace llvm::pdb; -static void setColor(llvm::raw_ostream &OS, DiffResult Result) { - switch (Result) { - case DiffResult::IDENTICAL: - OS.changeColor(raw_ostream::Colors::GREEN, false); - break; - case DiffResult::EQUIVALENT: - OS.changeColor(raw_ostream::Colors::YELLOW, true); - break; - default: - OS.changeColor(raw_ostream::Colors::RED, false); - break; +namespace { +struct Colorize { + Colorize(raw_ostream &OS, DiffResult Result) : OS(OS) { + if (!OS.has_colors()) + return; + switch (Result) { + case DiffResult::IDENTICAL: + OS.changeColor(raw_ostream::Colors::GREEN, false); + break; + case DiffResult::EQUIVALENT: + OS.changeColor(raw_ostream::Colors::YELLOW, true); + break; + default: + OS.changeColor(raw_ostream::Colors::RED, false); + break; + } + } + + ~Colorize() { + if (OS.has_colors()) + OS.resetColor(); } + + raw_ostream &OS; +}; } DiffPrinter::DiffPrinter(uint32_t Indent, StringRef Header, @@ -124,9 +137,8 @@ void DiffPrinter::printValue(StringRef Value, DiffResult C, AlignStyle Style, std::string FormattedItem = formatv("{0}", fmt_align(Value, Style, Width)).str(); if (C != DiffResult::UNSPECIFIED) { - setColor(OS, C); + Colorize Color(OS, C); OS << FormattedItem; - OS.resetColor(); } else OS << FormattedItem; if (Style == AlignStyle::Right) |