From 17d86f4371da413176ba365ca26a58bac172d365 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Mon, 29 Mar 2010 12:59:02 -0700 Subject: [PATCH] Add a variable to the symbol table after processing the initializer --- ast_to_hir.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) 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. -- 2.30.2