diff options
| author | Tim Foley <tim.foley.is@gmail.com> | 2017-08-10 15:25:04 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-08-10 15:25:04 -0700 |
| commit | db4079f7e3635a6a61b8725643b1d7ecf68b97d8 (patch) | |
| tree | 224c16ad374c5ed533a497beeb75753e7ce2d771 /source/slang/diagnostics.cpp | |
| parent | 6e4830f4d74adef0a47c6503d84dc114240fafa3 (diff) | |
| parent | a5a436c4783fb75a0d089a6483219c06db91f593 (diff) | |
Merge pull request #156 from tfoleyNV/source-file-cleanup
Make source location lightweight
Diffstat (limited to 'source/slang/diagnostics.cpp')
| -rw-r--r-- | source/slang/diagnostics.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/source/slang/diagnostics.cpp b/source/slang/diagnostics.cpp index e0b959a81..eb6a818d3 100644 --- a/source/slang/diagnostics.cpp +++ b/source/slang/diagnostics.cpp @@ -1,7 +1,8 @@ -// Diagnostics.cpp -#include "Diagnostics.h" +// diagnostics.cpp +#include "diagnostics.h" -#include "Syntax.h" +#include "compiler.h" +#include "syntax.h" #include <assert.h> @@ -67,17 +68,17 @@ void printDiagnosticArg(StringBuilder& sb, Token const& token) sb << token.Content; } -CodePosition const& getDiagnosticPos(SyntaxNode const* syntax) +SourceLoc const& getDiagnosticPos(SyntaxNode const* syntax) { return syntax->Position; } -CodePosition const& getDiagnosticPos(Token const& token) +SourceLoc const& getDiagnosticPos(Token const& token) { return token.Position; } -CodePosition const& getDiagnosticPos(TypeExp const& typeExp) +SourceLoc const& getDiagnosticPos(TypeExp const& typeExp) { return typeExp.exp->Position; } @@ -140,12 +141,18 @@ static void formatDiagnosticMessage(StringBuilder& sb, char const* format, int a } static void formatDiagnostic( + DiagnosticSink* sink, StringBuilder& sb, Diagnostic const& diagnostic) { - sb << diagnostic.Position.FileName; + auto sourceManager = sink->sourceManager; + + auto expandedLoc = sourceManager->expandSourceLoc(diagnostic.Position); + auto humaneLoc = sourceManager->getHumaneLoc(expandedLoc); + + sb << humaneLoc.getPath(); sb << "("; - sb << diagnostic.Position.Line; + sb << humaneLoc.line; sb << "): "; sb << getSeverityName(diagnostic.severity); sb << " "; @@ -155,7 +162,7 @@ static void formatDiagnostic( sb << "\n"; } -void DiagnosticSink::diagnoseImpl(CodePosition const& pos, DiagnosticInfo const& info, int argCount, DiagnosticArg const* const* args) +void DiagnosticSink::diagnoseImpl(SourceLoc const& pos, DiagnosticInfo const& info, int argCount, DiagnosticArg const* const* args) { StringBuilder sb; formatDiagnosticMessage(sb, info.messageFormat, argCount, args); @@ -176,7 +183,7 @@ void DiagnosticSink::diagnoseImpl(CodePosition const& pos, DiagnosticInfo const& { // If so, pass the error string along to them StringBuilder messageBuilder; - formatDiagnostic(messageBuilder, diagnostic); + formatDiagnostic(this, messageBuilder, diagnostic); callback(messageBuilder.ProduceString().begin(), callbackUserData); } @@ -184,7 +191,7 @@ void DiagnosticSink::diagnoseImpl(CodePosition const& pos, DiagnosticInfo const& { // If the user doesn't have a callback, then just // collect our diagnostic messages into a buffer - formatDiagnostic(outputBuffer, diagnostic); + formatDiagnostic(this, outputBuffer, diagnostic); } if (diagnostic.severity >= Severity::Fatal) |
