X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Fvalidate.cpp;h=ea2e956d023f1e02d66b44b7771186542076dd28;hp=4523b7461730e4fadb6a2faec9d904cea70d1c42;hb=d18df036b247f7f0978b547bb8ea1d624af2c4b2;hpb=4181ceb89a2d538712c81826da610e7e8583e9a5 diff --git a/source/glsl/validate.cpp b/source/glsl/validate.cpp index 4523b746..ea2e956d 100644 --- a/source/glsl/validate.cpp +++ b/source/glsl/validate.cpp @@ -11,17 +11,29 @@ namespace GL { namespace SL { Validator::Validator(): - stage(0) + stage(0), + last_provoker(0) { } -void Validator::diagnose(Node &node, Diagnostic::Severity severity, const string &message) +void Validator::diagnose(Node &node, Node &provoking_node, Diagnostic::Severity severity, const string &message) { Diagnostic diag; diag.severity = severity; diag.source = node.source; diag.line = node.line; + diag.provoking_source = provoking_node.source; + diag.provoking_line = provoking_node.line; diag.message = message; stage->diagnostics.push_back(diag); + + last_provoker = &provoking_node; +} + +void Validator::add_info(Node &node, const string &message) +{ + if(!last_provoker) + throw logic_error("Tried to add info without a previous provoker"); + diagnose(node, *last_provoker, Diagnostic::INFO, message); } @@ -83,7 +95,7 @@ DeclarationValidator::DeclarationValidator(): void DeclarationValidator::multiple_definition(const string &name, Statement &statement, Statement &previous) { error(statement, format("Multiple definition of %s", name)); - diagnose(previous, Diagnostic::INFO, "Previous definition is here"); + add_info(previous, "Previous definition is here"); } Statement *DeclarationValidator::find_definition(const string &name)