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
This commit is contained in:
Benjamin Kramer 2012-10-18 20:09:54 +00:00
parent 5ea6969422
commit fce09f139c
1 changed files with 15 additions and 12 deletions

View File

@ -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.