From: Ian Romanick Date: Mon, 29 Mar 2010 19:59:02 +0000 (-0700) Subject: Add a variable to the symbol table after processing the initializer X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=17d86f4371da413176ba365ca26a58bac172d365;p=mesa.git Add a variable to the symbol table after processing the initializer --- diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp index e16f79f6f21..7b1db0c4818 100644 --- a/ast_to_hir.cpp +++ b/ast_to_hir.cpp @@ -981,10 +981,6 @@ ast_declarator_list::hir(exec_list *instructions, continue; } - const bool added_variable = - state->symbols->add_variable(decl->identifier, var); - assert(added_variable); - instructions->push_tail(var); if (decl->initializer != NULL) { @@ -1028,6 +1024,19 @@ ast_declarator_list::hir(exec_list *instructions, this->get_location()); } } + + /* Add the vairable to the symbol table after processing the initializer. + * This differs from most C-like languages, but it follows the GLSL + * specification. From page 28 (page 34 of the PDF) of the GLSL 1.50 + * spec: + * + * "Within a declaration, the scope of a name starts immediately + * after the initializer if present or immediately after the name + * being declared if not." + */ + const bool added_variable = + state->symbols->add_variable(decl->identifier, var); + assert(added_variable); } /* Variable declarations do not have r-values.