X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fvalidate.cpp;h=6d0f8e51ac2cb9a95ee94883f8a7449f0c97fa44;hb=4c805f55d89919d6971d600102ab4d6d65d56dc3;hp=f3390048298e2708db5e307e37b0832144c7c2dd;hpb=f2725633d775ef21c3e2cffc2cbf14cdc83e8ca2;p=libs%2Fgl.git diff --git a/source/glsl/validate.cpp b/source/glsl/validate.cpp index f3390048..6d0f8e51 100644 --- a/source/glsl/validate.cpp +++ b/source/glsl/validate.cpp @@ -12,15 +12,12 @@ Validator::Validator(): stage(0) { } -void Validator::diagnose(Statement *statement, Diagnostic::Severity severity, const string &message) +void Validator::diagnose(Node &node, Diagnostic::Severity severity, const string &message) { Diagnostic diag; diag.severity = severity; - if(statement) - { - diag.source = statement->source; - diag.line = statement->line; - } + diag.source = node.source; + diag.line = node.line; diag.message = message; stage->diagnostics.push_back(diag); } @@ -32,8 +29,8 @@ 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"); + error(statement, format("Multiple definition of %s", name)); + diagnose(previous, Diagnostic::INFO, "Previous definition is here"); } Statement *DeclarationValidator::find_definition(const string &name) @@ -63,6 +60,17 @@ void DeclarationValidator::record_definition(const string &name, Statement &stat declarations[current_block->parent].insert(make_pair(name, &statement)); } +void DeclarationValidator::visit(TypeDeclaration &type) +{ + check_definition(type.name, type); +} + +void DeclarationValidator::visit(StructDeclaration &strct) +{ + check_definition(strct.name, strct); + TraversingVisitor::visit(strct); +} + void DeclarationValidator::visit(VariableDeclaration &var) { check_definition(var.name, var);