2222
2323using namespace clang ;
2424
25- static const enum raw_ostream::Colors noteColor = raw_ostream::CYAN;
26- static const enum raw_ostream::Colors remarkColor =
27- raw_ostream::BLUE;
28- static const enum raw_ostream::Colors fixitColor =
29- raw_ostream::GREEN;
30- static const enum raw_ostream::Colors caretColor =
31- raw_ostream::GREEN;
32- static const enum raw_ostream::Colors warningColor =
33- raw_ostream::MAGENTA;
34- static const enum raw_ostream::Colors templateColor =
35- raw_ostream::CYAN;
36- static const enum raw_ostream::Colors errorColor = raw_ostream::RED;
37- static const enum raw_ostream::Colors fatalColor = raw_ostream::RED;
25+ static constexpr raw_ostream::Colors NoteColor = raw_ostream::CYAN;
26+ static constexpr raw_ostream::Colors RemarkColor = raw_ostream::BLUE;
27+ static constexpr raw_ostream::Colors FixitColor = raw_ostream::GREEN;
28+ static constexpr raw_ostream::Colors CaretColor = raw_ostream::GREEN;
29+ static constexpr raw_ostream::Colors WarningColor = raw_ostream::MAGENTA;
30+ static constexpr raw_ostream::Colors TemplateColor = raw_ostream::CYAN;
31+ static constexpr raw_ostream::Colors ErrorColor = raw_ostream::RED;
32+ static constexpr raw_ostream::Colors FatalColor = raw_ostream::RED;
3833// Used for changing only the bold attribute.
39- static const enum raw_ostream::Colors savedColor =
40- raw_ostream::SAVEDCOLOR;
34+ static constexpr raw_ostream::Colors SavedColor = raw_ostream::SAVEDCOLOR;
4135
4236// Magenta is taken for 'warning'. Red is already 'error' and 'cyan'
4337// is already taken for 'note'. Green is already used to underline
@@ -95,11 +89,11 @@ static void applyTemplateHighlighting(raw_ostream &OS, StringRef Str,
9589
9690 Str = Str.substr (Pos + 1 );
9791 if (Normal)
98- OS.changeColor (templateColor , true );
92+ OS.changeColor (TemplateColor , true );
9993 else {
10094 OS.resetColor ();
10195 if (Bold)
102- OS.changeColor (savedColor , true );
96+ OS.changeColor (SavedColor , true );
10397 }
10498 Normal = !Normal;
10599 }
@@ -289,46 +283,46 @@ static void genColumnByteMapping(StringRef SourceLine, unsigned TabStop,
289283namespace {
290284struct SourceColumnMap {
291285 SourceColumnMap (StringRef SourceLine, unsigned TabStop)
292- : m_SourceLine (SourceLine) {
286+ : SourceLine (SourceLine) {
293287
294- genColumnByteMapping (SourceLine, TabStop, m_columnToByte, m_byteToColumn );
288+ genColumnByteMapping (SourceLine, TabStop, ColumnToByte, ByteToColumn );
295289
296- assert (m_byteToColumn .size ()== SourceLine.size ()+ 1 );
297- assert (0 < m_byteToColumn .size () && 0 < m_columnToByte .size ());
298- assert (m_byteToColumn .size () ==
299- static_cast <unsigned >(m_columnToByte .back ().V + 1 ));
300- assert (static_cast <unsigned >(m_byteToColumn .back ().V + 1 ) ==
301- m_columnToByte .size ());
290+ assert (ByteToColumn .size () == SourceLine.size () + 1 );
291+ assert (0 < ByteToColumn .size () && 0 < ColumnToByte .size ());
292+ assert (ByteToColumn .size () ==
293+ static_cast <unsigned >(ColumnToByte .back ().V + 1 ));
294+ assert (static_cast <unsigned >(ByteToColumn .back ().V + 1 ) ==
295+ ColumnToByte .size ());
302296 }
303- Columns columns () const { return m_byteToColumn .back (); }
304- Bytes bytes () const { return m_columnToByte .back (); }
297+ Columns columns () const { return ByteToColumn .back (); }
298+ Bytes bytes () const { return ColumnToByte .back (); }
305299
306300 // / Map a byte to the column which it is at the start of, or return -1
307301 // / if it is not at the start of a column (for a UTF-8 trailing byte).
308302 Columns byteToColumn (Bytes N) const {
309- assert (0 <= N.V && N.V < static_cast <int >(m_byteToColumn .size ()));
310- return m_byteToColumn [N.V ];
303+ assert (0 <= N.V && N.V < static_cast <int >(ByteToColumn .size ()));
304+ return ByteToColumn [N.V ];
311305 }
312306
313307 // / Map a byte to the first column which contains it.
314308 Columns byteToContainingColumn (Bytes N) const {
315- assert (0 <= N.V && N.V < static_cast <int >(m_byteToColumn .size ()));
316- while (!m_byteToColumn [N.V ].isValid ())
309+ assert (0 <= N.V && N.V < static_cast <int >(ByteToColumn .size ()));
310+ while (!ByteToColumn [N.V ].isValid ())
317311 --N.V ;
318- return m_byteToColumn [N.V ];
312+ return ByteToColumn [N.V ];
319313 }
320314
321315 // / Map a column to the byte which starts the column, or return -1 if
322316 // / the column the second or subsequent column of an expanded tab or similar
323317 // / multi-column entity.
324318 Bytes columnToByte (Columns N) const {
325- assert (0 <= N.V && N.V < static_cast <int >(m_columnToByte .size ()));
326- return m_columnToByte [N.V ];
319+ assert (0 <= N.V && N.V < static_cast <int >(ColumnToByte .size ()));
320+ return ColumnToByte [N.V ];
327321 }
328322
329323 // / Map from a byte index to the next byte which starts a column.
330324 Bytes startOfNextColumn (Bytes N) const {
331- assert (0 <= N.V && N.V < static_cast <int >(m_byteToColumn .size () - 1 ));
325+ assert (0 <= N.V && N.V < static_cast <int >(ByteToColumn .size () - 1 ));
332326 N = N.next ();
333327 while (!byteToColumn (N).isValid ())
334328 N = N.next ();
@@ -337,21 +331,19 @@ struct SourceColumnMap {
337331
338332 // / Map from a byte index to the previous byte which starts a column.
339333 Bytes startOfPreviousColumn (Bytes N) const {
340- assert (0 < N.V && N.V < static_cast <int >(m_byteToColumn .size ()));
334+ assert (0 < N.V && N.V < static_cast <int >(ByteToColumn .size ()));
341335 N = N.prev ();
342336 while (!byteToColumn (N).isValid ())
343337 N = N.prev ();
344338 return N;
345339 }
346340
347- StringRef getSourceLine () const {
348- return m_SourceLine;
349- }
341+ StringRef getSourceLine () const { return SourceLine; }
350342
351343private:
352- StringRef m_SourceLine ;
353- SmallVector<Columns, 200 > m_byteToColumn ;
354- SmallVector<Bytes, 200 > m_columnToByte ;
344+ StringRef SourceLine ;
345+ SmallVector<Columns, 200 > ByteToColumn ;
346+ SmallVector<Bytes, 200 > ColumnToByte ;
355347};
356348} // end anonymous namespace
357349
@@ -361,12 +353,12 @@ static void selectInterestingSourceRegion(std::string &SourceLine,
361353 std::string &CaretLine,
362354 std::string &FixItInsertionLine,
363355 Columns NonGutterColumns,
364- const SourceColumnMap &map ) {
356+ const SourceColumnMap &Map ) {
365357 Columns CaretColumns = Columns (CaretLine.size ());
366358 Columns FixItColumns =
367359 Columns (llvm::sys::locale::columnWidth (FixItInsertionLine));
368360 Columns MaxColumns =
369- std::max ({map .columns ().V , CaretColumns.V , FixItColumns.V });
361+ std::max ({Map .columns ().V , CaretColumns.V , FixItColumns.V });
370362 // if the number of columns is less than the desired number we're done
371363 if (MaxColumns <= NonGutterColumns)
372364 return ;
@@ -415,14 +407,14 @@ static void selectInterestingSourceRegion(std::string &SourceLine,
415407 // CaretEnd may have been set at the middle of a character
416408 // If it's not at a character's first column then advance it past the current
417409 // character.
418- while (CaretEnd < map .columns () && !map .columnToByte (CaretEnd).isValid ())
410+ while (CaretEnd < Map .columns () && !Map .columnToByte (CaretEnd).isValid ())
419411 CaretEnd = CaretEnd.next ();
420412
421413 assert (
422- (CaretStart > map .columns () || map .columnToByte (CaretStart).isValid ()) &&
414+ (CaretStart > Map .columns () || Map .columnToByte (CaretStart).isValid ()) &&
423415 " CaretStart must not point to a column in the middle of a source"
424416 " line character" );
425- assert ((CaretEnd > map .columns () || map .columnToByte (CaretEnd).isValid ()) &&
417+ assert ((CaretEnd > Map .columns () || Map .columnToByte (CaretEnd).isValid ()) &&
426418 " CaretEnd must not point to a column in the middle of a source line"
427419 " character" );
428420
@@ -431,20 +423,19 @@ static void selectInterestingSourceRegion(std::string &SourceLine,
431423 // number of columns we have, try to grow the slice to encompass
432424 // more context.
433425
434- Bytes SourceStart = map .columnToByte (std::min (CaretStart.V , map .columns ().V ));
435- Bytes SourceEnd = map .columnToByte (std::min (CaretEnd.V , map .columns ().V ));
426+ Bytes SourceStart = Map .columnToByte (std::min (CaretStart.V , Map .columns ().V ));
427+ Bytes SourceEnd = Map .columnToByte (std::min (CaretEnd.V , Map .columns ().V ));
436428
437429 Columns CaretColumnsOutsideSource =
438430 CaretEnd - CaretStart -
439- (map .byteToColumn (SourceEnd) - map .byteToColumn (SourceStart));
431+ (Map .byteToColumn (SourceEnd) - Map .byteToColumn (SourceStart));
440432
441- char const *front_ellipse = " ..." ;
442- char const *front_space = " " ;
443- char const *back_ellipse = " ..." ;
444- Columns EllipsesColumns =
445- Columns (strlen (front_ellipse) + strlen (back_ellipse));
433+ constexpr StringRef FrontEllipse = " ..." ;
434+ constexpr StringRef FrontSpace = " " ;
435+ constexpr StringRef BackEllipse = " ..." ;
436+ Columns EllipsesColumns = Columns (FrontEllipse.size () + BackEllipse.size ());
446437
447- Columns TargetColumns = Columns ( NonGutterColumns) ;
438+ Columns TargetColumns = NonGutterColumns;
448439 // Give us extra room for the ellipses
449440 // and any of the caret line that extends past the source
450441 if (TargetColumns > EllipsesColumns + CaretColumnsOutsideSource)
@@ -454,47 +445,47 @@ static void selectInterestingSourceRegion(std::string &SourceLine,
454445 bool ExpandedRegion = false ;
455446
456447 if (SourceStart > 0 ) {
457- Bytes NewStart = map .startOfPreviousColumn (SourceStart);
448+ Bytes NewStart = Map .startOfPreviousColumn (SourceStart);
458449
459450 // Skip over any whitespace we see here; we're looking for
460451 // another bit of interesting text.
461452 // FIXME: Detect non-ASCII whitespace characters too.
462453 while (NewStart > 0 && isWhitespace (SourceLine[NewStart.V ]))
463- NewStart = map .startOfPreviousColumn (NewStart);
454+ NewStart = Map .startOfPreviousColumn (NewStart);
464455
465456 // Skip over this bit of "interesting" text.
466457 while (NewStart > 0 ) {
467- Bytes Prev = map .startOfPreviousColumn (NewStart);
458+ Bytes Prev = Map .startOfPreviousColumn (NewStart);
468459 if (isWhitespace (SourceLine[Prev.V ]))
469460 break ;
470461 NewStart = Prev;
471462 }
472463
473- assert (map .byteToColumn (NewStart).isValid ());
464+ assert (Map .byteToColumn (NewStart).isValid ());
474465 Columns NewColumns =
475- map .byteToColumn (SourceEnd) - map .byteToColumn (NewStart);
466+ Map .byteToColumn (SourceEnd) - Map .byteToColumn (NewStart);
476467 if (NewColumns <= TargetColumns) {
477468 SourceStart = NewStart;
478469 ExpandedRegion = true ;
479470 }
480471 }
481472
482473 if (SourceEnd < SourceLine.size ()) {
483- Bytes NewEnd = map .startOfNextColumn (SourceEnd);
474+ Bytes NewEnd = Map .startOfNextColumn (SourceEnd);
484475
485476 // Skip over any whitespace we see here; we're looking for
486477 // another bit of interesting text.
487478 // FIXME: Detect non-ASCII whitespace characters too.
488479 while (NewEnd < SourceLine.size () && isWhitespace (SourceLine[NewEnd.V ]))
489- NewEnd = map .startOfNextColumn (NewEnd);
480+ NewEnd = Map .startOfNextColumn (NewEnd);
490481
491482 // Skip over this bit of "interesting" text.
492483 while (NewEnd < SourceLine.size () && isWhitespace (SourceLine[NewEnd.V ]))
493- NewEnd = map .startOfNextColumn (NewEnd);
484+ NewEnd = Map .startOfNextColumn (NewEnd);
494485
495- assert (map .byteToColumn (NewEnd).isValid ());
486+ assert (Map .byteToColumn (NewEnd).isValid ());
496487 Columns NewColumns =
497- map .byteToColumn (NewEnd) - map .byteToColumn (SourceStart);
488+ Map .byteToColumn (NewEnd) - Map .byteToColumn (SourceStart);
498489 if (NewColumns <= TargetColumns) {
499490 SourceEnd = NewEnd;
500491 ExpandedRegion = true ;
@@ -505,8 +496,8 @@ static void selectInterestingSourceRegion(std::string &SourceLine,
505496 break ;
506497 }
507498
508- CaretStart = map .byteToColumn (SourceStart);
509- CaretEnd = map .byteToColumn (SourceEnd) + CaretColumnsOutsideSource;
499+ CaretStart = Map .byteToColumn (SourceStart);
500+ CaretEnd = Map .byteToColumn (SourceEnd) + CaretColumnsOutsideSource;
510501
511502 // [CaretStart, CaretEnd) is the slice we want. Update the various
512503 // output lines to show only this slice.
@@ -516,8 +507,8 @@ static void selectInterestingSourceRegion(std::string &SourceLine,
516507 assert (CaretStart <= CaretEnd);
517508
518509 Columns BackColumnsRemoved =
519- map .byteToColumn (Bytes{static_cast <int >(SourceLine.size ())}) -
520- map .byteToColumn (SourceEnd);
510+ Map .byteToColumn (Bytes{static_cast <int >(SourceLine.size ())}) -
511+ Map .byteToColumn (SourceEnd);
521512 Columns FrontColumnsRemoved = CaretStart;
522513 Columns ColumnsKept = CaretEnd - CaretStart;
523514
@@ -527,19 +518,19 @@ static void selectInterestingSourceRegion(std::string &SourceLine,
527518
528519 // The line needs some truncation, and we'd prefer to keep the front
529520 // if possible, so remove the back
530- if (BackColumnsRemoved > Columns (strlen (back_ellipse )))
531- SourceLine.replace (SourceEnd.V , std::string::npos, back_ellipse );
521+ if (BackColumnsRemoved > Columns (BackEllipse. size ( )))
522+ SourceLine.replace (SourceEnd.V , std::string::npos, BackEllipse );
532523
533524 // If that's enough then we're done
534525 if (FrontColumnsRemoved + ColumnsKept <= Columns (NonGutterColumns))
535526 return ;
536527
537528 // Otherwise remove the front as well
538- if (FrontColumnsRemoved > Columns (strlen (front_ellipse ))) {
539- SourceLine.replace (0 , SourceStart.V , front_ellipse );
540- CaretLine.replace (0 , CaretStart.V , front_space );
529+ if (FrontColumnsRemoved > Columns (FrontEllipse. size ( ))) {
530+ SourceLine.replace (0 , SourceStart.V , FrontEllipse );
531+ CaretLine.replace (0 , CaretStart.V , FrontSpace );
541532 if (!FixItInsertionLine.empty ())
542- FixItInsertionLine.replace (0 , CaretStart.V , front_space );
533+ FixItInsertionLine.replace (0 , CaretStart.V , FrontSpace );
543534 }
544535}
545536
@@ -733,11 +724,21 @@ TextDiagnostic::printDiagnosticLevel(raw_ostream &OS,
733724 switch (Level) {
734725 case DiagnosticsEngine::Ignored:
735726 llvm_unreachable (" Invalid diagnostic type" );
736- case DiagnosticsEngine::Note: OS.changeColor (noteColor, true ); break ;
737- case DiagnosticsEngine::Remark: OS.changeColor (remarkColor, true ); break ;
738- case DiagnosticsEngine::Warning: OS.changeColor (warningColor, true ); break ;
739- case DiagnosticsEngine::Error: OS.changeColor (errorColor, true ); break ;
740- case DiagnosticsEngine::Fatal: OS.changeColor (fatalColor, true ); break ;
727+ case DiagnosticsEngine::Note:
728+ OS.changeColor (NoteColor, true );
729+ break ;
730+ case DiagnosticsEngine::Remark:
731+ OS.changeColor (RemarkColor, true );
732+ break ;
733+ case DiagnosticsEngine::Warning:
734+ OS.changeColor (WarningColor, true );
735+ break ;
736+ case DiagnosticsEngine::Error:
737+ OS.changeColor (ErrorColor, true );
738+ break ;
739+ case DiagnosticsEngine::Fatal:
740+ OS.changeColor (FatalColor, true );
741+ break ;
741742 }
742743 }
743744
@@ -765,7 +766,7 @@ void TextDiagnostic::printDiagnosticMessage(raw_ostream &OS,
765766 if (ShowColors && !IsSupplemental) {
766767 // Print primary diagnostic messages in bold and without color, to visually
767768 // indicate the transition from continuation notes and other output.
768- OS.changeColor (savedColor , true );
769+ OS.changeColor (SavedColor , true );
769770 Bold = true ;
770771 }
771772
@@ -843,7 +844,7 @@ void TextDiagnostic::emitDiagnosticLoc(FullSourceLoc Loc, PresumedLoc PLoc,
843844 return ;
844845
845846 if (DiagOpts.ShowColors )
846- OS.changeColor (savedColor , true );
847+ OS.changeColor (SavedColor , true );
847848
848849 emitFilename (PLoc.getFilename (), Loc.getManager ());
849850 switch (DiagOpts.getFormat ()) {
@@ -1470,7 +1471,7 @@ void TextDiagnostic::emitSnippetAndCaret(
14701471 if (!CaretLine.empty ()) {
14711472 indentForLineNumbers ();
14721473 if (DiagOpts.ShowColors )
1473- OS.changeColor (caretColor , true );
1474+ OS.changeColor (CaretColor , true );
14741475 OS << CaretLine << ' \n ' ;
14751476 if (DiagOpts.ShowColors )
14761477 OS.resetColor ();
@@ -1480,7 +1481,7 @@ void TextDiagnostic::emitSnippetAndCaret(
14801481 indentForLineNumbers ();
14811482 if (DiagOpts.ShowColors )
14821483 // Print fixit line in color
1483- OS.changeColor (fixitColor , false );
1484+ OS.changeColor (FixitColor , false );
14841485 if (DiagOpts.ShowSourceRanges )
14851486 OS << ' ' ;
14861487 OS << FixItInsertionLine << ' \n ' ;
0 commit comments