diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-10-18 20:09:54 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-10-18 20:09:54 +0000 |
commit | fce09f139ca076f1c59515ca3a44f272788faaf8 (patch) | |
tree | 3411c34c09c1817c8a4d9f3bf78997322c27fed3 /clang/lib/Frontend/TextDiagnostic.cpp | |
parent | 5ea696942211abffd31ccd14c6298c8e0741f146 (diff) | |
download | bcm5719-llvm-fce09f139ca076f1c59515ca3a44f272788faaf8.tar.gz bcm5719-llvm-fce09f139ca076f1c59515ca3a44f272788faaf8.zip |
Emit diagnostics in chunks even when we're trying to print colored template diffs.
char-by-char is really slow on an unbuffered stream.
llvm-svn: 166218
Diffstat (limited to 'clang/lib/Frontend/TextDiagnostic.cpp')
-rw-r--r-- | clang/lib/Frontend/TextDiagnostic.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/clang/lib/Frontend/TextDiagnostic.cpp b/clang/lib/Frontend/TextDiagnostic.cpp index a8a5613eaac..e47b5687ff4 100644 --- a/clang/lib/Frontend/TextDiagnostic.cpp +++ b/clang/lib/Frontend/TextDiagnostic.cpp @@ -43,19 +43,22 @@ static const enum raw_ostream::Colors savedColor = /// \brief Add highlights to differences in template strings. static void applyTemplateHighlighting(raw_ostream &OS, StringRef Str, bool &Normal, bool Bold) { - for (unsigned i = 0, e = Str.size(); i < e; ++i) - if (Str[i] != ToggleHighlight) { - OS << Str[i]; - } else { - if (Normal) - OS.changeColor(templateColor, true); - else { - OS.resetColor(); - if (Bold) - OS.changeColor(savedColor, true); - } - Normal = !Normal; + while (1) { + size_t Pos = Str.find(ToggleHighlight); + OS << Str.slice(0, Pos); + if (Pos == StringRef::npos) + break; + + Str = Str.substr(Pos + 1); + if (Normal) + OS.changeColor(templateColor, true); + else { + OS.resetColor(); + if (Bold) + OS.changeColor(savedColor, true); } + Normal = !Normal; + } } /// \brief Number of spaces to indent when word-wrapping. |