summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-pdbutil/DiffPrinter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-pdbutil/DiffPrinter.cpp')
-rw-r--r--llvm/tools/llvm-pdbutil/DiffPrinter.cpp38
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)
OpenPOWER on IntegriCloud