glsl: better fix for for-loop scope issue (commit 6333005f7aea3e5d1d86a5c47b3fa2a1ed2...
authorBrian Paul <brianp@vmware.com>
Mon, 12 Jan 2009 15:52:54 +0000 (08:52 -0700)
committerBrian Paul <brianp@vmware.com>
Mon, 12 Jan 2009 15:52:54 +0000 (08:52 -0700)
src/mesa/shader/slang/library/slang_shader.syn
src/mesa/shader/slang/library/slang_shader_syn.h
src/mesa/shader/slang/slang_compile.c

index 0ad4a1cba62ab4a283f16c20896335629827828d..cc5c70a02f8369ea132dd3f8c8e876f4418904cd 100644 (file)
@@ -1161,13 +1161,6 @@ compound_statement_2
 compound_statement_3
     lbrace .and statement_list .and rbrace;
 
-/*
- * <statement_no_new_scope> ::= <compound_statement_no_new_scope>
- *                            | <simple_statement>
- */
-statement_no_new_scope
-    compound_statement_no_new_scope .or simple_statement;
-
 /*
  * <compound_statement_no_new_scope> ::= "{" "}"
  *                                     | "{" <statement_list> "}"
@@ -1181,6 +1174,7 @@ compound_statement_no_new_scope_2
 compound_statement_no_new_scope_3
     lbrace .and statement_list .and rbrace;
 
+
 /*
  * <statement_list> ::= <statement>
  *                    | <statement_list> <statement>
@@ -1242,8 +1236,7 @@ condition_3
 /*
  * <iteration_statement> ::= "while" "(" <condition> ")" <statement>
  *                         | "do" <statement> "while" "(" <expression> ")" ";"
- *                         | "for" "(" <for_init_statement> <for_rest_statement> ")"
- *                            <statement_no_new_scope>
+ *                         | "for" "(" <for_init_statement> <for_rest_statement> ")" <statement>
  */
 iteration_statement
     iteration_statement_1 .or iteration_statement_2 .or iteration_statement_3;
@@ -1255,7 +1248,7 @@ iteration_statement_2
     expression .and rparen .error RPAREN_EXPECTED .emit OP_END .and semicolon;
 iteration_statement_3
     "for" .emit OP_FOR .and lparen .error LPAREN_EXPECTED .and for_init_statement .and
-    for_rest_statement .and rparen .error RPAREN_EXPECTED .and statement_no_new_scope;
+    for_rest_statement .and rparen .error RPAREN_EXPECTED .and statement;
 
 /*
  * <for_init_statement> ::= <expression_statement>
index e1705dfe19366b43e151260bdb050b5de61799e2..6a382970e1a31d42c009e51f5e4e07901d679088 100644 (file)
 " lbrace .and rbrace;\n"
 "compound_statement_3\n"
 " lbrace .and statement_list .and rbrace;\n"
-"statement_no_new_scope\n"
-" compound_statement_no_new_scope .or simple_statement;\n"
 "compound_statement_no_new_scope\n"
 " compound_statement_no_new_scope_1 .emit OP_BLOCK_BEGIN_NO_NEW_SCOPE .and .true .emit OP_END;\n"
 "compound_statement_no_new_scope_1\n"
 " expression .and rparen .error RPAREN_EXPECTED .emit OP_END .and semicolon;\n"
 "iteration_statement_3\n"
 " \"for\" .emit OP_FOR .and lparen .error LPAREN_EXPECTED .and for_init_statement .and\n"
-" for_rest_statement .and rparen .error RPAREN_EXPECTED .and statement_no_new_scope;\n"
+" for_rest_statement .and rparen .error RPAREN_EXPECTED .and statement;\n"
 "for_init_statement\n"
 " expression_statement .emit OP_EXPRESSION .or declaration_statement .emit OP_DECLARE;\n"
 "conditionopt\n"
index add8594ff954d04b626c84534804afb27813e6a4..ec27fc69dffd043aaedb48e5f3faafffa1d1e03d 100644 (file)
@@ -1138,26 +1138,8 @@ parse_statement(slang_parse_ctx * C, slang_output_ctx * O,
             RETURN0;
          if (!parse_child_operation(C, &o, oper, GL_FALSE))
             RETURN0;
-#if 0
          if (!parse_child_operation(C, &o, oper, GL_TRUE))
             RETURN0;
-#else
-         /* force creation of new scope for loop body */
-         {
-            slang_operation *ch;
-            slang_output_ctx oo = o;
-
-            /* grow child array */
-            ch = slang_operation_grow(&oper->num_children, &oper->children);
-            ch->type = SLANG_OPER_BLOCK_NEW_SCOPE;
-
-            ch->locals->outer_scope = o.vars;
-            oo.vars = ch->locals;
-
-            if (!parse_child_operation(C, &oo, ch, GL_TRUE))
-               RETURN0;
-         }
-#endif
       }
       break;
    case OP_PRECISION: