@@ -522,17 +522,17 @@ bool SourcePrinter::cacheSource(const DILineInfo &LineInfo) {
522
522
Buffer = std::move (*BufferOrError);
523
523
}
524
524
// Chomp the file to get lines
525
- size_t BufferSize = Buffer->getBufferSize ();
526
- const char *BufferStart = Buffer->getBufferStart ();
527
- for (const char *Start = BufferStart, *End = BufferStart;
528
- End < BufferStart + BufferSize; End++)
529
- if (*End == ' \n ' || End == BufferStart + BufferSize - 1 ||
530
- (*End == ' \r ' && *(End + 1 ) == ' \n ' )) {
531
- LineCache[LineInfo.FileName ].push_back (StringRef (Start, End - Start));
532
- if (*End == ' \r ' )
533
- End++;
534
- Start = End + 1 ;
525
+ const char *BufferStart = Buffer->getBufferStart (),
526
+ *BufferEnd = Buffer->getBufferEnd ();
527
+ std::vector<StringRef> &Lines = LineCache[LineInfo.FileName ];
528
+ const char *Start = BufferStart;
529
+ for (const char *I = BufferStart; I != BufferEnd; ++I)
530
+ if (*I == ' \n ' ) {
531
+ Lines.emplace_back (Start, I - Start - (BufferStart < I && I[-1 ] == ' \r ' ));
532
+ Start = I + 1 ;
535
533
}
534
+ if (Start < BufferEnd)
535
+ Lines.emplace_back (Start, BufferEnd - Start);
536
536
SourceCache[LineInfo.FileName ] = std::move (Buffer);
537
537
return true ;
538
538
}
@@ -560,16 +560,12 @@ void SourcePrinter::printSourceLine(raw_ostream &OS,
560
560
if (SourceCache.find (LineInfo.FileName ) == SourceCache.end ())
561
561
if (!cacheSource (LineInfo))
562
562
return ;
563
- auto FileBuffer = SourceCache.find (LineInfo.FileName );
564
- if (FileBuffer != SourceCache.end ()) {
565
- auto LineBuffer = LineCache.find (LineInfo.FileName );
566
- if (LineBuffer != LineCache.end ()) {
567
- if (LineInfo.Line > LineBuffer->second .size ())
568
- return ;
569
- // Vector begins at 0, line numbers are non-zero
570
- OS << Delimiter << LineBuffer->second [LineInfo.Line - 1 ].ltrim ()
571
- << " \n " ;
572
- }
563
+ auto LineBuffer = LineCache.find (LineInfo.FileName );
564
+ if (LineBuffer != LineCache.end ()) {
565
+ if (LineInfo.Line > LineBuffer->second .size ())
566
+ return ;
567
+ // Vector begins at 0, line numbers are non-zero
568
+ OS << Delimiter << LineBuffer->second [LineInfo.Line - 1 ] << ' \n ' ;
573
569
}
574
570
}
575
571
OldLineInfo = LineInfo;
0 commit comments