aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/TextDiagnosticPrinter.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2011-10-15 10:48:19 +0000
committerChandler Carruth <chandlerc@gmail.com>2011-10-15 10:48:19 +0000
commit55c611021e771a816e6e3679928439f667f12eb9 (patch)
tree14dded835233c2eae6096a806fd1582b507d4a7d /lib/Frontend/TextDiagnosticPrinter.cpp
parent28409289193afca1a3178a9796f8e8aebcb76896 (diff)
Simplify the interface of a helper method in the TextDiagnosticPrinter
to operate directly on the source location and ranges associated with a diagnostic rather than digging them out of the diagnostic. This had a side benefit of cleaning up its code a tiny bit by using the ArrayRef interface. No functionality changed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142063 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/TextDiagnosticPrinter.cpp')
-rw-r--r--lib/Frontend/TextDiagnosticPrinter.cpp35
1 files changed, 18 insertions, 17 deletions
diff --git a/lib/Frontend/TextDiagnosticPrinter.cpp b/lib/Frontend/TextDiagnosticPrinter.cpp
index 10e7238218..b5784b9fc0 100644
--- a/lib/Frontend/TextDiagnosticPrinter.cpp
+++ b/lib/Frontend/TextDiagnosticPrinter.cpp
@@ -785,13 +785,14 @@ static PresumedLoc getDiagnosticPresumedLoc(const SourceManager &SM,
/// This includes extracting as much location information as is present for the
/// diagnostic and printing it, as well as any include stack or source ranges
/// necessary.
-void TextDiagnosticPrinter::EmitDiagnosticLoc(DiagnosticsEngine::Level Level,
- const Diagnostic &Info,
- const SourceManager &SM,
- PresumedLoc PLoc) {
+void TextDiagnosticPrinter::EmitDiagnosticLoc(SourceLocation Loc,
+ PresumedLoc PLoc,
+ DiagnosticsEngine::Level Level,
+ ArrayRef<CharSourceRange> Ranges,
+ const SourceManager &SM) {
if (PLoc.isInvalid()) {
// At least print the file name if available:
- FileID FID = SM.getFileID(Info.getLocation());
+ FileID FID = SM.getFileID(Loc);
if (!FID.isInvalid()) {
const FileEntry* FE = SM.getFileEntryForID(FID);
if (FE && FE->getName()) {
@@ -837,27 +838,27 @@ void TextDiagnosticPrinter::EmitDiagnosticLoc(DiagnosticsEngine::Level Level,
case DiagnosticOptions::Msvc: OS << ") : "; break;
}
- if (DiagOpts->ShowSourceRanges && Info.getNumRanges()) {
+ if (DiagOpts->ShowSourceRanges && !Ranges.empty()) {
FileID CaretFileID =
- SM.getFileID(SM.getExpansionLoc(Info.getLocation()));
+ SM.getFileID(SM.getExpansionLoc(Loc));
bool PrintedRange = false;
- for (unsigned i = 0, e = Info.getNumRanges(); i != e; ++i) {
+ for (ArrayRef<CharSourceRange>::const_iterator RI = Ranges.begin(),
+ RE = Ranges.end();
+ RI != RE; ++RI) {
// Ignore invalid ranges.
- if (!Info.getRange(i).isValid()) continue;
+ if (!RI->isValid()) continue;
- SourceLocation B = Info.getRange(i).getBegin();
- SourceLocation E = Info.getRange(i).getEnd();
- B = SM.getExpansionLoc(B);
- E = SM.getExpansionLoc(E);
+ SourceLocation B = SM.getExpansionLoc(RI->getBegin());
+ SourceLocation E = SM.getExpansionLoc(RI->getEnd());
// If the End location and the start location are the same and are a
// macro location, then the range was something that came from a
// macro expansion or _Pragma. If this is an object-like macro, the
// best we can do is to highlight the range. If this is a
// function-like macro, we'd also like to highlight the arguments.
- if (B == E && Info.getRange(i).getEnd().isMacroID())
- E = SM.getExpansionRange(Info.getRange(i).getEnd()).second;
+ if (B == E && RI->getEnd().isMacroID())
+ E = SM.getExpansionRange(RI->getEnd()).second;
std::pair<FileID, unsigned> BInfo = SM.getDecomposedLoc(B);
std::pair<FileID, unsigned> EInfo = SM.getDecomposedLoc(E);
@@ -870,7 +871,7 @@ void TextDiagnosticPrinter::EmitDiagnosticLoc(DiagnosticsEngine::Level Level,
// Add in the length of the token, so that we cover multi-char
// tokens.
unsigned TokSize = 0;
- if (Info.getRange(i).isTokenRange())
+ if (RI->isTokenRange())
TokSize = Lexer::MeasureTokenLength(E, SM, *LangOpts);
OS << '{' << SM.getLineNumber(BInfo.first, BInfo.second) << ':'
@@ -1226,7 +1227,7 @@ void TextDiagnosticPrinter::HandleDiagnostic(DiagnosticsEngine::Level Level,
StartOfLocationInfo = OS.tell();
// Next emit the location of this particular diagnostic.
- EmitDiagnosticLoc(Level, Info, SM, PLoc);
+ EmitDiagnosticLoc(Info.getLocation(), PLoc, Level, Info.getRanges(), SM);
if (DiagOpts->ShowColors)
OS.resetColor();