ARB prog parser: Differentiate between used and unused names in the lexer
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 10 Sep 2009 21:35:33 +0000 (14:35 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 10 Sep 2009 21:35:33 +0000 (14:35 -0700)
The lexer will return IDENTIFIER only when the name does not have an
associated symbol.  Otherwise USED_IDENTIFIER is returned.

src/mesa/shader/lex.yy.c
src/mesa/shader/program_lexer.l
src/mesa/shader/program_parse.tab.c
src/mesa/shader/program_parse.tab.h
src/mesa/shader/program_parse.y

index d71a13c3bd7084693a683112428287f941571799..959eb854d62a8c21e0f57fe320cd0c54663c6fac 100644 (file)
@@ -1052,8 +1052,7 @@ static yyconst flex_int16_t yy_chk[1352] =
       if (condition) {                                 \
         return token;                                  \
       } else {                                         \
-        yylval->string = strdup(yytext);               \
-        return IDENTIFIER;                             \
+        return handle_ident(yyextra, yytext, yylval);  \
       }                                                        \
    } while (0)
 
@@ -1077,8 +1076,7 @@ static yyconst flex_int16_t yy_chk[1352] =
         yylval->temp_inst.Opcode = OPCODE_ ## opcode;  \
         return token;                                  \
       } else {                                         \
-        yylval->string = strdup(yytext);               \
-        return IDENTIFIER;                             \
+        return handle_ident(yyextra, yytext, yylval);  \
       }                                                        \
    } while (0)
 
@@ -1127,6 +1125,15 @@ swiz_from_char(char c)
    return 0;
 }
 
+static int
+handle_ident(struct asm_parser_state *state, const char *text, YYSTYPE *lval)
+{
+   lval->string = strdup(text);
+
+   return (_mesa_symbol_table_find_symbol(state->st, 0, text) == NULL)
+      ? IDENTIFIER : USED_IDENTIFIER;
+}
+
 #define YY_USER_ACTION                                                 \
    do {                                                                        \
       yylloc->first_column = yylloc->last_column;                      \
@@ -1140,7 +1147,7 @@ swiz_from_char(char c)
    } while(0);
 
 #define YY_EXTRA_TYPE struct asm_parser_state *
-#line 1144 "lex.yy.c"
+#line 1151 "lex.yy.c"
 
 #define INITIAL 0
 
@@ -1386,10 +1393,10 @@ YY_DECL
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 143 "program_lexer.l"
+#line 150 "program_lexer.l"
 
 
-#line 1393 "lex.yy.c"
+#line 1400 "lex.yy.c"
 
     yylval = yylval_param;
 
@@ -1478,17 +1485,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 145 "program_lexer.l"
+#line 152 "program_lexer.l"
 { return ARBvp_10; }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 146 "program_lexer.l"
+#line 153 "program_lexer.l"
 { return ARBfp_10; }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 147 "program_lexer.l"
+#line 154 "program_lexer.l"
 {
    yylval->integer = at_address;
    return_token_or_IDENTIFIER(require_ARB_vp, ADDRESS);
@@ -1496,685 +1503,682 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 151 "program_lexer.l"
+#line 158 "program_lexer.l"
 { return ALIAS; }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 152 "program_lexer.l"
+#line 159 "program_lexer.l"
 { return ATTRIB; }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 153 "program_lexer.l"
+#line 160 "program_lexer.l"
 { return END; }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 154 "program_lexer.l"
+#line 161 "program_lexer.l"
 { return OPTION; }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 155 "program_lexer.l"
+#line 162 "program_lexer.l"
 { return OUTPUT; }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 156 "program_lexer.l"
+#line 163 "program_lexer.l"
 { return PARAM; }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 157 "program_lexer.l"
+#line 164 "program_lexer.l"
 { yylval->integer = at_temp; return TEMP; }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 159 "program_lexer.l"
+#line 166 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, ABS, 3); }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 160 "program_lexer.l"
+#line 167 "program_lexer.l"
 { return_opcode(             1, BIN_OP, ADD, 3); }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 161 "program_lexer.l"
+#line 168 "program_lexer.l"
 { return_opcode(require_ARB_vp, ARL, ARL, 3); }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 163 "program_lexer.l"
+#line 170 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, CMP, 3); }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 164 "program_lexer.l"
+#line 171 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, COS, 3); }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 166 "program_lexer.l"
+#line 173 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, DDX, 3); }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 167 "program_lexer.l"
+#line 174 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, DDY, 3); }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 168 "program_lexer.l"
+#line 175 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DP3, 3); }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 169 "program_lexer.l"
+#line 176 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DP4, 3); }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 170 "program_lexer.l"
+#line 177 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DPH, 3); }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 171 "program_lexer.l"
+#line 178 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DST, 3); }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 173 "program_lexer.l"
+#line 180 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, EX2, 3); }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 174 "program_lexer.l"
+#line 181 "program_lexer.l"
 { return_opcode(require_ARB_vp, SCALAR_OP, EXP, 3); }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 176 "program_lexer.l"
+#line 183 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, FLR, 3); }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 177 "program_lexer.l"
+#line 184 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, FRC, 3); }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 179 "program_lexer.l"
+#line 186 "program_lexer.l"
 { return_opcode(require_ARB_fp, KIL, KIL, 3); }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 181 "program_lexer.l"
+#line 188 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, LIT, 3); }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 182 "program_lexer.l"
+#line 189 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, LG2, 3); }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 183 "program_lexer.l"
+#line 190 "program_lexer.l"
 { return_opcode(require_ARB_vp, SCALAR_OP, LOG, 3); }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 184 "program_lexer.l"
+#line 191 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, LRP, 3); }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 186 "program_lexer.l"
+#line 193 "program_lexer.l"
 { return_opcode(             1, TRI_OP, MAD, 3); }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 187 "program_lexer.l"
+#line 194 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MAX, 3); }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 188 "program_lexer.l"
+#line 195 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MIN, 3); }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 189 "program_lexer.l"
+#line 196 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, MOV, 3); }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 190 "program_lexer.l"
+#line 197 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MUL, 3); }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 192 "program_lexer.l"
+#line 199 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, PK2H, 4); }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 193 "program_lexer.l"
+#line 200 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, PK2US, 5); }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 194 "program_lexer.l"
+#line 201 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, PK4B, 4); }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 195 "program_lexer.l"
+#line 202 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, PK4UB, 5); }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 196 "program_lexer.l"
+#line 203 "program_lexer.l"
 { return_opcode(             1, BINSC_OP, POW, 3); }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 198 "program_lexer.l"
+#line 205 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, RCP, 3); }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 199 "program_lexer.l"
+#line 206 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP,    RFL, 3); }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 200 "program_lexer.l"
+#line 207 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, RSQ, 3); }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 202 "program_lexer.l"
+#line 209 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SCS, 3); }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 203 "program_lexer.l"
+#line 210 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, SEQ, 3); }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 204 "program_lexer.l"
+#line 211 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, SFL, 3); }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 205 "program_lexer.l"
+#line 212 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SGE, 3); }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 206 "program_lexer.l"
+#line 213 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, SGT, 3); }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 207 "program_lexer.l"
+#line 214 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SIN, 3); }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 208 "program_lexer.l"
+#line 215 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, SLE, 3); }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 209 "program_lexer.l"
+#line 216 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SLT, 3); }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 210 "program_lexer.l"
+#line 217 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, SNE, 3); }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 211 "program_lexer.l"
+#line 218 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, STR, 3); }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 212 "program_lexer.l"
+#line 219 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SUB, 3); }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 213 "program_lexer.l"
+#line 220 "program_lexer.l"
 { return_opcode(             1, SWZ, SWZ, 3); }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 215 "program_lexer.l"
+#line 222 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, 3); }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 216 "program_lexer.l"
+#line 223 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, 3); }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 217 "program_lexer.l"
+#line 224 "program_lexer.l"
 { return_opcode(require_NV_fp,  TXD_OP, TXD, 3); }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 218 "program_lexer.l"
+#line 225 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, 3); }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 220 "program_lexer.l"
+#line 227 "program_lexer.l"
 { return_opcode(require_NV_fp,  SCALAR_OP, UP2H, 4); }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 221 "program_lexer.l"
+#line 228 "program_lexer.l"
 { return_opcode(require_NV_fp,  SCALAR_OP, UP2US, 5); }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 223 "program_lexer.l"
+#line 230 "program_lexer.l"
 { return_opcode(require_NV_fp,  TRI_OP, X2D, 3); }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 224 "program_lexer.l"
+#line 231 "program_lexer.l"
 { return_opcode(             1, BIN_OP, XPD, 3); }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 226 "program_lexer.l"
+#line 233 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_vp, VERTEX); }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 227 "program_lexer.l"
+#line 234 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, FRAGMENT); }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 228 "program_lexer.l"
+#line 235 "program_lexer.l"
 { return PROGRAM; }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 229 "program_lexer.l"
+#line 236 "program_lexer.l"
 { return STATE; }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 230 "program_lexer.l"
+#line 237 "program_lexer.l"
 { return RESULT; }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 232 "program_lexer.l"
+#line 239 "program_lexer.l"
 { return AMBIENT; }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 233 "program_lexer.l"
+#line 240 "program_lexer.l"
 { return ATTENUATION; }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 234 "program_lexer.l"
+#line 241 "program_lexer.l"
 { return BACK; }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 235 "program_lexer.l"
+#line 242 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, CLIP); }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 236 "program_lexer.l"
+#line 243 "program_lexer.l"
 { return COLOR; }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 237 "program_lexer.l"
+#line 244 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, DEPTH); }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 238 "program_lexer.l"
+#line 245 "program_lexer.l"
 { return DIFFUSE; }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 239 "program_lexer.l"
+#line 246 "program_lexer.l"
 { return DIRECTION; }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 240 "program_lexer.l"
+#line 247 "program_lexer.l"
 { return EMISSION; }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 241 "program_lexer.l"
+#line 248 "program_lexer.l"
 { return ENV; }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 242 "program_lexer.l"
+#line 249 "program_lexer.l"
 { return EYE; }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 243 "program_lexer.l"
+#line 250 "program_lexer.l"
 { return FOGCOORD; }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 244 "program_lexer.l"
+#line 251 "program_lexer.l"
 { return FOG; }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 245 "program_lexer.l"
+#line 252 "program_lexer.l"
 { return FRONT; }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 246 "program_lexer.l"
+#line 253 "program_lexer.l"
 { return HALF; }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 247 "program_lexer.l"
+#line 254 "program_lexer.l"
 { return INVERSE; }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 248 "program_lexer.l"
+#line 255 "program_lexer.l"
 { return INVTRANS; }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 249 "program_lexer.l"
+#line 256 "program_lexer.l"
 { return LIGHT; }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 250 "program_lexer.l"
+#line 257 "program_lexer.l"
 { return LIGHTMODEL; }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 251 "program_lexer.l"
+#line 258 "program_lexer.l"
 { return LIGHTPROD; }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 252 "program_lexer.l"
+#line 259 "program_lexer.l"
 { return LOCAL; }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 253 "program_lexer.l"
+#line 260 "program_lexer.l"
 { return MATERIAL; }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 254 "program_lexer.l"
+#line 261 "program_lexer.l"
 { return MAT_PROGRAM; }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 255 "program_lexer.l"
+#line 262 "program_lexer.l"
 { return MATRIX; }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 256 "program_lexer.l"
+#line 263 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, MATRIXINDEX); }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 257 "program_lexer.l"
+#line 264 "program_lexer.l"
 { return MODELVIEW; }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 258 "program_lexer.l"
+#line 265 "program_lexer.l"
 { return MVP; }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 259 "program_lexer.l"
+#line 266 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, NORMAL); }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 260 "program_lexer.l"
+#line 267 "program_lexer.l"
 { return OBJECT; }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 261 "program_lexer.l"
+#line 268 "program_lexer.l"
 { return PALETTE; }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 262 "program_lexer.l"
+#line 269 "program_lexer.l"
 { return PARAMS; }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 263 "program_lexer.l"
+#line 270 "program_lexer.l"
 { return PLANE; }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 264 "program_lexer.l"
+#line 271 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, POINT); }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 265 "program_lexer.l"
+#line 272 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, POINTSIZE); }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 266 "program_lexer.l"
+#line 273 "program_lexer.l"
 { return POSITION; }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 267 "program_lexer.l"
+#line 274 "program_lexer.l"
 { return PRIMARY; }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 268 "program_lexer.l"
+#line 275 "program_lexer.l"
 { return PROJECTION; }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 269 "program_lexer.l"
+#line 276 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, RANGE); }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 270 "program_lexer.l"
+#line 277 "program_lexer.l"
 { return ROW; }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 271 "program_lexer.l"
+#line 278 "program_lexer.l"
 { return SCENECOLOR; }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 272 "program_lexer.l"
+#line 279 "program_lexer.l"
 { return SECONDARY; }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 273 "program_lexer.l"
+#line 280 "program_lexer.l"
 { return SHININESS; }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 274 "program_lexer.l"
+#line 281 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, SIZE); }
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 275 "program_lexer.l"
+#line 282 "program_lexer.l"
 { return SPECULAR; }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 276 "program_lexer.l"
+#line 283 "program_lexer.l"
 { return SPOT; }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 277 "program_lexer.l"
+#line 284 "program_lexer.l"
 { return TEXCOORD; }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 278 "program_lexer.l"
+#line 285 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, TEXENV); }
        YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 279 "program_lexer.l"
+#line 286 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN); }
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 280 "program_lexer.l"
+#line 287 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_Q); }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 281 "program_lexer.l"
+#line 288 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_S); }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 282 "program_lexer.l"
+#line 289 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_T); }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 283 "program_lexer.l"
+#line 290 "program_lexer.l"
 { return TEXTURE; }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 284 "program_lexer.l"
+#line 291 "program_lexer.l"
 { return TRANSPOSE; }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 285 "program_lexer.l"
+#line 292 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, VTXATTRIB); }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 286 "program_lexer.l"
+#line 293 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, WEIGHT); }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 288 "program_lexer.l"
+#line 295 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEXTURE_UNIT); }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 289 "program_lexer.l"
+#line 296 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_1D); }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 290 "program_lexer.l"
+#line 297 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_2D); }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 291 "program_lexer.l"
+#line 298 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_3D); }
        YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 292 "program_lexer.l"
+#line 299 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_CUBE); }
        YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 293 "program_lexer.l"
+#line 300 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_rect, TEX_RECT); }
        YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 294 "program_lexer.l"
+#line 301 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); }
        YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 295 "program_lexer.l"
+#line 302 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW2D); }
        YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 296 "program_lexer.l"
+#line 303 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_rect, TEX_SHADOWRECT); }
        YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 297 "program_lexer.l"
+#line 304 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY1D); }
        YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 298 "program_lexer.l"
+#line 305 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY2D); }
        YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 299 "program_lexer.l"
+#line 306 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW1D); }
        YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 300 "program_lexer.l"
+#line 307 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW2D); }
        YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 302 "program_lexer.l"
-{
-   yylval->string = strdup(yytext);
-   return IDENTIFIER;
-}
+#line 309 "program_lexer.l"
+{ return handle_ident(yyextra, yytext, yylval); }
        YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 307 "program_lexer.l"
+#line 311 "program_lexer.l"
 { return DOT_DOT; }
        YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 309 "program_lexer.l"
+#line 313 "program_lexer.l"
 {
    yylval->integer = strtol(yytext, NULL, 10);
    return INTEGER;
@@ -2182,7 +2186,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 313 "program_lexer.l"
+#line 317 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
@@ -2194,7 +2198,7 @@ case 141:
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 317 "program_lexer.l"
+#line 321 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
@@ -2202,7 +2206,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 321 "program_lexer.l"
+#line 325 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
@@ -2210,7 +2214,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 325 "program_lexer.l"
+#line 329 "program_lexer.l"
 {
    yylval->real = strtod(yytext, NULL);
    return REAL;
@@ -2218,7 +2222,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 330 "program_lexer.l"
+#line 334 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
@@ -2227,7 +2231,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 336 "program_lexer.l"
+#line 340 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
@@ -2237,7 +2241,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 342 "program_lexer.l"
+#line 346 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
@@ -2246,7 +2250,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 347 "program_lexer.l"
+#line 351 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
@@ -2255,7 +2259,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 353 "program_lexer.l"
+#line 357 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
@@ -2265,7 +2269,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 149:
 YY_RULE_SETUP
-#line 359 "program_lexer.l"
+#line 363 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
@@ -2275,7 +2279,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 150:
 YY_RULE_SETUP
-#line 365 "program_lexer.l"
+#line 369 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
@@ -2284,7 +2288,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 371 "program_lexer.l"
+#line 375 "program_lexer.l"
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
@@ -2294,7 +2298,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 152:
 YY_RULE_SETUP
-#line 378 "program_lexer.l"
+#line 382 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
@@ -2306,7 +2310,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 153:
 YY_RULE_SETUP
-#line 387 "program_lexer.l"
+#line 391 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
@@ -2315,7 +2319,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 154:
 YY_RULE_SETUP
-#line 393 "program_lexer.l"
+#line 397 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
@@ -2325,7 +2329,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 155:
 YY_RULE_SETUP
-#line 399 "program_lexer.l"
+#line 403 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
@@ -2334,7 +2338,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 156:
 YY_RULE_SETUP
-#line 404 "program_lexer.l"
+#line 408 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
@@ -2343,7 +2347,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 157:
 YY_RULE_SETUP
-#line 410 "program_lexer.l"
+#line 414 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
@@ -2353,7 +2357,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 158:
 YY_RULE_SETUP
-#line 416 "program_lexer.l"
+#line 420 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
@@ -2363,7 +2367,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 159:
 YY_RULE_SETUP
-#line 422 "program_lexer.l"
+#line 426 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
@@ -2372,7 +2376,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 160:
 YY_RULE_SETUP
-#line 428 "program_lexer.l"
+#line 432 "program_lexer.l"
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
@@ -2382,7 +2386,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 161:
 YY_RULE_SETUP
-#line 436 "program_lexer.l"
+#line 440 "program_lexer.l"
 {
    if (require_ARB_vp) {
       return TEXGEN_R;
@@ -2396,7 +2400,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 162:
 YY_RULE_SETUP
-#line 447 "program_lexer.l"
+#line 451 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
@@ -2408,13 +2412,13 @@ YY_RULE_SETUP
        YY_BREAK
 case 163:
 YY_RULE_SETUP
-#line 456 "program_lexer.l"
+#line 460 "program_lexer.l"
 { return DOT; }
        YY_BREAK
 case 164:
 /* rule 164 can match eol */
 YY_RULE_SETUP
-#line 458 "program_lexer.l"
+#line 462 "program_lexer.l"
 {
    yylloc->first_line++;
    yylloc->first_column = 1;
@@ -2425,7 +2429,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 165:
 YY_RULE_SETUP
-#line 465 "program_lexer.l"
+#line 469 "program_lexer.l"
 /* eat whitespace */ ;
        YY_BREAK
 case 166:
@@ -2433,20 +2437,20 @@ case 166:
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 466 "program_lexer.l"
+#line 470 "program_lexer.l"
 /* eat comments */ ;
        YY_BREAK
 case 167:
 YY_RULE_SETUP
-#line 467 "program_lexer.l"
+#line 471 "program_lexer.l"
 { return yytext[0]; }
        YY_BREAK
 case 168:
 YY_RULE_SETUP
-#line 468 "program_lexer.l"
+#line 472 "program_lexer.l"
 ECHO;
        YY_BREAK
-#line 2450 "lex.yy.c"
+#line 2454 "lex.yy.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -3621,7 +3625,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 468 "program_lexer.l"
+#line 472 "program_lexer.l"
 
 
 
index d7493f42fad1fe19afbd6c1e0e647f0f5fbd299a..9e68c34ac0aec463cc078c3c8fa4c58cdf174bbd 100644 (file)
@@ -39,8 +39,7 @@
       if (condition) {                                 \
         return token;                                  \
       } else {                                         \
-        yylval->string = strdup(yytext);               \
-        return IDENTIFIER;                             \
+        return handle_ident(yyextra, yytext, yylval);  \
       }                                                        \
    } while (0)
 
@@ -64,8 +63,7 @@
         yylval->temp_inst.Opcode = OPCODE_ ## opcode;  \
         return token;                                  \
       } else {                                         \
-        yylval->string = strdup(yytext);               \
-        return IDENTIFIER;                             \
+        return handle_ident(yyextra, yytext, yylval);  \
       }                                                        \
    } while (0)
 
@@ -114,6 +112,15 @@ swiz_from_char(char c)
    return 0;
 }
 
+static int
+handle_ident(struct asm_parser_state *state, const char *text, YYSTYPE *lval)
+{
+   lval->string = strdup(text);
+
+   return (_mesa_symbol_table_find_symbol(state->st, 0, text) == NULL)
+      ? IDENTIFIER : USED_IDENTIFIER;
+}
+
 #define YY_USER_ACTION                                                 \
    do {                                                                        \
       yylloc->first_column = yylloc->last_column;                      \
@@ -299,10 +306,7 @@ ARRAY2D                   { return_token_or_IDENTIFIER(require_ARB_fp && require
 ARRAYSHADOW1D             { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW1D); }
 ARRAYSHADOW2D             { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW2D); }
 
-[_a-zA-Z$][_a-zA-Z0-9$]*  {
-   yylval->string = strdup(yytext);
-   return IDENTIFIER;
-}
+[_a-zA-Z$][_a-zA-Z0-9$]*  { return handle_ident(yyextra, yytext, yylval); }
 
 ".."                      { return DOT_DOT; }
 
index e741e9a13bd71dd45590a1a010bc49028725f847..d37b20ba429bd65bc74e382954fcc267e4abbaed 100644 (file)
@@ -303,13 +303,14 @@ static struct asm_instruction *asm_instruction_copy_ctor(
      VTXATTRIB = 352,
      WEIGHT = 353,
      IDENTIFIER = 354,
-     MASK4 = 355,
-     MASK3 = 356,
-     MASK2 = 357,
-     MASK1 = 358,
-     SWIZZLE = 359,
-     DOT_DOT = 360,
-     DOT = 361
+     USED_IDENTIFIER = 355,
+     MASK4 = 356,
+     MASK3 = 357,
+     MASK2 = 358,
+     MASK1 = 359,
+     SWIZZLE = 360,
+     DOT_DOT = 361,
+     DOT = 362
    };
 #endif
 
@@ -349,7 +350,7 @@ typedef union YYSTYPE
 
 
 /* Line 214 of yacc.c  */
-#line 353 "program_parse.tab.c"
+#line 354 "program_parse.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -373,14 +374,14 @@ typedef struct YYLTYPE
 /* Copy the second part of user declarations.  */
 
 /* Line 264 of yacc.c  */
-#line 258 "program_parse.y"
+#line 259 "program_parse.y"
 
 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
     void *yyscanner);
 
 
 /* Line 264 of yacc.c  */
-#line 384 "program_parse.tab.c"
+#line 385 "program_parse.tab.c"
 
 #ifdef short
 # undef short
@@ -597,20 +598,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   383
+#define YYLAST   393
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  117
+#define YYNTOKENS  118
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  137
+#define YYNNTS  138
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  272
+#define YYNRULES  274
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  458
+#define YYNSTATES  460
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   361
+#define YYMAXUTOK   362
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -622,15 +623,15 @@ static const yytype_uint8 yytranslate[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   112,   108,   113,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,   107,
-       2,   114,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   113,   109,   114,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,   108,
+       2,   115,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   110,     2,   111,     2,     2,     2,     2,     2,     2,
+       2,   111,     2,   112,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   115,   109,   116,     2,     2,     2,     2,
+       2,     2,     2,   116,   110,   117,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -654,7 +655,7 @@ static const yytype_uint8 yytranslate[] =
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106
+     105,   106,   107
 };
 
 #if YYDEBUG
@@ -689,123 +690,123 @@ static const yytype_uint16 yyprhs[] =
      686,   690,   694,   696,   702,   705,   708,   711,   714,   718,
      721,   725,   726,   728,   730,   731,   733,   735,   736,   738,
      740,   741,   743,   745,   746,   750,   751,   755,   756,   760,
-     762,   764,   766
+     762,   764,   766,   771,   773
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     118,     0,    -1,   119,   120,   122,    12,    -1,     3,    -1,
-       4,    -1,   120,   121,    -1,    -1,     8,    99,   107,    -1,
-     122,   123,    -1,    -1,   124,   107,    -1,   162,   107,    -1,
-     125,    -1,   126,    -1,   127,    -1,   128,    -1,   129,    -1,
-     130,    -1,   131,    -1,   132,    -1,   138,    -1,   133,    -1,
-     134,    -1,   135,    -1,    19,   143,   108,   139,    -1,    18,
-     142,   108,   141,    -1,    16,   142,   108,   139,    -1,    14,
-     142,   108,   139,   108,   139,    -1,    13,   142,   108,   141,
-     108,   141,    -1,    17,   142,   108,   141,   108,   141,   108,
-     141,    -1,    15,   142,   108,   141,   108,   136,   108,   137,
-      -1,    20,   141,    -1,    22,   142,   108,   141,   108,   141,
-     108,   141,   108,   136,   108,   137,    -1,    83,   248,    -1,
+     119,     0,    -1,   120,   121,   123,    12,    -1,     3,    -1,
+       4,    -1,   121,   122,    -1,    -1,     8,   255,   108,    -1,
+     123,   124,    -1,    -1,   125,   108,    -1,   163,   108,    -1,
+     126,    -1,   127,    -1,   128,    -1,   129,    -1,   130,    -1,
+     131,    -1,   132,    -1,   133,    -1,   139,    -1,   134,    -1,
+     135,    -1,   136,    -1,    19,   144,   109,   140,    -1,    18,
+     143,   109,   142,    -1,    16,   143,   109,   140,    -1,    14,
+     143,   109,   140,   109,   140,    -1,    13,   143,   109,   142,
+     109,   142,    -1,    17,   143,   109,   142,   109,   142,   109,
+     142,    -1,    15,   143,   109,   142,   109,   137,   109,   138,
+      -1,    20,   142,    -1,    22,   143,   109,   142,   109,   142,
+     109,   142,   109,   137,   109,   138,    -1,    83,   249,    -1,
       84,    -1,    85,    -1,    86,    -1,    87,    -1,    88,    -1,
       89,    -1,    90,    -1,    91,    -1,    92,    -1,    93,    -1,
-      94,    -1,    95,    -1,    21,   142,   108,   147,   108,   144,
-      -1,   233,   140,    -1,   233,   109,   140,   109,    -1,   147,
-     159,    -1,   230,    -1,   233,   147,   160,    -1,   233,   109,
-     147,   160,   109,    -1,   148,   161,    -1,   156,   158,    -1,
-     145,   108,   145,   108,   145,   108,   145,    -1,   233,   146,
-      -1,    23,    -1,    99,    -1,    99,    -1,   164,    -1,   149,
-     110,   150,   111,    -1,   178,    -1,   241,    -1,    99,    -1,
-      99,    -1,   151,    -1,   152,    -1,    23,    -1,   156,   157,
-     153,    -1,    -1,   112,   154,    -1,   113,   155,    -1,    23,
-      -1,    23,    -1,    99,    -1,   103,    -1,   103,    -1,   103,
-      -1,   103,    -1,   100,    -1,   104,    -1,    -1,   100,    -1,
-     101,    -1,   102,    -1,   103,    -1,    -1,   163,    -1,   170,
-      -1,   234,    -1,   237,    -1,   240,    -1,   253,    -1,     7,
-      99,   114,   164,    -1,    96,   165,    -1,    38,   169,    -1,
-      60,    -1,    98,   167,    -1,    53,    -1,    29,   246,    -1,
-      37,    -1,    74,   247,    -1,    50,   110,   168,   111,    -1,
-      97,   110,   166,   111,    -1,    23,    -1,    -1,   110,   168,
-     111,    -1,    23,    -1,    60,    -1,    29,   246,    -1,    37,
-      -1,    74,   247,    -1,   171,    -1,   172,    -1,    10,    99,
-     174,    -1,    10,    99,   110,   173,   111,   175,    -1,    -1,
-      23,    -1,   114,   177,    -1,   114,   115,   176,   116,    -1,
-     179,    -1,   176,   108,   179,    -1,   181,    -1,   217,    -1,
-     227,    -1,   181,    -1,   217,    -1,   228,    -1,   180,    -1,
-     218,    -1,   227,    -1,   181,    -1,    73,   205,    -1,    73,
-     182,    -1,    73,   184,    -1,    73,   187,    -1,    73,   189,
-      -1,    73,   195,    -1,    73,   191,    -1,    73,   198,    -1,
-      73,   200,    -1,    73,   202,    -1,    73,   204,    -1,    73,
-     216,    -1,    47,   245,   183,    -1,   193,    -1,    33,    -1,
-      69,    -1,    43,   110,   194,   111,   185,    -1,   193,    -1,
-      60,    -1,    26,    -1,    72,   186,    -1,    40,    -1,    32,
-      -1,    44,   188,    -1,    25,    -1,   245,    67,    -1,    45,
-     110,   194,   111,   245,   190,    -1,   193,    -1,    75,   249,
-     192,    -1,    29,    -1,    25,    -1,    31,    -1,    71,    -1,
-      23,    -1,    76,   247,   196,   197,    -1,    35,    -1,    54,
+      94,    -1,    95,    -1,    21,   143,   109,   148,   109,   145,
+      -1,   234,   141,    -1,   234,   110,   141,   110,    -1,   148,
+     160,    -1,   231,    -1,   234,   148,   161,    -1,   234,   110,
+     148,   161,   110,    -1,   149,   162,    -1,   157,   159,    -1,
+     146,   109,   146,   109,   146,   109,   146,    -1,   234,   147,
+      -1,    23,    -1,   255,    -1,   100,    -1,   165,    -1,   150,
+     111,   151,   112,    -1,   179,    -1,   242,    -1,   100,    -1,
+     100,    -1,   152,    -1,   153,    -1,    23,    -1,   157,   158,
+     154,    -1,    -1,   113,   155,    -1,   114,   156,    -1,    23,
+      -1,    23,    -1,   100,    -1,   104,    -1,   104,    -1,   104,
+      -1,   104,    -1,   101,    -1,   105,    -1,    -1,   101,    -1,
+     102,    -1,   103,    -1,   104,    -1,    -1,   164,    -1,   171,
+      -1,   235,    -1,   238,    -1,   241,    -1,   254,    -1,     7,
+      99,   115,   165,    -1,    96,   166,    -1,    38,   170,    -1,
+      60,    -1,    98,   168,    -1,    53,    -1,    29,   247,    -1,
+      37,    -1,    74,   248,    -1,    50,   111,   169,   112,    -1,
+      97,   111,   167,   112,    -1,    23,    -1,    -1,   111,   169,
+     112,    -1,    23,    -1,    60,    -1,    29,   247,    -1,    37,
+      -1,    74,   248,    -1,   172,    -1,   173,    -1,    10,    99,
+     175,    -1,    10,    99,   111,   174,   112,   176,    -1,    -1,
+      23,    -1,   115,   178,    -1,   115,   116,   177,   117,    -1,
+     180,    -1,   177,   109,   180,    -1,   182,    -1,   218,    -1,
+     228,    -1,   182,    -1,   218,    -1,   229,    -1,   181,    -1,
+     219,    -1,   228,    -1,   182,    -1,    73,   206,    -1,    73,
+     183,    -1,    73,   185,    -1,    73,   188,    -1,    73,   190,
+      -1,    73,   196,    -1,    73,   192,    -1,    73,   199,    -1,
+      73,   201,    -1,    73,   203,    -1,    73,   205,    -1,    73,
+     217,    -1,    47,   246,   184,    -1,   194,    -1,    33,    -1,
+      69,    -1,    43,   111,   195,   112,   186,    -1,   194,    -1,
+      60,    -1,    26,    -1,    72,   187,    -1,    40,    -1,    32,
+      -1,    44,   189,    -1,    25,    -1,   246,    67,    -1,    45,
+     111,   195,   112,   246,   191,    -1,   194,    -1,    75,   250,
+     193,    -1,    29,    -1,    25,    -1,    31,    -1,    71,    -1,
+      23,    -1,    76,   248,   197,   198,    -1,    35,    -1,    54,
       -1,    79,    -1,    80,    -1,    78,    -1,    77,    -1,    36,
-     199,    -1,    29,    -1,    56,    -1,    28,   110,   201,   111,
-      57,    -1,    23,    -1,    58,   203,    -1,    70,    -1,    26,
-      -1,   207,    66,   110,   210,   111,    -1,   207,   206,    -1,
-      -1,    66,   110,   210,   105,   210,   111,    -1,    49,   211,
-     208,    -1,    -1,   209,    -1,    41,    -1,    82,    -1,    42,
-      -1,    23,    -1,    51,   212,    -1,    63,    -1,    52,    -1,
-      81,   247,    -1,    55,   110,   214,   111,    -1,    48,   110,
-     215,   111,    -1,    -1,   213,    -1,    23,    -1,    23,    -1,
-      23,    -1,    30,    64,    -1,   221,    -1,   224,    -1,   219,
-      -1,   222,    -1,    62,    34,   110,   220,   111,    -1,   225,
-      -1,   225,   105,   225,    -1,    62,    34,   110,   225,   111,
-      -1,    62,    46,   110,   223,   111,    -1,   226,    -1,   226,
-     105,   226,    -1,    62,    46,   110,   226,   111,    -1,    23,
-      -1,    23,    -1,   229,    -1,   231,    -1,   230,    -1,   231,
-      -1,   232,    -1,    24,    -1,    23,    -1,   115,   232,   116,
-      -1,   115,   232,   108,   232,   116,    -1,   115,   232,   108,
-     232,   108,   232,   116,    -1,   115,   232,   108,   232,   108,
-     232,   108,   232,   116,    -1,   233,    24,    -1,   233,    23,
-      -1,   112,    -1,   113,    -1,    -1,    -1,   236,    11,   235,
-     239,    -1,    99,    -1,    -1,    -1,     5,   238,   239,    -1,
-     239,   108,    99,    -1,    99,    -1,   236,     9,    99,   114,
-     241,    -1,    65,    60,    -1,    65,    37,    -1,    65,   242,
-      -1,    65,    59,    -1,    65,    74,   247,    -1,    65,    30,
-      -1,    29,   243,   244,    -1,    -1,    39,    -1,    27,    -1,
+     200,    -1,    29,    -1,    56,    -1,    28,   111,   202,   112,
+      57,    -1,    23,    -1,    58,   204,    -1,    70,    -1,    26,
+      -1,   208,    66,   111,   211,   112,    -1,   208,   207,    -1,
+      -1,    66,   111,   211,   106,   211,   112,    -1,    49,   212,
+     209,    -1,    -1,   210,    -1,    41,    -1,    82,    -1,    42,
+      -1,    23,    -1,    51,   213,    -1,    63,    -1,    52,    -1,
+      81,   248,    -1,    55,   111,   215,   112,    -1,    48,   111,
+     216,   112,    -1,    -1,   214,    -1,    23,    -1,    23,    -1,
+      23,    -1,    30,    64,    -1,   222,    -1,   225,    -1,   220,
+      -1,   223,    -1,    62,    34,   111,   221,   112,    -1,   226,
+      -1,   226,   106,   226,    -1,    62,    34,   111,   226,   112,
+      -1,    62,    46,   111,   224,   112,    -1,   227,    -1,   227,
+     106,   227,    -1,    62,    46,   111,   227,   112,    -1,    23,
+      -1,    23,    -1,   230,    -1,   232,    -1,   231,    -1,   232,
+      -1,   233,    -1,    24,    -1,    23,    -1,   116,   233,   117,
+      -1,   116,   233,   109,   233,   117,    -1,   116,   233,   109,
+     233,   109,   233,   117,    -1,   116,   233,   109,   233,   109,
+     233,   109,   233,   117,    -1,   234,    24,    -1,   234,    23,
+      -1,   113,    -1,   114,    -1,    -1,    -1,   237,    11,   236,
+     240,    -1,   255,    -1,    -1,    -1,     5,   239,   240,    -1,
+     240,   109,    99,    -1,    99,    -1,   237,     9,    99,   115,
+     242,    -1,    65,    60,    -1,    65,    37,    -1,    65,   243,
+      -1,    65,    59,    -1,    65,    74,   248,    -1,    65,    30,
+      -1,    29,   244,   245,    -1,    -1,    39,    -1,    27,    -1,
       -1,    61,    -1,    68,    -1,    -1,    39,    -1,    27,    -1,
-      -1,    61,    -1,    68,    -1,    -1,   110,   250,   111,    -1,
-      -1,   110,   251,   111,    -1,    -1,   110,   252,   111,    -1,
-      23,    -1,    23,    -1,    23,    -1,     6,    99,   114,    99,
-      -1
+      -1,    61,    -1,    68,    -1,    -1,   111,   251,   112,    -1,
+      -1,   111,   252,   112,    -1,    -1,   111,   253,   112,    -1,
+      23,    -1,    23,    -1,    23,    -1,     6,    99,   115,   100,
+      -1,    99,    -1,   100,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   265,   265,   268,   276,   288,   289,   292,   314,   315,
-     318,   333,   336,   341,   348,   349,   350,   351,   352,   353,
-     354,   357,   358,   359,   362,   368,   374,   380,   387,   393,
-     400,   444,   451,   495,   501,   502,   503,   504,   505,   506,
-     507,   508,   509,   510,   511,   512,   515,   527,   535,   552,
-     559,   578,   589,   609,   631,   640,   673,   680,   695,   745,
-     787,   798,   819,   829,   835,   866,   883,   883,   885,   892,
-     904,   905,   906,   909,   921,   933,   951,   962,   974,   976,
-     977,   978,   979,   982,   982,   982,   982,   983,   986,   987,
-     988,   989,   990,   991,   994,  1012,  1016,  1022,  1026,  1030,
-    1034,  1043,  1052,  1056,  1061,  1067,  1078,  1078,  1079,  1081,
-    1085,  1089,  1093,  1099,  1099,  1101,  1117,  1140,  1143,  1154,
-    1160,  1166,  1167,  1174,  1180,  1186,  1194,  1200,  1206,  1214,
-    1220,  1226,  1234,  1235,  1238,  1239,  1240,  1241,  1242,  1243,
-    1244,  1245,  1246,  1247,  1248,  1251,  1260,  1264,  1268,  1274,
-    1283,  1287,  1291,  1300,  1304,  1310,  1316,  1323,  1328,  1336,
-    1346,  1348,  1356,  1362,  1366,  1370,  1376,  1387,  1396,  1400,
-    1405,  1409,  1413,  1417,  1423,  1430,  1434,  1440,  1448,  1459,
-    1466,  1470,  1476,  1486,  1497,  1501,  1519,  1528,  1531,  1537,
-    1541,  1545,  1551,  1562,  1567,  1572,  1577,  1582,  1587,  1595,
-    1598,  1603,  1616,  1624,  1635,  1643,  1643,  1645,  1645,  1647,
-    1657,  1662,  1669,  1679,  1688,  1693,  1700,  1710,  1720,  1732,
-    1732,  1733,  1733,  1735,  1745,  1753,  1763,  1771,  1779,  1788,
-    1799,  1803,  1809,  1810,  1811,  1814,  1814,  1817,  1852,  1856,
-    1856,  1859,  1865,  1873,  1886,  1895,  1904,  1908,  1917,  1926,
-    1937,  1944,  1949,  1958,  1970,  1973,  1982,  1993,  1994,  1995,
-    1998,  1999,  2000,  2003,  2004,  2007,  2008,  2011,  2012,  2015,
-    2026,  2037,  2048
+       0,   266,   266,   269,   277,   289,   290,   293,   315,   316,
+     319,   334,   337,   342,   349,   350,   351,   352,   353,   354,
+     355,   358,   359,   360,   363,   369,   375,   381,   388,   394,
+     401,   445,   452,   496,   502,   503,   504,   505,   506,   507,
+     508,   509,   510,   511,   512,   513,   516,   528,   536,   553,
+     560,   579,   590,   610,   632,   641,   674,   681,   696,   746,
+     788,   799,   820,   830,   836,   867,   884,   884,   886,   893,
+     905,   906,   907,   910,   922,   934,   952,   963,   975,   977,
+     978,   979,   980,   983,   983,   983,   983,   984,   987,   988,
+     989,   990,   991,   992,   995,  1013,  1017,  1023,  1027,  1031,
+    1035,  1044,  1053,  1057,  1062,  1068,  1079,  1079,  1080,  1082,
+    1086,  1090,  1094,  1100,  1100,  1102,  1118,  1141,  1144,  1155,
+    1161,  1167,  1168,  1175,  1181,  1187,  1195,  1201,  1207,  1215,
+    1221,  1227,  1235,  1236,  1239,  1240,  1241,  1242,  1243,  1244,
+    1245,  1246,  1247,  1248,  1249,  1252,  1261,  1265,  1269,  1275,
+    1284,  1288,  1292,  1301,  1305,  1311,  1317,  1324,  1329,  1337,
+    1347,  1349,  1357,  1363,  1367,  1371,  1377,  1388,  1397,  1401,
+    1406,  1410,  1414,  1418,  1424,  1431,  1435,  1441,  1449,  1460,
+    1467,  1471,  1477,  1487,  1498,  1502,  1520,  1529,  1532,  1538,
+    1542,  1546,  1552,  1563,  1568,  1573,  1578,  1583,  1588,  1596,
+    1599,  1604,  1617,  1625,  1636,  1644,  1644,  1646,  1646,  1648,
+    1658,  1663,  1670,  1680,  1689,  1694,  1701,  1711,  1721,  1733,
+    1733,  1734,  1734,  1736,  1746,  1754,  1764,  1772,  1780,  1789,
+    1800,  1804,  1810,  1811,  1812,  1815,  1815,  1818,  1853,  1857,
+    1857,  1860,  1866,  1874,  1887,  1896,  1905,  1909,  1918,  1927,
+    1938,  1945,  1950,  1959,  1971,  1974,  1983,  1994,  1995,  1996,
+    1999,  2000,  2001,  2004,  2005,  2008,  2009,  2012,  2013,  2016,
+    2027,  2038,  2049,  2070,  2071
 };
 #endif
 
@@ -830,11 +831,11 @@ static const char *const yytname[] =
   "TEX_2D", "TEX_3D", "TEX_CUBE", "TEX_RECT", "TEX_SHADOW1D",
   "TEX_SHADOW2D", "TEX_SHADOWRECT", "TEX_ARRAY1D", "TEX_ARRAY2D",
   "TEX_ARRAYSHADOW1D", "TEX_ARRAYSHADOW2D", "VERTEX", "VTXATTRIB",
-  "WEIGHT", "IDENTIFIER", "MASK4", "MASK3", "MASK2", "MASK1", "SWIZZLE",
-  "DOT_DOT", "DOT", "';'", "','", "'|'", "'['", "']'", "'+'", "'-'", "'='",
-  "'{'", "'}'", "$accept", "program", "language", "optionSequence",
-  "option", "statementSequence", "statement", "instruction",
-  "ALU_instruction", "TexInstruction", "ARL_instruction",
+  "WEIGHT", "IDENTIFIER", "USED_IDENTIFIER", "MASK4", "MASK3", "MASK2",
+  "MASK1", "SWIZZLE", "DOT_DOT", "DOT", "';'", "','", "'|'", "'['", "']'",
+  "'+'", "'-'", "'='", "'{'", "'}'", "$accept", "program", "language",
+  "optionSequence", "option", "statementSequence", "statement",
+  "instruction", "ALU_instruction", "TexInstruction", "ARL_instruction",
   "VECTORop_instruction", "SCALARop_instruction", "BINSCop_instruction",
   "BINop_instruction", "TRIop_instruction", "SAMPLE_instruction",
   "KIL_instruction", "TXD_instruction", "texImageUnit", "texTarget",
@@ -873,7 +874,7 @@ static const char *const yytname[] =
   "optResultColorType", "optFaceType", "optColorType",
   "optTexCoordUnitNum", "optTexImageUnitNum", "optLegacyTexUnitNum",
   "texCoordUnitNum", "texImageUnitNum", "legacyTexUnitNum",
-  "ALIAS_statement", 0
+  "ALIAS_statement", "string", 0
 };
 #endif
 
@@ -892,42 +893,42 @@ static const yytype_uint16 yytoknum[] =
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,    59,    44,   124,
-      91,    93,    43,    45,    61,   123,   125
+     355,   356,   357,   358,   359,   360,   361,   362,    59,    44,
+     124,    91,    93,    43,    45,    61,   123,   125
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   117,   118,   119,   119,   120,   120,   121,   122,   122,
-     123,   123,   124,   124,   125,   125,   125,   125,   125,   125,
-     125,   126,   126,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   137,   137,   137,   137,   137,
-     137,   137,   137,   137,   137,   137,   138,   139,   139,   140,
-     140,   141,   141,   142,   143,   144,   145,   146,   146,   147,
-     147,   147,   147,   148,   148,   149,   150,   150,   151,   152,
-     153,   153,   153,   154,   155,   156,   157,   158,   159,   160,
-     160,   160,   160,   161,   161,   161,   161,   161,   162,   162,
-     162,   162,   162,   162,   163,   164,   164,   165,   165,   165,
-     165,   165,   165,   165,   165,   166,   167,   167,   168,   169,
-     169,   169,   169,   170,   170,   171,   172,   173,   173,   174,
-     175,   176,   176,   177,   177,   177,   178,   178,   178,   179,
-     179,   179,   180,   180,   181,   181,   181,   181,   181,   181,
-     181,   181,   181,   181,   181,   182,   183,   183,   183,   184,
-     185,   185,   185,   185,   185,   186,   187,   188,   188,   189,
-     190,   191,   192,   193,   193,   193,   194,   195,   196,   196,
-     197,   197,   197,   197,   198,   199,   199,   200,   201,   202,
-     203,   203,   204,   205,   206,   206,   207,   208,   208,   209,
-     209,   209,   210,   211,   211,   211,   211,   211,   211,   212,
-     212,   213,   214,   215,   216,   217,   217,   218,   218,   219,
-     220,   220,   221,   222,   223,   223,   224,   225,   226,   227,
-     227,   228,   228,   229,   230,   230,   231,   231,   231,   231,
-     232,   232,   233,   233,   233,   235,   234,   236,   236,   238,
-     237,   239,   239,   240,   241,   241,   241,   241,   241,   241,
-     242,   243,   243,   243,   244,   244,   244,   245,   245,   245,
-     246,   246,   246,   247,   247,   248,   248,   249,   249,   250,
-     251,   252,   253
+       0,   118,   119,   120,   120,   121,   121,   122,   123,   123,
+     124,   124,   125,   125,   126,   126,   126,   126,   126,   126,
+     126,   127,   127,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   138,   138,   138,   138,   138,
+     138,   138,   138,   138,   138,   138,   139,   140,   140,   141,
+     141,   142,   142,   143,   144,   145,   146,   147,   147,   148,
+     148,   148,   148,   149,   149,   150,   151,   151,   152,   153,
+     154,   154,   154,   155,   156,   157,   158,   159,   160,   161,
+     161,   161,   161,   162,   162,   162,   162,   162,   163,   163,
+     163,   163,   163,   163,   164,   165,   165,   166,   166,   166,
+     166,   166,   166,   166,   166,   167,   168,   168,   169,   170,
+     170,   170,   170,   171,   171,   172,   173,   174,   174,   175,
+     176,   177,   177,   178,   178,   178,   179,   179,   179,   180,
+     180,   180,   181,   181,   182,   182,   182,   182,   182,   182,
+     182,   182,   182,   182,   182,   183,   184,   184,   184,   185,
+     186,   186,   186,   186,   186,   187,   188,   189,   189,   190,
+     191,   192,   193,   194,   194,   194,   195,   196,   197,   197,
+     198,   198,   198,   198,   199,   200,   200,   201,   202,   203,
+     204,   204,   205,   206,   207,   207,   208,   209,   209,   210,
+     210,   210,   211,   212,   212,   212,   212,   212,   212,   213,
+     213,   214,   215,   216,   217,   218,   218,   219,   219,   220,
+     221,   221,   222,   223,   224,   224,   225,   226,   227,   228,
+     228,   229,   229,   230,   231,   231,   232,   232,   232,   232,
+     233,   233,   234,   234,   234,   236,   235,   237,   237,   239,
+     238,   240,   240,   241,   242,   242,   242,   242,   242,   242,
+     243,   244,   244,   244,   245,   245,   245,   246,   246,   246,
+     247,   247,   247,   248,   248,   249,   249,   250,   250,   251,
+     252,   253,   254,   255,   255
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -960,7 +961,7 @@ static const yytype_uint8 yyr2[] =
        3,     3,     1,     5,     2,     2,     2,     2,     3,     2,
        3,     0,     1,     1,     0,     1,     1,     0,     1,     1,
        0,     1,     1,     0,     3,     0,     3,     0,     3,     1,
-       1,     1,     4
+       1,     1,     4,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -969,142 +970,142 @@ static const yytype_uint8 yyr2[] =
 static const yytype_uint16 yydefact[] =
 {
        0,     3,     4,     0,     6,     1,     9,     0,     5,   238,
-       0,   239,     0,     0,     0,     2,     0,     0,     0,     0,
-       0,     0,     0,   234,     0,     0,   237,     8,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    21,    22,    23,
-      20,     0,    88,    89,   113,   114,    90,     0,    91,    92,
-      93,     7,     0,     0,     0,     0,     0,    64,     0,    87,
-      63,     0,     0,     0,     0,     0,    75,     0,     0,   232,
-     233,    31,     0,     0,     0,    10,    11,     0,   235,   242,
-     240,     0,     0,   117,   234,   115,   251,   249,   245,   247,
-     244,   263,   246,   234,    83,    84,    85,    86,    53,   234,
-     234,   234,   234,   234,   234,    77,    54,   225,   224,     0,
-       0,     0,     0,    59,     0,   234,    82,     0,    60,    62,
-     126,   127,   205,   206,   128,   221,   222,     0,   234,     0,
-       0,     0,   272,    94,   118,     0,   119,   123,   124,   125,
-     219,   220,   223,     0,   253,   252,   254,     0,   248,     0,
-       0,     0,     0,    26,     0,    25,    24,   260,   111,   109,
-     263,    96,     0,     0,     0,     0,     0,     0,   257,     0,
-     257,     0,     0,   267,   263,   134,   135,   136,   137,   139,
-     138,   140,   141,   142,   143,     0,   144,   260,   101,     0,
-      99,    97,   263,     0,   106,    95,    82,     0,    80,    79,
-      81,    51,     0,     0,     0,     0,   236,   241,     0,   231,
-     230,   255,   256,   250,   269,     0,   234,   234,     0,    47,
-       0,    50,     0,   234,   261,   262,   110,   112,     0,     0,
-       0,   204,   175,   176,   174,     0,   157,   259,   258,   156,
-       0,     0,     0,     0,   199,   195,     0,   194,   263,   187,
-     181,   180,   179,     0,     0,     0,     0,   100,     0,   102,
-       0,     0,    98,     0,   234,   226,    68,     0,    66,    67,
-       0,   234,   234,   243,     0,   116,   264,    28,    27,     0,
-      78,    49,   265,     0,     0,   217,     0,   218,     0,   178,
-       0,   166,     0,   158,     0,   163,   164,   147,   148,   165,
-     145,   146,     0,   201,   193,   200,     0,   196,   189,   191,
-     190,   186,   188,   271,     0,   162,   161,   168,   169,     0,
-       0,   108,     0,   105,     0,     0,    52,     0,    61,    76,
-      70,    46,     0,     0,     0,   234,    48,     0,    33,     0,
-     234,   212,   216,     0,     0,   257,   203,     0,   202,     0,
-     268,   173,   172,   170,   171,   167,   192,     0,   103,   104,
-     107,   234,   227,     0,     0,    69,   234,    57,    58,    56,
-     234,     0,     0,     0,   121,   129,   132,   130,   207,   208,
-     131,   270,     0,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    30,    29,   177,   152,   154,
-     151,     0,   149,   150,     0,   198,   197,   182,     0,    73,
-      71,    74,    72,     0,     0,     0,     0,   133,   184,   234,
-     120,   266,   155,   153,   159,   160,   234,   228,   234,     0,
-       0,     0,     0,   183,   122,     0,     0,     0,     0,   210,
-       0,   214,     0,   229,   234,     0,   209,     0,   213,     0,
-       0,    55,    32,   211,   215,     0,     0,   185
+     273,   274,     0,   239,     0,     0,     0,     2,     0,     0,
+       0,     0,     0,     0,     0,   234,     0,     0,     8,     0,
+      12,    13,    14,    15,    16,    17,    18,    19,    21,    22,
+      23,    20,     0,    88,    89,   113,   114,    90,     0,    91,
+      92,    93,   237,     7,     0,     0,     0,     0,     0,    64,
+       0,    87,    63,     0,     0,     0,     0,     0,    75,     0,
+       0,   232,   233,    31,     0,     0,     0,    10,    11,     0,
+     235,   242,   240,     0,     0,   117,   234,   115,   251,   249,
+     245,   247,   244,   263,   246,   234,    83,    84,    85,    86,
+      53,   234,   234,   234,   234,   234,   234,    77,    54,   225,
+     224,     0,     0,     0,     0,    59,     0,   234,    82,     0,
+      60,    62,   126,   127,   205,   206,   128,   221,   222,     0,
+     234,     0,     0,     0,   272,    94,   118,     0,   119,   123,
+     124,   125,   219,   220,   223,     0,   253,   252,   254,     0,
+     248,     0,     0,     0,     0,    26,     0,    25,    24,   260,
+     111,   109,   263,    96,     0,     0,     0,     0,     0,     0,
+     257,     0,   257,     0,     0,   267,   263,   134,   135,   136,
+     137,   139,   138,   140,   141,   142,   143,     0,   144,   260,
+     101,     0,    99,    97,   263,     0,   106,    95,    82,     0,
+      80,    79,    81,    51,     0,     0,     0,     0,   236,   241,
+       0,   231,   230,   255,   256,   250,   269,     0,   234,   234,
+       0,    47,     0,    50,     0,   234,   261,   262,   110,   112,
+       0,     0,     0,   204,   175,   176,   174,     0,   157,   259,
+     258,   156,     0,     0,     0,     0,   199,   195,     0,   194,
+     263,   187,   181,   180,   179,     0,     0,     0,     0,   100,
+       0,   102,     0,     0,    98,     0,   234,   226,    68,     0,
+      66,    67,     0,   234,   234,   243,     0,   116,   264,    28,
+      27,     0,    78,    49,   265,     0,     0,   217,     0,   218,
+       0,   178,     0,   166,     0,   158,     0,   163,   164,   147,
+     148,   165,   145,   146,     0,   201,   193,   200,     0,   196,
+     189,   191,   190,   186,   188,   271,     0,   162,   161,   168,
+     169,     0,     0,   108,     0,   105,     0,     0,    52,     0,
+      61,    76,    70,    46,     0,     0,     0,   234,    48,     0,
+      33,     0,   234,   212,   216,     0,     0,   257,   203,     0,
+     202,     0,   268,   173,   172,   170,   171,   167,   192,     0,
+     103,   104,   107,   234,   227,     0,     0,    69,   234,    57,
+      56,    58,   234,     0,     0,     0,   121,   129,   132,   130,
+     207,   208,   131,   270,     0,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    30,    29,   177,
+     152,   154,   151,     0,   149,   150,     0,   198,   197,   182,
+       0,    73,    71,    74,    72,     0,     0,     0,     0,   133,
+     184,   234,   120,   266,   155,   153,   159,   160,   234,   228,
+     234,     0,     0,     0,     0,   183,   122,     0,     0,     0,
+       0,   210,     0,   214,     0,   229,   234,     0,   209,     0,
+     213,     0,     0,    55,    32,   211,   215,     0,     0,   185
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     3,     4,     6,     8,     9,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,   283,
-     395,    40,   150,   219,    71,    58,    67,   331,   332,   369,
-     220,    59,   117,   267,   268,   269,   365,   410,   412,    68,
-     330,   106,   281,   201,    98,    41,    42,   118,   195,   324,
-     262,   322,   161,    43,    44,    45,   135,    85,   275,   373,
-     136,   119,   374,   375,   120,   175,   300,   176,   402,   423,
-     177,   239,   178,   424,   179,   316,   301,   292,   180,   319,
-     355,   181,   234,   182,   290,   183,   252,   184,   417,   433,
-     185,   311,   312,   357,   249,   304,   305,   349,   347,   186,
-     121,   377,   378,   438,   122,   379,   440,   123,   286,   288,
-     380,   124,   140,   125,   126,   142,    72,    46,   130,    47,
-      48,    52,    80,    49,    60,    92,   146,   213,   240,   226,
-     148,   338,   254,   215,   382,   314,    50
+      -1,     3,     4,     6,     8,     9,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,   285,
+     397,    41,   152,   221,    73,    60,    69,   333,   334,   370,
+     222,    61,   119,   269,   270,   271,   367,   412,   414,    70,
+     332,   108,   283,   203,   100,    42,    43,   120,   197,   326,
+     264,   324,   163,    44,    45,    46,   137,    87,   277,   375,
+     138,   121,   376,   377,   122,   177,   302,   178,   404,   425,
+     179,   241,   180,   426,   181,   318,   303,   294,   182,   321,
+     357,   183,   236,   184,   292,   185,   254,   186,   419,   435,
+     187,   313,   314,   359,   251,   306,   307,   351,   349,   188,
+     123,   379,   380,   440,   124,   381,   442,   125,   288,   290,
+     382,   126,   142,   127,   128,   144,    74,    47,   132,    48,
+      49,    54,    82,    50,    62,    94,   148,   215,   242,   228,
+     150,   340,   256,   217,   384,   316,    51,    12
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -386
+#define YYPACT_NINF -401
 static const yytype_int16 yypact[] =
 {
-     203,  -386,  -386,    23,  -386,  -386,    67,   -50,  -386,    20,
-      16,  -386,    21,    37,    48,  -386,   -19,   -19,   -19,   -19,
-     -19,   -19,    58,   131,   -19,   -19,  -386,  -386,    53,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,    64,  -386,  -386,  -386,  -386,  -386,   229,  -386,  -386,
-    -386,  -386,    77,    81,    89,    78,    95,  -386,    75,   130,
-    -386,   119,   139,   140,   142,   146,  -386,   147,   136,  -386,
-    -386,  -386,   -14,   148,   149,  -386,  -386,   159,  -386,  -386,
-     152,   162,   -20,   239,    -6,  -386,    31,  -386,  -386,  -386,
-    -386,   153,  -386,   131,  -386,  -386,  -386,  -386,  -386,   131,
-     131,   131,   131,   131,   131,  -386,  -386,  -386,  -386,    28,
-      50,   123,    40,   154,    30,   131,   101,   155,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,    30,   131,   156,
-      77,   167,  -386,  -386,  -386,   158,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,   218,  -386,  -386,    13,   244,  -386,   160,
-     163,   -10,   164,  -386,   165,  -386,  -386,    73,  -386,  -386,
-     153,  -386,   166,   168,   169,   210,    42,   170,    91,   171,
-     100,   145,    38,   173,   153,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,   209,  -386,    73,  -386,   174,
-    -386,  -386,   153,   175,   176,  -386,   101,    57,  -386,  -386,
-    -386,  -386,   -16,   179,   180,   225,   152,  -386,   177,  -386,
-    -386,  -386,  -386,  -386,  -386,   181,   131,   131,    30,  -386,
-     190,   191,   212,   131,  -386,  -386,  -386,  -386,   273,   274,
-     275,  -386,  -386,  -386,  -386,   276,  -386,  -386,  -386,  -386,
-     233,   276,   115,   192,   278,  -386,   193,  -386,   153,     9,
-    -386,  -386,  -386,   281,   277,    25,   195,  -386,   284,  -386,
-     285,   284,  -386,   200,   131,  -386,  -386,   199,  -386,  -386,
-     208,   131,   131,  -386,   197,  -386,  -386,  -386,  -386,   206,
-    -386,  -386,   207,   205,   211,  -386,   213,  -386,   214,  -386,
-     215,  -386,   216,  -386,   217,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,   293,  -386,  -386,  -386,   295,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,   219,  -386,  -386,  -386,  -386,   157,
-     297,  -386,   220,  -386,   221,   222,  -386,    66,  -386,  -386,
-     133,  -386,   226,   -12,   230,    49,  -386,   298,  -386,   125,
-     131,  -386,  -386,   265,   118,   100,  -386,   228,  -386,   232,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,   234,  -386,  -386,
-    -386,   131,  -386,   300,   306,  -386,   131,  -386,  -386,  -386,
-     131,   129,   123,    69,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,   235,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,   308,  -386,  -386,    41,  -386,  -386,  -386,    86,  -386,
-    -386,  -386,  -386,   240,   241,   231,   237,  -386,   286,    49,
-    -386,  -386,  -386,  -386,  -386,  -386,   131,  -386,   131,   212,
-     273,   274,   243,  -386,  -386,   238,   242,   247,   245,   246,
-     248,   252,   297,  -386,   131,   125,  -386,   273,  -386,   274,
-      45,  -386,  -386,  -386,  -386,   297,   250,  -386
+     122,  -401,  -401,    49,  -401,  -401,    56,    61,  -401,    20,
+    -401,  -401,    -5,  -401,     7,    45,    78,  -401,   -47,   -47,
+     -47,   -47,   -47,   -47,    79,    85,   -47,   -47,  -401,    99,
+    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,
+    -401,  -401,   127,  -401,  -401,  -401,  -401,  -401,   120,  -401,
+    -401,  -401,  -401,  -401,   135,   133,   134,    25,   129,  -401,
+     138,   137,  -401,   145,   146,   147,   148,   151,  -401,   152,
+     154,  -401,  -401,  -401,   -14,   153,   155,  -401,  -401,   143,
+    -401,  -401,   156,   163,    14,   243,    32,  -401,    31,  -401,
+    -401,  -401,  -401,   157,  -401,    85,  -401,  -401,  -401,  -401,
+    -401,    85,    85,    85,    85,    85,    85,  -401,  -401,  -401,
+    -401,   112,   149,   126,    54,   158,    27,    85,   132,   159,
+    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,    27,
+      85,   160,   135,   168,  -401,  -401,  -401,   161,  -401,  -401,
+    -401,  -401,  -401,  -401,  -401,   198,  -401,  -401,    89,   248,
+    -401,   167,   169,    22,   170,  -401,   171,  -401,  -401,   117,
+    -401,  -401,   157,  -401,   172,   173,   174,   208,    -1,   175,
+      53,   176,   165,   142,    -3,   177,   157,  -401,  -401,  -401,
+    -401,  -401,  -401,  -401,  -401,  -401,  -401,   215,  -401,   117,
+    -401,   179,  -401,  -401,   157,   180,   181,  -401,   132,   -38,
+    -401,  -401,  -401,  -401,   -10,   184,   185,   209,   156,  -401,
+     182,  -401,  -401,  -401,  -401,  -401,  -401,   183,    85,    85,
+      27,  -401,   192,   194,   216,    85,  -401,  -401,  -401,  -401,
+     277,   278,   279,  -401,  -401,  -401,  -401,   280,  -401,  -401,
+    -401,  -401,   237,   280,    68,   195,   282,  -401,   196,  -401,
+     157,    33,  -401,  -401,  -401,   285,   281,    19,   200,  -401,
+     286,  -401,   289,   286,  -401,   203,    85,  -401,  -401,   202,
+    -401,  -401,   212,    85,    85,  -401,   201,  -401,  -401,  -401,
+    -401,   210,  -401,  -401,   207,   213,   214,  -401,   218,  -401,
+     219,  -401,   220,  -401,   221,  -401,   222,  -401,  -401,  -401,
+    -401,  -401,  -401,  -401,   296,  -401,  -401,  -401,   298,  -401,
+    -401,  -401,  -401,  -401,  -401,  -401,   226,  -401,  -401,  -401,
+    -401,   166,   301,  -401,   227,  -401,   228,   229,  -401,    46,
+    -401,  -401,   116,  -401,   217,   -12,   234,    51,  -401,   302,
+    -401,   125,    85,  -401,  -401,   270,    37,   165,  -401,   233,
+    -401,   235,  -401,  -401,  -401,  -401,  -401,  -401,  -401,   236,
+    -401,  -401,  -401,    85,  -401,   305,   323,  -401,    85,  -401,
+    -401,  -401,    85,   162,   126,    59,  -401,  -401,  -401,  -401,
+    -401,  -401,  -401,  -401,   238,  -401,  -401,  -401,  -401,  -401,
+    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,
+    -401,  -401,  -401,   317,  -401,  -401,    41,  -401,  -401,  -401,
+      65,  -401,  -401,  -401,  -401,   242,   244,   241,   245,  -401,
+     288,    51,  -401,  -401,  -401,  -401,  -401,  -401,    85,  -401,
+      85,   216,   277,   278,   246,  -401,  -401,   247,   249,   250,
+     251,   255,   253,   256,   301,  -401,    85,   125,  -401,   277,
+    -401,   278,    94,  -401,  -401,  -401,  -401,   301,   254,  -401
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,   -71,
-     -80,  -386,   -96,   144,   -81,   204,  -386,  -386,  -350,  -386,
-     -17,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,   161,
-    -386,  -386,  -386,   172,  -386,  -386,  -386,   282,  -386,  -386,
-    -386,   105,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,   -52,  -386,   -83,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,  -300,   128,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
-      -2,  -386,  -386,  -327,  -386,  -386,  -386,  -386,  -386,  -386,
-     287,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -385,  -318,
-     288,  -386,  -386,  -145,   -82,  -112,   -84,  -386,  -386,  -386,
-    -386,  -386,   249,  -386,   178,  -386,  -386,  -386,  -166,   186,
-    -131,  -386,  -386,  -386,  -386,  -386,  -386
+    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,
+    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,   -76,
+     -80,  -401,   -98,   150,   -83,   205,  -401,  -401,  -361,  -401,
+     -18,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,   164,
+    -401,  -401,  -401,   178,  -401,  -401,  -401,   287,  -401,  -401,
+    -401,   106,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,
+    -401,  -401,   -49,  -401,   -85,  -401,  -401,  -401,  -401,  -401,
+    -401,  -401,  -401,  -401,  -401,  -401,  -330,   130,  -401,  -401,
+    -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -401,
+       0,  -401,  -401,  -400,  -401,  -401,  -401,  -401,  -401,  -401,
+     291,  -401,  -401,  -401,  -401,  -401,  -401,  -401,  -302,  -317,
+     292,  -401,  -401,  -139,   -84,  -113,   -86,  -401,  -401,  -401,
+    -401,  -401,   252,  -401,   186,  -401,  -401,  -401,  -166,   190,
+    -133,  -401,  -401,  -401,  -401,  -401,  -401,    -6
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1114,140 +1115,142 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -222
 static const yytype_int16 yytable[] =
 {
-     143,   137,   141,   197,   242,   153,   221,   266,   156,   107,
-     108,   367,   149,   107,   108,   151,   413,   151,   109,   152,
-     151,   154,   155,     5,   109,    11,    12,    13,   109,   227,
-      14,   143,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,   255,   403,   439,    56,   204,   110,    10,
-     308,   309,   110,   107,   108,   116,   110,   157,   144,   111,
-     317,   259,   453,   111,   250,   158,   295,   111,   109,   187,
-     145,   232,   296,   221,   211,     7,   112,   188,   436,   318,
-      57,   212,   112,    66,   162,   113,   112,   368,   159,   113,
-     189,   310,   110,   190,   451,   114,   163,   196,   233,   218,
-     191,   115,   160,   111,   425,   115,    69,    70,   251,   115,
-     203,   371,   299,   441,   192,   450,   236,   307,   237,    26,
-      53,   278,   372,    51,    86,    87,   112,   237,   456,   113,
-     238,   454,    88,   151,   224,   277,    54,   193,   194,   238,
-     295,   225,   284,   295,   398,   115,   296,    55,   297,   296,
-     455,   164,   327,   165,    89,    90,   407,    66,   399,   166,
-      75,    69,    70,   415,   115,   264,   167,   168,   169,    91,
-     170,    76,   171,   265,   361,   416,    79,   419,   400,   404,
-     143,   172,   362,    93,   298,   420,   299,   333,    83,   299,
-     401,   334,    84,   243,   426,    81,   244,   245,   173,   174,
-     246,   198,   427,    82,   199,   200,     1,     2,   247,   383,
-     384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
-     394,    61,    62,    63,    64,    65,   248,    99,    73,    74,
-      94,    95,    96,    97,   351,   352,   353,   354,    77,   105,
-      78,   209,   210,    69,    70,   363,   364,   100,   101,   408,
-     102,   143,   376,   141,   103,   104,   127,   128,   129,   396,
-     131,   132,   134,   147,   -65,   202,   207,   214,   216,   208,
-     205,   217,   222,   223,   231,   256,   228,   143,   229,   230,
-     235,   241,   333,   253,   258,   260,   261,   271,   272,   414,
-      56,   274,   276,   280,  -221,   282,   285,   287,   289,   291,
-     293,   303,   302,   306,   313,   320,   315,   321,   323,   326,
-     328,   329,   335,   339,   435,   336,   346,   337,   348,   340,
-     356,   381,   397,   409,   341,   342,   343,   344,   345,   411,
-     350,   358,   359,   360,   366,   143,   376,   141,   370,   405,
-     422,   430,   143,   406,   333,   407,   421,   431,   428,   429,
-     444,   447,   432,   442,   443,   445,   446,   449,   437,   448,
-     333,   457,   279,   270,   133,   452,   325,   434,   263,   294,
-     418,   138,   139,   257,     0,     0,     0,     0,     0,   206,
-       0,     0,     0,   273
+     145,   139,   143,    52,   199,   155,   244,   415,   158,   109,
+     110,   369,   151,   268,   223,   153,   405,   153,    58,   154,
+     153,   156,   157,   252,   111,    13,    14,    15,   234,   229,
+      16,   145,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,   257,   452,   109,   110,   206,   112,     5,
+     109,   110,   111,    59,   319,   235,   118,   458,   146,   113,
+     111,   261,   297,   400,     7,   111,   297,   253,   298,   438,
+     147,   266,   298,   320,   310,   311,   427,   401,   238,   267,
+     239,   223,   114,   189,   112,   453,   115,    10,    11,   112,
+      68,   190,   240,   297,   112,   113,   116,   402,   198,   298,
+     113,   299,   117,    53,   191,   113,    55,   192,   301,   403,
+     114,   205,   301,   373,   193,   312,   443,   309,   114,    10,
+      11,   280,   115,   114,   374,     1,     2,   115,   194,    79,
+     441,    80,   220,   153,   456,   279,    85,   300,   117,   301,
+      86,   159,   286,   117,    56,    71,    72,   455,   117,   160,
+     213,   195,   196,   329,   166,   363,   167,   214,    88,    89,
+      10,    11,   168,   364,    71,    72,    90,   117,   421,   169,
+     170,   171,   161,   172,   428,   173,   422,    57,   226,    68,
+     145,   406,   429,   164,   174,   227,   162,   335,    91,    92,
+     245,   336,   239,   246,   247,   165,   417,   248,    71,    72,
+     457,   175,   176,    93,   240,   249,   409,    77,   418,   385,
+     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+     396,   211,   212,   250,    63,    64,    65,    66,    67,   365,
+     366,    75,    76,   200,    81,    78,   201,   202,    96,    97,
+      98,    99,   131,   353,   354,   355,   356,    95,    83,    84,
+     410,   145,   378,   143,   101,   102,   103,   104,   107,   398,
+     105,   106,   129,   134,   130,   133,   136,   209,   149,   -65,
+     204,   216,   233,   210,    58,   207,   218,   145,   219,   224,
+     225,   258,   335,   230,   231,   232,   237,   243,   255,   416,
+     260,   262,   263,   273,   274,   278,   282,   276,  -221,   284,
+     287,   289,   291,   293,   295,   305,   304,   308,   315,   323,
+     317,   322,   325,   328,   330,   437,   331,   337,   339,   348,
+     338,   350,   341,   342,   358,   383,   368,   399,   411,   371,
+     343,   344,   345,   346,   347,   145,   378,   143,   352,   360,
+     361,   362,   145,   372,   335,   407,   413,   408,   409,   424,
+     423,   430,   432,   431,   434,   439,   433,   444,   446,   447,
+     335,   449,   451,   448,   445,   450,   459,   454,   272,   327,
+     281,   135,   436,   296,   420,     0,   265,   140,   141,   259,
+       0,     0,     0,     0,   208,     0,     0,     0,     0,     0,
+       0,     0,     0,   275
 };
 
 static const yytype_int16 yycheck[] =
 {
-      84,    84,    84,   115,   170,   101,   151,    23,   104,    23,
-      24,    23,    93,    23,    24,    99,   366,   101,    38,   100,
-     104,   102,   103,     0,    38,     5,     6,     7,    38,   160,
-      10,   115,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,   174,   344,   430,    65,   128,    62,    99,
-      41,    42,    62,    23,    24,    72,    62,    29,    27,    73,
-      35,   192,   447,    73,    26,    37,    25,    73,    38,    29,
-      39,    29,    31,   218,    61,     8,    96,    37,   428,    54,
-      99,    68,    96,    99,    34,    99,    96,    99,    60,    99,
-      50,    82,    62,    53,   444,   109,    46,   114,    56,   109,
-      60,   115,    74,    73,   404,   115,   112,   113,    70,   115,
-     127,    62,    71,   431,    74,   442,    25,   248,    27,    99,
-      99,   217,    73,   107,    29,    30,    96,    27,   455,    99,
-      39,   449,    37,   217,    61,   216,    99,    97,    98,    39,
-      25,    68,   223,    25,    26,   115,    31,    99,    33,    31,
-     105,    28,   264,    30,    59,    60,   111,    99,    40,    36,
-     107,   112,   113,    34,   115,   108,    43,    44,    45,    74,
-      47,   107,    49,   116,   108,    46,    99,   108,    60,   345,
-     264,    58,   116,   108,    69,   116,    71,   271,   110,    71,
-      72,   272,   114,    48,   108,   114,    51,    52,    75,    76,
-      55,   100,   116,   114,   103,   104,     3,     4,    63,    84,
+      86,    86,    86,     9,   117,   103,   172,   368,   106,    23,
+      24,    23,    95,    23,   153,   101,   346,   103,    65,   102,
+     106,   104,   105,    26,    38,     5,     6,     7,    29,   162,
+      10,   117,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,   176,   444,    23,    24,   130,    62,     0,
+      23,    24,    38,   100,    35,    56,    74,   457,    27,    73,
+      38,   194,    25,    26,     8,    38,    25,    70,    31,   430,
+      39,   109,    31,    54,    41,    42,   406,    40,    25,   117,
+      27,   220,    96,    29,    62,   446,   100,    99,   100,    62,
+     100,    37,    39,    25,    62,    73,   110,    60,   116,    31,
+      73,    33,   116,   108,    50,    73,    99,    53,    71,    72,
+      96,   129,    71,    62,    60,    82,   433,   250,    96,    99,
+     100,   219,   100,    96,    73,     3,     4,   100,    74,     9,
+     432,    11,   110,   219,   451,   218,   111,    69,   116,    71,
+     115,    29,   225,   116,    99,   113,   114,   449,   116,    37,
+      61,    97,    98,   266,    28,   109,    30,    68,    29,    30,
+      99,   100,    36,   117,   113,   114,    37,   116,   109,    43,
+      44,    45,    60,    47,   109,    49,   117,    99,    61,   100,
+     266,   347,   117,    34,    58,    68,    74,   273,    59,    60,
+      48,   274,    27,    51,    52,    46,    34,    55,   113,   114,
+     106,    75,    76,    74,    39,    63,   112,   108,    46,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    17,    18,    19,    20,    21,    81,   108,    24,    25,
-     100,   101,   102,   103,    77,    78,    79,    80,     9,   103,
-      11,    23,    24,   112,   113,   112,   113,   108,   108,   361,
-     108,   335,   335,   335,   108,   108,   108,   108,    99,   340,
-     108,    99,    23,   110,   110,   110,    99,    23,   108,   111,
-     114,   108,   108,   108,    64,    66,   110,   361,   110,   110,
-     110,   110,   366,   110,   110,   110,   110,   108,   108,   370,
-      65,   114,   111,   103,   103,    83,    23,    23,    23,    23,
-      67,    23,   110,   110,    23,   110,    29,    23,    23,   109,
-     111,   103,   115,   108,   426,   109,    23,   110,    23,   108,
-      23,    23,    57,    23,   111,   111,   111,   111,   111,    23,
-     111,   111,   111,   111,   108,   419,   419,   419,   108,   111,
-      32,   110,   426,   111,   428,   111,   111,   110,   108,   108,
-     108,   105,    66,   110,   116,   108,   111,   105,   429,   111,
-     444,   111,   218,   202,    82,   445,   261,   419,   196,   241,
-     372,    84,    84,   187,    -1,    -1,    -1,    -1,    -1,   130,
-      -1,    -1,    -1,   205
+      95,    23,    24,    81,    19,    20,    21,    22,    23,   113,
+     114,    26,    27,   101,    99,   108,   104,   105,   101,   102,
+     103,   104,    99,    77,    78,    79,    80,   109,   115,   115,
+     363,   337,   337,   337,   109,   109,   109,   109,   104,   342,
+     109,   109,   109,   100,   109,   109,    23,    99,   111,   111,
+     111,    23,    64,   112,    65,   115,   109,   363,   109,   109,
+     109,    66,   368,   111,   111,   111,   111,   111,   111,   372,
+     111,   111,   111,   109,   109,   112,   104,   115,   104,    83,
+      23,    23,    23,    23,    67,    23,   111,   111,    23,    23,
+      29,   111,    23,   110,   112,   428,   104,   116,   111,    23,
+     110,    23,   109,   109,    23,    23,   109,    57,    23,   335,
+     112,   112,   112,   112,   112,   421,   421,   421,   112,   112,
+     112,   112,   428,   109,   430,   112,    23,   112,   112,    32,
+     112,   109,   111,   109,    66,   431,   111,   111,   109,   109,
+     446,   106,   106,   112,   117,   112,   112,   447,   204,   263,
+     220,    84,   421,   243,   374,    -1,   198,    86,    86,   189,
+      -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   207
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,     4,   118,   119,     0,   120,     8,   121,   122,
-      99,     5,     6,     7,    10,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    99,   123,   124,   125,
+       0,     3,     4,   119,   120,     0,   121,     8,   122,   123,
+      99,   100,   255,     5,     6,     7,    10,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,   124,   125,
      126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     138,   162,   163,   170,   171,   172,   234,   236,   237,   240,
-     253,   107,   238,    99,    99,    99,    65,    99,   142,   148,
-     241,   142,   142,   142,   142,   142,    99,   143,   156,   112,
-     113,   141,   233,   142,   142,   107,   107,     9,    11,    99,
-     239,   114,   114,   110,   114,   174,    29,    30,    37,    59,
-      60,    74,   242,   108,   100,   101,   102,   103,   161,   108,
-     108,   108,   108,   108,   108,   103,   158,    23,    24,    38,
-      62,    73,    96,    99,   109,   115,   147,   149,   164,   178,
-     181,   217,   221,   224,   228,   230,   231,   108,   108,    99,
-     235,   108,    99,   164,    23,   173,   177,   181,   217,   227,
-     229,   231,   232,   233,    27,    39,   243,   110,   247,   141,
-     139,   233,   141,   139,   141,   141,   139,    29,    37,    60,
-      74,   169,    34,    46,    28,    30,    36,    43,    44,    45,
-      47,    49,    58,    75,    76,   182,   184,   187,   189,   191,
-     195,   198,   200,   202,   204,   207,   216,    29,    37,    50,
-      53,    60,    74,    97,    98,   165,   147,   232,   100,   103,
-     104,   160,   110,   147,   141,   114,   239,    99,   111,    23,
-      24,    61,    68,   244,    23,   250,   108,   108,   109,   140,
-     147,   230,   108,   108,    61,    68,   246,   247,   110,   110,
-     110,    64,    29,    56,   199,   110,    25,    27,    39,   188,
-     245,   110,   245,    48,    51,    52,    55,    63,    81,   211,
-      26,    70,   203,   110,   249,   247,    66,   246,   110,   247,
-     110,   110,   167,   160,   108,   116,    23,   150,   151,   152,
-     156,   108,   108,   241,   114,   175,   111,   141,   139,   140,
-     103,   159,    83,   136,   141,    23,   225,    23,   226,    23,
-     201,    23,   194,    67,   194,    25,    31,    33,    69,    71,
-     183,   193,   110,    23,   212,   213,   110,   247,    41,    42,
-      82,   208,   209,    23,   252,    29,   192,    35,    54,   196,
-     110,    23,   168,    23,   166,   168,   109,   232,   111,   103,
-     157,   144,   145,   233,   141,   115,   109,   110,   248,   108,
-     108,   111,   111,   111,   111,   111,    23,   215,    23,   214,
-     111,    77,    78,    79,    80,   197,    23,   210,   111,   111,
-     111,   108,   116,   112,   113,   153,   108,    23,    99,   146,
-     108,    62,    73,   176,   179,   180,   181,   218,   219,   222,
-     227,    23,   251,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,   137,   141,    57,    26,    40,
-      60,    72,   185,   193,   245,   111,   111,   111,   232,    23,
-     154,    23,   155,   145,   141,    34,    46,   205,   207,   108,
-     116,   111,    32,   186,   190,   193,   108,   116,   108,   108,
-     110,   110,    66,   206,   179,   232,   145,   136,   220,   225,
-     223,   226,   110,   116,   108,   108,   111,   105,   111,   105,
-     210,   145,   137,   225,   226,   105,   210,   111
+     136,   139,   163,   164,   171,   172,   173,   235,   237,   238,
+     241,   254,   255,   108,   239,    99,    99,    99,    65,   100,
+     143,   149,   242,   143,   143,   143,   143,   143,   100,   144,
+     157,   113,   114,   142,   234,   143,   143,   108,   108,     9,
+      11,    99,   240,   115,   115,   111,   115,   175,    29,    30,
+      37,    59,    60,    74,   243,   109,   101,   102,   103,   104,
+     162,   109,   109,   109,   109,   109,   109,   104,   159,    23,
+      24,    38,    62,    73,    96,   100,   110,   116,   148,   150,
+     165,   179,   182,   218,   222,   225,   229,   231,   232,   109,
+     109,    99,   236,   109,   100,   165,    23,   174,   178,   182,
+     218,   228,   230,   232,   233,   234,    27,    39,   244,   111,
+     248,   142,   140,   234,   142,   140,   142,   142,   140,    29,
+      37,    60,    74,   170,    34,    46,    28,    30,    36,    43,
+      44,    45,    47,    49,    58,    75,    76,   183,   185,   188,
+     190,   192,   196,   199,   201,   203,   205,   208,   217,    29,
+      37,    50,    53,    60,    74,    97,    98,   166,   148,   233,
+     101,   104,   105,   161,   111,   148,   142,   115,   240,    99,
+     112,    23,    24,    61,    68,   245,    23,   251,   109,   109,
+     110,   141,   148,   231,   109,   109,    61,    68,   247,   248,
+     111,   111,   111,    64,    29,    56,   200,   111,    25,    27,
+      39,   189,   246,   111,   246,    48,    51,    52,    55,    63,
+      81,   212,    26,    70,   204,   111,   250,   248,    66,   247,
+     111,   248,   111,   111,   168,   161,   109,   117,    23,   151,
+     152,   153,   157,   109,   109,   242,   115,   176,   112,   142,
+     140,   141,   104,   160,    83,   137,   142,    23,   226,    23,
+     227,    23,   202,    23,   195,    67,   195,    25,    31,    33,
+      69,    71,   184,   194,   111,    23,   213,   214,   111,   248,
+      41,    42,    82,   209,   210,    23,   253,    29,   193,    35,
+      54,   197,   111,    23,   169,    23,   167,   169,   110,   233,
+     112,   104,   158,   145,   146,   234,   142,   116,   110,   111,
+     249,   109,   109,   112,   112,   112,   112,   112,    23,   216,
+      23,   215,   112,    77,    78,    79,    80,   198,    23,   211,
+     112,   112,   112,   109,   117,   113,   114,   154,   109,    23,
+     147,   255,   109,    62,    73,   177,   180,   181,   182,   219,
+     220,   223,   228,    23,   252,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,   138,   142,    57,
+      26,    40,    60,    72,   186,   194,   246,   112,   112,   112,
+     233,    23,   155,    23,   156,   146,   142,    34,    46,   206,
+     208,   109,   117,   112,    32,   187,   191,   194,   109,   117,
+     109,   109,   111,   111,    66,   207,   180,   233,   146,   137,
+     221,   226,   224,   227,   111,   117,   109,   109,   112,   106,
+     112,   106,   211,   146,   138,   226,   227,   106,   211,   112
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2101,7 +2104,7 @@ yyreduce:
         case 3:
 
 /* Line 1455 of yacc.c  */
-#line 269 "program_parse.y"
+#line 270 "program_parse.y"
     {
           if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid fragment program header");
@@ -2114,7 +2117,7 @@ yyreduce:
   case 4:
 
 /* Line 1455 of yacc.c  */
-#line 277 "program_parse.y"
+#line 278 "program_parse.y"
     {
           if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex program header");
@@ -2129,7 +2132,7 @@ yyreduce:
   case 7:
 
 /* Line 1455 of yacc.c  */
-#line 293 "program_parse.y"
+#line 294 "program_parse.y"
     {
           int valid = 0;
 
@@ -2154,7 +2157,7 @@ yyreduce:
   case 10:
 
 /* Line 1455 of yacc.c  */
-#line 319 "program_parse.y"
+#line 320 "program_parse.y"
     {
           if ((yyvsp[(1) - (2)].inst) != NULL) {
              if (state->inst_tail == NULL) {
@@ -2174,7 +2177,7 @@ yyreduce:
   case 12:
 
 /* Line 1455 of yacc.c  */
-#line 337 "program_parse.y"
+#line 338 "program_parse.y"
     {
           (yyval.inst) = (yyvsp[(1) - (1)].inst);
           state->prog->NumAluInstructions++;
@@ -2184,7 +2187,7 @@ yyreduce:
   case 13:
 
 /* Line 1455 of yacc.c  */
-#line 342 "program_parse.y"
+#line 343 "program_parse.y"
     {
           (yyval.inst) = (yyvsp[(1) - (1)].inst);
           state->prog->NumTexInstructions++;
@@ -2194,7 +2197,7 @@ yyreduce:
   case 24:
 
 /* Line 1455 of yacc.c  */
-#line 363 "program_parse.y"
+#line 364 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
        ;}
@@ -2203,7 +2206,7 @@ yyreduce:
   case 25:
 
 /* Line 1455 of yacc.c  */
-#line 369 "program_parse.y"
+#line 370 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
        ;}
@@ -2212,7 +2215,7 @@ yyreduce:
   case 26:
 
 /* Line 1455 of yacc.c  */
-#line 375 "program_parse.y"
+#line 376 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);
        ;}
@@ -2221,7 +2224,7 @@ yyreduce:
   case 27:
 
 /* Line 1455 of yacc.c  */
-#line 381 "program_parse.y"
+#line 382 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL);
        ;}
@@ -2230,7 +2233,7 @@ yyreduce:
   case 28:
 
 /* Line 1455 of yacc.c  */
-#line 388 "program_parse.y"
+#line 389 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL);
        ;}
@@ -2239,7 +2242,7 @@ yyreduce:
   case 29:
 
 /* Line 1455 of yacc.c  */
-#line 395 "program_parse.y"
+#line 396 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), & (yyvsp[(6) - (8)].src_reg), & (yyvsp[(8) - (8)].src_reg));
        ;}
@@ -2248,7 +2251,7 @@ yyreduce:
   case 30:
 
 /* Line 1455 of yacc.c  */
-#line 401 "program_parse.y"
+#line 402 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), NULL, NULL);
           if ((yyval.inst) != NULL) {
@@ -2295,7 +2298,7 @@ yyreduce:
   case 31:
 
 /* Line 1455 of yacc.c  */
-#line 445 "program_parse.y"
+#line 446 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL);
           state->fragment.UsesKill = 1;
@@ -2305,7 +2308,7 @@ yyreduce:
   case 32:
 
 /* Line 1455 of yacc.c  */
-#line 452 "program_parse.y"
+#line 453 "program_parse.y"
     {
           (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (12)].temp_inst), & (yyvsp[(2) - (12)].dst_reg), & (yyvsp[(4) - (12)].src_reg), & (yyvsp[(6) - (12)].src_reg), & (yyvsp[(8) - (12)].src_reg));
           if ((yyval.inst) != NULL) {
@@ -2352,7 +2355,7 @@ yyreduce:
   case 33:
 
 /* Line 1455 of yacc.c  */
-#line 496 "program_parse.y"
+#line 497 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
@@ -2361,91 +2364,91 @@ yyreduce:
   case 34:
 
 /* Line 1455 of yacc.c  */
-#line 501 "program_parse.y"
+#line 502 "program_parse.y"
     { (yyval.integer) = TEXTURE_1D_INDEX; ;}
     break;
 
   case 35:
 
 /* Line 1455 of yacc.c  */
-#line 502 "program_parse.y"
+#line 503 "program_parse.y"
     { (yyval.integer) = TEXTURE_2D_INDEX; ;}
     break;
 
   case 36:
 
 /* Line 1455 of yacc.c  */
-#line 503 "program_parse.y"
+#line 504 "program_parse.y"
     { (yyval.integer) = TEXTURE_3D_INDEX; ;}
     break;
 
   case 37:
 
 /* Line 1455 of yacc.c  */
-#line 504 "program_parse.y"
+#line 505 "program_parse.y"
     { (yyval.integer) = TEXTURE_CUBE_INDEX; ;}
     break;
 
   case 38:
 
 /* Line 1455 of yacc.c  */
-#line 505 "program_parse.y"
+#line 506 "program_parse.y"
     { (yyval.integer) = TEXTURE_RECT_INDEX; ;}
     break;
 
   case 39:
 
 /* Line 1455 of yacc.c  */
-#line 506 "program_parse.y"
+#line 507 "program_parse.y"
     { (yyval.integer) = -TEXTURE_1D_INDEX; ;}
     break;
 
   case 40:
 
 /* Line 1455 of yacc.c  */
-#line 507 "program_parse.y"
+#line 508 "program_parse.y"
     { (yyval.integer) = -TEXTURE_2D_INDEX; ;}
     break;
 
   case 41:
 
 /* Line 1455 of yacc.c  */
-#line 508 "program_parse.y"
+#line 509 "program_parse.y"
     { (yyval.integer) = -TEXTURE_RECT_INDEX; ;}
     break;
 
   case 42:
 
 /* Line 1455 of yacc.c  */
-#line 509 "program_parse.y"
+#line 510 "program_parse.y"
     { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; ;}
     break;
 
   case 43:
 
 /* Line 1455 of yacc.c  */
-#line 510 "program_parse.y"
+#line 511 "program_parse.y"
     { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; ;}
     break;
 
   case 44:
 
 /* Line 1455 of yacc.c  */
-#line 511 "program_parse.y"
+#line 512 "program_parse.y"
     { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; ;}
     break;
 
   case 45:
 
 /* Line 1455 of yacc.c  */
-#line 512 "program_parse.y"
+#line 513 "program_parse.y"
     { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; ;}
     break;
 
   case 46:
 
 /* Line 1455 of yacc.c  */
-#line 516 "program_parse.y"
+#line 517 "program_parse.y"
     {
           /* FIXME: Is this correct?  Should the extenedSwizzle be applied
            * FIXME: to the existing swizzle?
@@ -2460,7 +2463,7 @@ yyreduce:
   case 47:
 
 /* Line 1455 of yacc.c  */
-#line 528 "program_parse.y"
+#line 529 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (2)].src_reg);
 
@@ -2473,7 +2476,7 @@ yyreduce:
   case 48:
 
 /* Line 1455 of yacc.c  */
-#line 536 "program_parse.y"
+#line 537 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(3) - (4)].src_reg);
 
@@ -2493,7 +2496,7 @@ yyreduce:
   case 49:
 
 /* Line 1455 of yacc.c  */
-#line 553 "program_parse.y"
+#line 554 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(1) - (2)].src_reg);
 
@@ -2505,7 +2508,7 @@ yyreduce:
   case 50:
 
 /* Line 1455 of yacc.c  */
-#line 560 "program_parse.y"
+#line 561 "program_parse.y"
     {
           struct asm_symbol temp_sym;
 
@@ -2527,7 +2530,7 @@ yyreduce:
   case 51:
 
 /* Line 1455 of yacc.c  */
-#line 579 "program_parse.y"
+#line 580 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
 
@@ -2543,7 +2546,7 @@ yyreduce:
   case 52:
 
 /* Line 1455 of yacc.c  */
-#line 590 "program_parse.y"
+#line 591 "program_parse.y"
     {
           (yyval.src_reg) = (yyvsp[(3) - (5)].src_reg);
 
@@ -2565,7 +2568,7 @@ yyreduce:
   case 53:
 
 /* Line 1455 of yacc.c  */
-#line 610 "program_parse.y"
+#line 611 "program_parse.y"
     {
           (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);
           (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask;
@@ -2590,7 +2593,7 @@ yyreduce:
   case 54:
 
 /* Line 1455 of yacc.c  */
-#line 632 "program_parse.y"
+#line 633 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_ADDRESS;
@@ -2602,7 +2605,7 @@ yyreduce:
   case 55:
 
 /* Line 1455 of yacc.c  */
-#line 641 "program_parse.y"
+#line 642 "program_parse.y"
     {
           const unsigned xyzw_valid =
              ((yyvsp[(1) - (7)].ext_swizzle).xyzw_valid << 0)
@@ -2638,7 +2641,7 @@ yyreduce:
   case 56:
 
 /* Line 1455 of yacc.c  */
-#line 674 "program_parse.y"
+#line 675 "program_parse.y"
     {
           (yyval.ext_swizzle) = (yyvsp[(2) - (2)].ext_swizzle);
           (yyval.ext_swizzle).negate = ((yyvsp[(1) - (2)].negate)) ? 1 : 0;
@@ -2648,7 +2651,7 @@ yyreduce:
   case 57:
 
 /* Line 1455 of yacc.c  */
-#line 681 "program_parse.y"
+#line 682 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2668,7 +2671,7 @@ yyreduce:
   case 58:
 
 /* Line 1455 of yacc.c  */
-#line 696 "program_parse.y"
+#line 697 "program_parse.y"
     {
           if (strlen((yyvsp[(1) - (1)].string)) > 1) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
@@ -2721,7 +2724,7 @@ yyreduce:
   case 59:
 
 /* Line 1455 of yacc.c  */
-#line 746 "program_parse.y"
+#line 747 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2768,7 +2771,7 @@ yyreduce:
   case 60:
 
 /* Line 1455 of yacc.c  */
-#line 788 "program_parse.y"
+#line 789 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = PROGRAM_INPUT;
@@ -2784,7 +2787,7 @@ yyreduce:
   case 61:
 
 /* Line 1455 of yacc.c  */
-#line 799 "program_parse.y"
+#line 800 "program_parse.y"
     {
           if (! (yyvsp[(3) - (4)].src_reg).Base.RelAddr
               && ((unsigned) (yyvsp[(3) - (4)].src_reg).Base.Index >= (yyvsp[(1) - (4)].sym)->param_binding_length)) {
@@ -2810,7 +2813,7 @@ yyreduce:
   case 62:
 
 /* Line 1455 of yacc.c  */
-#line 820 "program_parse.y"
+#line 821 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.File = ((yyvsp[(1) - (1)].temp_sym).name != NULL) 
@@ -2823,7 +2826,7 @@ yyreduce:
   case 63:
 
 /* Line 1455 of yacc.c  */
-#line 830 "program_parse.y"
+#line 831 "program_parse.y"
     {
           init_dst_reg(& (yyval.dst_reg));
           (yyval.dst_reg).File = PROGRAM_OUTPUT;
@@ -2834,7 +2837,7 @@ yyreduce:
   case 64:
 
 /* Line 1455 of yacc.c  */
-#line 836 "program_parse.y"
+#line 837 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2868,7 +2871,7 @@ yyreduce:
   case 65:
 
 /* Line 1455 of yacc.c  */
-#line 867 "program_parse.y"
+#line 868 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2888,7 +2891,7 @@ yyreduce:
   case 68:
 
 /* Line 1455 of yacc.c  */
-#line 886 "program_parse.y"
+#line 887 "program_parse.y"
     {
           init_src_reg(& (yyval.src_reg));
           (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer);
@@ -2898,7 +2901,7 @@ yyreduce:
   case 69:
 
 /* Line 1455 of yacc.c  */
-#line 893 "program_parse.y"
+#line 894 "program_parse.y"
     {
           /* FINISHME: Add support for multiple address registers.
            */
@@ -2913,28 +2916,28 @@ yyreduce:
   case 70:
 
 /* Line 1455 of yacc.c  */
-#line 904 "program_parse.y"
+#line 905 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
   case 71:
 
 /* Line 1455 of yacc.c  */
-#line 905 "program_parse.y"
+#line 906 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
     break;
 
   case 72:
 
 /* Line 1455 of yacc.c  */
-#line 906 "program_parse.y"
+#line 907 "program_parse.y"
     { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;}
     break;
 
   case 73:
 
 /* Line 1455 of yacc.c  */
-#line 910 "program_parse.y"
+#line 911 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2949,7 +2952,7 @@ yyreduce:
   case 74:
 
 /* Line 1455 of yacc.c  */
-#line 922 "program_parse.y"
+#line 923 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -2964,7 +2967,7 @@ yyreduce:
   case 75:
 
 /* Line 1455 of yacc.c  */
-#line 934 "program_parse.y"
+#line 935 "program_parse.y"
     {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string));
@@ -2985,7 +2988,7 @@ yyreduce:
   case 76:
 
 /* Line 1455 of yacc.c  */
-#line 952 "program_parse.y"
+#line 953 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector");
@@ -2999,7 +3002,7 @@ yyreduce:
   case 77:
 
 /* Line 1455 of yacc.c  */
-#line 963 "program_parse.y"
+#line 964 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
              yyerror(& (yylsp[(1) - (1)]), state,
@@ -3014,21 +3017,21 @@ yyreduce:
   case 82:
 
 /* Line 1455 of yacc.c  */
-#line 979 "program_parse.y"
+#line 980 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
   case 87:
 
 /* Line 1455 of yacc.c  */
-#line 983 "program_parse.y"
+#line 984 "program_parse.y"
     { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}
     break;
 
   case 94:
 
 /* Line 1455 of yacc.c  */
-#line 995 "program_parse.y"
+#line 996 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)]));
@@ -3049,7 +3052,7 @@ yyreduce:
   case 95:
 
 /* Line 1455 of yacc.c  */
-#line 1013 "program_parse.y"
+#line 1014 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
@@ -3058,7 +3061,7 @@ yyreduce:
   case 96:
 
 /* Line 1455 of yacc.c  */
-#line 1017 "program_parse.y"
+#line 1018 "program_parse.y"
     {
           (yyval.attrib) = (yyvsp[(2) - (2)].attrib);
        ;}
@@ -3067,7 +3070,7 @@ yyreduce:
   case 97:
 
 /* Line 1455 of yacc.c  */
-#line 1023 "program_parse.y"
+#line 1024 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_POS;
        ;}
@@ -3076,7 +3079,7 @@ yyreduce:
   case 98:
 
 /* Line 1455 of yacc.c  */
-#line 1027 "program_parse.y"
+#line 1028 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_WEIGHT;
        ;}
@@ -3085,7 +3088,7 @@ yyreduce:
   case 99:
 
 /* Line 1455 of yacc.c  */
-#line 1031 "program_parse.y"
+#line 1032 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_NORMAL;
        ;}
@@ -3094,7 +3097,7 @@ yyreduce:
   case 100:
 
 /* Line 1455 of yacc.c  */
-#line 1035 "program_parse.y"
+#line 1036 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_secondary_color) {
              yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported");
@@ -3108,7 +3111,7 @@ yyreduce:
   case 101:
 
 /* Line 1455 of yacc.c  */
-#line 1044 "program_parse.y"
+#line 1045 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_fog_coord) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported");
@@ -3122,7 +3125,7 @@ yyreduce:
   case 102:
 
 /* Line 1455 of yacc.c  */
-#line 1053 "program_parse.y"
+#line 1054 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
@@ -3131,7 +3134,7 @@ yyreduce:
   case 103:
 
 /* Line 1455 of yacc.c  */
-#line 1057 "program_parse.y"
+#line 1058 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
@@ -3141,7 +3144,7 @@ yyreduce:
   case 104:
 
 /* Line 1455 of yacc.c  */
-#line 1062 "program_parse.y"
+#line 1063 "program_parse.y"
     {
           (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
        ;}
@@ -3150,7 +3153,7 @@ yyreduce:
   case 105:
 
 /* Line 1455 of yacc.c  */
-#line 1068 "program_parse.y"
+#line 1069 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference");
@@ -3164,7 +3167,7 @@ yyreduce:
   case 109:
 
 /* Line 1455 of yacc.c  */
-#line 1082 "program_parse.y"
+#line 1083 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_WPOS;
        ;}
@@ -3173,7 +3176,7 @@ yyreduce:
   case 110:
 
 /* Line 1455 of yacc.c  */
-#line 1086 "program_parse.y"
+#line 1087 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);
        ;}
@@ -3182,7 +3185,7 @@ yyreduce:
   case 111:
 
 /* Line 1455 of yacc.c  */
-#line 1090 "program_parse.y"
+#line 1091 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_FOGC;
        ;}
@@ -3191,7 +3194,7 @@ yyreduce:
   case 112:
 
 /* Line 1455 of yacc.c  */
-#line 1094 "program_parse.y"
+#line 1095 "program_parse.y"
     {
           (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
        ;}
@@ -3200,7 +3203,7 @@ yyreduce:
   case 115:
 
 /* Line 1455 of yacc.c  */
-#line 1102 "program_parse.y"
+#line 1103 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)]));
@@ -3219,7 +3222,7 @@ yyreduce:
   case 116:
 
 /* Line 1455 of yacc.c  */
-#line 1118 "program_parse.y"
+#line 1119 "program_parse.y"
     {
           if (((yyvsp[(4) - (6)].integer) != 0) && ((unsigned) (yyvsp[(4) - (6)].integer) != (yyvsp[(6) - (6)].temp_sym).param_binding_length)) {
              yyerror(& (yylsp[(4) - (6)]), state, 
@@ -3244,7 +3247,7 @@ yyreduce:
   case 117:
 
 /* Line 1455 of yacc.c  */
-#line 1140 "program_parse.y"
+#line 1141 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
@@ -3253,7 +3256,7 @@ yyreduce:
   case 118:
 
 /* Line 1455 of yacc.c  */
-#line 1144 "program_parse.y"
+#line 1145 "program_parse.y"
     {
           if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxParameters)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid parameter array size");
@@ -3267,7 +3270,7 @@ yyreduce:
   case 119:
 
 /* Line 1455 of yacc.c  */
-#line 1155 "program_parse.y"
+#line 1156 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
        ;}
@@ -3276,7 +3279,7 @@ yyreduce:
   case 120:
 
 /* Line 1455 of yacc.c  */
-#line 1161 "program_parse.y"
+#line 1162 "program_parse.y"
     {
           (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
        ;}
@@ -3285,7 +3288,7 @@ yyreduce:
   case 122:
 
 /* Line 1455 of yacc.c  */
-#line 1168 "program_parse.y"
+#line 1169 "program_parse.y"
     {
           (yyvsp[(1) - (3)].temp_sym).param_binding_length += (yyvsp[(3) - (3)].temp_sym).param_binding_length;
           (yyval.temp_sym) = (yyvsp[(1) - (3)].temp_sym);
@@ -3295,7 +3298,7 @@ yyreduce:
   case 123:
 
 /* Line 1455 of yacc.c  */
-#line 1175 "program_parse.y"
+#line 1176 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3306,7 +3309,7 @@ yyreduce:
   case 124:
 
 /* Line 1455 of yacc.c  */
-#line 1181 "program_parse.y"
+#line 1182 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3317,7 +3320,7 @@ yyreduce:
   case 125:
 
 /* Line 1455 of yacc.c  */
-#line 1187 "program_parse.y"
+#line 1188 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3328,7 +3331,7 @@ yyreduce:
   case 126:
 
 /* Line 1455 of yacc.c  */
-#line 1195 "program_parse.y"
+#line 1196 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3339,7 +3342,7 @@ yyreduce:
   case 127:
 
 /* Line 1455 of yacc.c  */
-#line 1201 "program_parse.y"
+#line 1202 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3350,7 +3353,7 @@ yyreduce:
   case 128:
 
 /* Line 1455 of yacc.c  */
-#line 1207 "program_parse.y"
+#line 1208 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3361,7 +3364,7 @@ yyreduce:
   case 129:
 
 /* Line 1455 of yacc.c  */
-#line 1215 "program_parse.y"
+#line 1216 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3372,7 +3375,7 @@ yyreduce:
   case 130:
 
 /* Line 1455 of yacc.c  */
-#line 1221 "program_parse.y"
+#line 1222 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3383,7 +3386,7 @@ yyreduce:
   case 131:
 
 /* Line 1455 of yacc.c  */
-#line 1227 "program_parse.y"
+#line 1228 "program_parse.y"
     {
           memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
           (yyval.temp_sym).param_binding_begin = ~0;
@@ -3394,98 +3397,98 @@ yyreduce:
   case 132:
 
 /* Line 1455 of yacc.c  */
-#line 1234 "program_parse.y"
+#line 1235 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;}
     break;
 
   case 133:
 
 /* Line 1455 of yacc.c  */
-#line 1235 "program_parse.y"
+#line 1236 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 134:
 
 /* Line 1455 of yacc.c  */
-#line 1238 "program_parse.y"
+#line 1239 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 135:
 
 /* Line 1455 of yacc.c  */
-#line 1239 "program_parse.y"
+#line 1240 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 136:
 
 /* Line 1455 of yacc.c  */
-#line 1240 "program_parse.y"
+#line 1241 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 137:
 
 /* Line 1455 of yacc.c  */
-#line 1241 "program_parse.y"
+#line 1242 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 138:
 
 /* Line 1455 of yacc.c  */
-#line 1242 "program_parse.y"
+#line 1243 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 139:
 
 /* Line 1455 of yacc.c  */
-#line 1243 "program_parse.y"
+#line 1244 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 140:
 
 /* Line 1455 of yacc.c  */
-#line 1244 "program_parse.y"
+#line 1245 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 141:
 
 /* Line 1455 of yacc.c  */
-#line 1245 "program_parse.y"
+#line 1246 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 142:
 
 /* Line 1455 of yacc.c  */
-#line 1246 "program_parse.y"
+#line 1247 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 143:
 
 /* Line 1455 of yacc.c  */
-#line 1247 "program_parse.y"
+#line 1248 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 144:
 
 /* Line 1455 of yacc.c  */
-#line 1248 "program_parse.y"
+#line 1249 "program_parse.y"
     { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}
     break;
 
   case 145:
 
 /* Line 1455 of yacc.c  */
-#line 1252 "program_parse.y"
+#line 1253 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_MATERIAL;
@@ -3497,7 +3500,7 @@ yyreduce:
   case 146:
 
 /* Line 1455 of yacc.c  */
-#line 1261 "program_parse.y"
+#line 1262 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
@@ -3506,7 +3509,7 @@ yyreduce:
   case 147:
 
 /* Line 1455 of yacc.c  */
-#line 1265 "program_parse.y"
+#line 1266 "program_parse.y"
     {
           (yyval.integer) = STATE_EMISSION;
        ;}
@@ -3515,7 +3518,7 @@ yyreduce:
   case 148:
 
 /* Line 1455 of yacc.c  */
-#line 1269 "program_parse.y"
+#line 1270 "program_parse.y"
     {
           (yyval.integer) = STATE_SHININESS;
        ;}
@@ -3524,7 +3527,7 @@ yyreduce:
   case 149:
 
 /* Line 1455 of yacc.c  */
-#line 1275 "program_parse.y"
+#line 1276 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHT;
@@ -3536,7 +3539,7 @@ yyreduce:
   case 150:
 
 /* Line 1455 of yacc.c  */
-#line 1284 "program_parse.y"
+#line 1285 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
@@ -3545,7 +3548,7 @@ yyreduce:
   case 151:
 
 /* Line 1455 of yacc.c  */
-#line 1288 "program_parse.y"
+#line 1289 "program_parse.y"
     {
           (yyval.integer) = STATE_POSITION;
        ;}
@@ -3554,7 +3557,7 @@ yyreduce:
   case 152:
 
 /* Line 1455 of yacc.c  */
-#line 1292 "program_parse.y"
+#line 1293 "program_parse.y"
     {
           if (!state->ctx->Extensions.EXT_point_parameters) {
              yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported");
@@ -3568,7 +3571,7 @@ yyreduce:
   case 153:
 
 /* Line 1455 of yacc.c  */
-#line 1301 "program_parse.y"
+#line 1302 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(2) - (2)].integer);
        ;}
@@ -3577,7 +3580,7 @@ yyreduce:
   case 154:
 
 /* Line 1455 of yacc.c  */
-#line 1305 "program_parse.y"
+#line 1306 "program_parse.y"
     {
           (yyval.integer) = STATE_HALF_VECTOR;
        ;}
@@ -3586,7 +3589,7 @@ yyreduce:
   case 155:
 
 /* Line 1455 of yacc.c  */
-#line 1311 "program_parse.y"
+#line 1312 "program_parse.y"
     {
           (yyval.integer) = STATE_SPOT_DIRECTION;
        ;}
@@ -3595,7 +3598,7 @@ yyreduce:
   case 156:
 
 /* Line 1455 of yacc.c  */
-#line 1317 "program_parse.y"
+#line 1318 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
@@ -3605,7 +3608,7 @@ yyreduce:
   case 157:
 
 /* Line 1455 of yacc.c  */
-#line 1324 "program_parse.y"
+#line 1325 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
@@ -3615,7 +3618,7 @@ yyreduce:
   case 158:
 
 /* Line 1455 of yacc.c  */
-#line 1329 "program_parse.y"
+#line 1330 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
@@ -3626,7 +3629,7 @@ yyreduce:
   case 159:
 
 /* Line 1455 of yacc.c  */
-#line 1337 "program_parse.y"
+#line 1338 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_LIGHTPROD;
@@ -3639,7 +3642,7 @@ yyreduce:
   case 161:
 
 /* Line 1455 of yacc.c  */
-#line 1349 "program_parse.y"
+#line 1350 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(3) - (3)].integer);
@@ -3650,7 +3653,7 @@ yyreduce:
   case 162:
 
 /* Line 1455 of yacc.c  */
-#line 1357 "program_parse.y"
+#line 1358 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXENV_COLOR;
        ;}
@@ -3659,7 +3662,7 @@ yyreduce:
   case 163:
 
 /* Line 1455 of yacc.c  */
-#line 1363 "program_parse.y"
+#line 1364 "program_parse.y"
     {
           (yyval.integer) = STATE_AMBIENT;
        ;}
@@ -3668,7 +3671,7 @@ yyreduce:
   case 164:
 
 /* Line 1455 of yacc.c  */
-#line 1367 "program_parse.y"
+#line 1368 "program_parse.y"
     {
           (yyval.integer) = STATE_DIFFUSE;
        ;}
@@ -3677,7 +3680,7 @@ yyreduce:
   case 165:
 
 /* Line 1455 of yacc.c  */
-#line 1371 "program_parse.y"
+#line 1372 "program_parse.y"
     {
           (yyval.integer) = STATE_SPECULAR;
        ;}
@@ -3686,7 +3689,7 @@ yyreduce:
   case 166:
 
 /* Line 1455 of yacc.c  */
-#line 1377 "program_parse.y"
+#line 1378 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
@@ -3700,7 +3703,7 @@ yyreduce:
   case 167:
 
 /* Line 1455 of yacc.c  */
-#line 1388 "program_parse.y"
+#line 1389 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_TEXGEN;
@@ -3712,7 +3715,7 @@ yyreduce:
   case 168:
 
 /* Line 1455 of yacc.c  */
-#line 1397 "program_parse.y"
+#line 1398 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S;
        ;}
@@ -3721,7 +3724,7 @@ yyreduce:
   case 169:
 
 /* Line 1455 of yacc.c  */
-#line 1401 "program_parse.y"
+#line 1402 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_OBJECT_S;
        ;}
@@ -3730,7 +3733,7 @@ yyreduce:
   case 170:
 
 /* Line 1455 of yacc.c  */
-#line 1406 "program_parse.y"
+#line 1407 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
        ;}
@@ -3739,7 +3742,7 @@ yyreduce:
   case 171:
 
 /* Line 1455 of yacc.c  */
-#line 1410 "program_parse.y"
+#line 1411 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
        ;}
@@ -3748,7 +3751,7 @@ yyreduce:
   case 172:
 
 /* Line 1455 of yacc.c  */
-#line 1414 "program_parse.y"
+#line 1415 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
        ;}
@@ -3757,7 +3760,7 @@ yyreduce:
   case 173:
 
 /* Line 1455 of yacc.c  */
-#line 1418 "program_parse.y"
+#line 1419 "program_parse.y"
     {
           (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
        ;}
@@ -3766,7 +3769,7 @@ yyreduce:
   case 174:
 
 /* Line 1455 of yacc.c  */
-#line 1424 "program_parse.y"
+#line 1425 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
@@ -3776,7 +3779,7 @@ yyreduce:
   case 175:
 
 /* Line 1455 of yacc.c  */
-#line 1431 "program_parse.y"
+#line 1432 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_COLOR;
        ;}
@@ -3785,7 +3788,7 @@ yyreduce:
   case 176:
 
 /* Line 1455 of yacc.c  */
-#line 1435 "program_parse.y"
+#line 1436 "program_parse.y"
     {
           (yyval.integer) = STATE_FOG_PARAMS;
        ;}
@@ -3794,7 +3797,7 @@ yyreduce:
   case 177:
 
 /* Line 1455 of yacc.c  */
-#line 1441 "program_parse.y"
+#line 1442 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_CLIPPLANE;
@@ -3805,7 +3808,7 @@ yyreduce:
   case 178:
 
 /* Line 1455 of yacc.c  */
-#line 1449 "program_parse.y"
+#line 1450 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector");
@@ -3819,7 +3822,7 @@ yyreduce:
   case 179:
 
 /* Line 1455 of yacc.c  */
-#line 1460 "program_parse.y"
+#line 1461 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = (yyvsp[(2) - (2)].integer);
@@ -3829,7 +3832,7 @@ yyreduce:
   case 180:
 
 /* Line 1455 of yacc.c  */
-#line 1467 "program_parse.y"
+#line 1468 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_SIZE;
        ;}
@@ -3838,7 +3841,7 @@ yyreduce:
   case 181:
 
 /* Line 1455 of yacc.c  */
-#line 1471 "program_parse.y"
+#line 1472 "program_parse.y"
     {
           (yyval.integer) = STATE_POINT_ATTENUATION;
        ;}
@@ -3847,7 +3850,7 @@ yyreduce:
   case 182:
 
 /* Line 1455 of yacc.c  */
-#line 1477 "program_parse.y"
+#line 1478 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
@@ -3860,7 +3863,7 @@ yyreduce:
   case 183:
 
 /* Line 1455 of yacc.c  */
-#line 1487 "program_parse.y"
+#line 1488 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
           (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
@@ -3873,7 +3876,7 @@ yyreduce:
   case 184:
 
 /* Line 1455 of yacc.c  */
-#line 1497 "program_parse.y"
+#line 1498 "program_parse.y"
     {
           (yyval.state)[2] = 0;
           (yyval.state)[3] = 3;
@@ -3883,7 +3886,7 @@ yyreduce:
   case 185:
 
 /* Line 1455 of yacc.c  */
-#line 1502 "program_parse.y"
+#line 1503 "program_parse.y"
     {
           /* It seems logical that the matrix row range specifier would have
            * to specify a range or more than one row (i.e., $5 > $3).
@@ -3904,7 +3907,7 @@ yyreduce:
   case 186:
 
 /* Line 1455 of yacc.c  */
-#line 1520 "program_parse.y"
+#line 1521 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
           (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
@@ -3915,7 +3918,7 @@ yyreduce:
   case 187:
 
 /* Line 1455 of yacc.c  */
-#line 1528 "program_parse.y"
+#line 1529 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
@@ -3924,7 +3927,7 @@ yyreduce:
   case 188:
 
 /* Line 1455 of yacc.c  */
-#line 1532 "program_parse.y"
+#line 1533 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
@@ -3933,7 +3936,7 @@ yyreduce:
   case 189:
 
 /* Line 1455 of yacc.c  */
-#line 1538 "program_parse.y"
+#line 1539 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVERSE;
        ;}
@@ -3942,7 +3945,7 @@ yyreduce:
   case 190:
 
 /* Line 1455 of yacc.c  */
-#line 1542 "program_parse.y"
+#line 1543 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_TRANSPOSE;
        ;}
@@ -3951,7 +3954,7 @@ yyreduce:
   case 191:
 
 /* Line 1455 of yacc.c  */
-#line 1546 "program_parse.y"
+#line 1547 "program_parse.y"
     {
           (yyval.integer) = STATE_MATRIX_INVTRANS;
        ;}
@@ -3960,7 +3963,7 @@ yyreduce:
   case 192:
 
 /* Line 1455 of yacc.c  */
-#line 1552 "program_parse.y"
+#line 1553 "program_parse.y"
     {
           if ((yyvsp[(1) - (1)].integer) > 3) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
@@ -3974,7 +3977,7 @@ yyreduce:
   case 193:
 
 /* Line 1455 of yacc.c  */
-#line 1563 "program_parse.y"
+#line 1564 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MODELVIEW_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
@@ -3984,7 +3987,7 @@ yyreduce:
   case 194:
 
 /* Line 1455 of yacc.c  */
-#line 1568 "program_parse.y"
+#line 1569 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROJECTION_MATRIX;
           (yyval.state)[1] = 0;
@@ -3994,7 +3997,7 @@ yyreduce:
   case 195:
 
 /* Line 1455 of yacc.c  */
-#line 1573 "program_parse.y"
+#line 1574 "program_parse.y"
     {
           (yyval.state)[0] = STATE_MVP_MATRIX;
           (yyval.state)[1] = 0;
@@ -4004,7 +4007,7 @@ yyreduce:
   case 196:
 
 /* Line 1455 of yacc.c  */
-#line 1578 "program_parse.y"
+#line 1579 "program_parse.y"
     {
           (yyval.state)[0] = STATE_TEXTURE_MATRIX;
           (yyval.state)[1] = (yyvsp[(2) - (2)].integer);
@@ -4014,7 +4017,7 @@ yyreduce:
   case 197:
 
 /* Line 1455 of yacc.c  */
-#line 1583 "program_parse.y"
+#line 1584 "program_parse.y"
     {
           yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
           YYERROR;
@@ -4024,7 +4027,7 @@ yyreduce:
   case 198:
 
 /* Line 1455 of yacc.c  */
-#line 1588 "program_parse.y"
+#line 1589 "program_parse.y"
     {
           (yyval.state)[0] = STATE_PROGRAM_MATRIX;
           (yyval.state)[1] = (yyvsp[(3) - (4)].integer);
@@ -4034,7 +4037,7 @@ yyreduce:
   case 199:
 
 /* Line 1455 of yacc.c  */
-#line 1595 "program_parse.y"
+#line 1596 "program_parse.y"
     {
           (yyval.integer) = 0;
        ;}
@@ -4043,7 +4046,7 @@ yyreduce:
   case 200:
 
 /* Line 1455 of yacc.c  */
-#line 1599 "program_parse.y"
+#line 1600 "program_parse.y"
     {
           (yyval.integer) = (yyvsp[(1) - (1)].integer);
        ;}
@@ -4052,7 +4055,7 @@ yyreduce:
   case 201:
 
 /* Line 1455 of yacc.c  */
-#line 1604 "program_parse.y"
+#line 1605 "program_parse.y"
     {
           /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
            * zero is valid.
@@ -4069,7 +4072,7 @@ yyreduce:
   case 202:
 
 /* Line 1455 of yacc.c  */
-#line 1617 "program_parse.y"
+#line 1618 "program_parse.y"
     {
           /* Since GL_ARB_matrix_palette isn't supported, just let any value
            * through here.  The error will be generated later.
@@ -4081,7 +4084,7 @@ yyreduce:
   case 203:
 
 /* Line 1455 of yacc.c  */
-#line 1625 "program_parse.y"
+#line 1626 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector");
@@ -4095,7 +4098,7 @@ yyreduce:
   case 204:
 
 /* Line 1455 of yacc.c  */
-#line 1636 "program_parse.y"
+#line 1637 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = STATE_DEPTH_RANGE;
@@ -4105,7 +4108,7 @@ yyreduce:
   case 209:
 
 /* Line 1455 of yacc.c  */
-#line 1648 "program_parse.y"
+#line 1649 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4118,7 +4121,7 @@ yyreduce:
   case 210:
 
 /* Line 1455 of yacc.c  */
-#line 1658 "program_parse.y"
+#line 1659 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
@@ -4128,7 +4131,7 @@ yyreduce:
   case 211:
 
 /* Line 1455 of yacc.c  */
-#line 1663 "program_parse.y"
+#line 1664 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
@@ -4138,7 +4141,7 @@ yyreduce:
   case 212:
 
 /* Line 1455 of yacc.c  */
-#line 1670 "program_parse.y"
+#line 1671 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4151,7 +4154,7 @@ yyreduce:
   case 213:
 
 /* Line 1455 of yacc.c  */
-#line 1680 "program_parse.y"
+#line 1681 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4164,7 +4167,7 @@ yyreduce:
   case 214:
 
 /* Line 1455 of yacc.c  */
-#line 1689 "program_parse.y"
+#line 1690 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (1)].integer);
           (yyval.state)[1] = (yyvsp[(1) - (1)].integer);
@@ -4174,7 +4177,7 @@ yyreduce:
   case 215:
 
 /* Line 1455 of yacc.c  */
-#line 1694 "program_parse.y"
+#line 1695 "program_parse.y"
     {
           (yyval.state)[0] = (yyvsp[(1) - (3)].integer);
           (yyval.state)[1] = (yyvsp[(3) - (3)].integer);
@@ -4184,7 +4187,7 @@ yyreduce:
   case 216:
 
 /* Line 1455 of yacc.c  */
-#line 1701 "program_parse.y"
+#line 1702 "program_parse.y"
     {
           memset((yyval.state), 0, sizeof((yyval.state)));
           (yyval.state)[0] = state->state_param_enum;
@@ -4197,7 +4200,7 @@ yyreduce:
   case 217:
 
 /* Line 1455 of yacc.c  */
-#line 1711 "program_parse.y"
+#line 1712 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference");
@@ -4210,7 +4213,7 @@ yyreduce:
   case 218:
 
 /* Line 1455 of yacc.c  */
-#line 1721 "program_parse.y"
+#line 1722 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference");
@@ -4223,7 +4226,7 @@ yyreduce:
   case 223:
 
 /* Line 1455 of yacc.c  */
-#line 1736 "program_parse.y"
+#line 1737 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
@@ -4236,7 +4239,7 @@ yyreduce:
   case 224:
 
 /* Line 1455 of yacc.c  */
-#line 1746 "program_parse.y"
+#line 1747 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
@@ -4249,7 +4252,7 @@ yyreduce:
   case 225:
 
 /* Line 1455 of yacc.c  */
-#line 1754 "program_parse.y"
+#line 1755 "program_parse.y"
     {
           (yyval.vector).count = 1;
           (yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer);
@@ -4262,7 +4265,7 @@ yyreduce:
   case 226:
 
 /* Line 1455 of yacc.c  */
-#line 1764 "program_parse.y"
+#line 1765 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (3)].real);
@@ -4275,7 +4278,7 @@ yyreduce:
   case 227:
 
 /* Line 1455 of yacc.c  */
-#line 1772 "program_parse.y"
+#line 1773 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (5)].real);
@@ -4288,7 +4291,7 @@ yyreduce:
   case 228:
 
 /* Line 1455 of yacc.c  */
-#line 1781 "program_parse.y"
+#line 1782 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (7)].real);
@@ -4301,7 +4304,7 @@ yyreduce:
   case 229:
 
 /* Line 1455 of yacc.c  */
-#line 1790 "program_parse.y"
+#line 1791 "program_parse.y"
     {
           (yyval.vector).count = 4;
           (yyval.vector).data[0] = (yyvsp[(2) - (9)].real);
@@ -4314,7 +4317,7 @@ yyreduce:
   case 230:
 
 /* Line 1455 of yacc.c  */
-#line 1800 "program_parse.y"
+#line 1801 "program_parse.y"
     {
           (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
        ;}
@@ -4323,7 +4326,7 @@ yyreduce:
   case 231:
 
 /* Line 1455 of yacc.c  */
-#line 1804 "program_parse.y"
+#line 1805 "program_parse.y"
     {
           (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
        ;}
@@ -4332,35 +4335,35 @@ yyreduce:
   case 232:
 
 /* Line 1455 of yacc.c  */
-#line 1809 "program_parse.y"
+#line 1810 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
   case 233:
 
 /* Line 1455 of yacc.c  */
-#line 1810 "program_parse.y"
+#line 1811 "program_parse.y"
     { (yyval.negate) = TRUE;  ;}
     break;
 
   case 234:
 
 /* Line 1455 of yacc.c  */
-#line 1811 "program_parse.y"
+#line 1812 "program_parse.y"
     { (yyval.negate) = FALSE; ;}
     break;
 
   case 235:
 
 /* Line 1455 of yacc.c  */
-#line 1814 "program_parse.y"
+#line 1815 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
     break;
 
   case 237:
 
 /* Line 1455 of yacc.c  */
-#line 1818 "program_parse.y"
+#line 1819 "program_parse.y"
     {
           /* NV_fragment_program_option defines the size qualifiers in a
            * fairly broken way.  "SHORT" or "LONG" can optionally be used
@@ -4399,7 +4402,7 @@ yyreduce:
   case 238:
 
 /* Line 1455 of yacc.c  */
-#line 1852 "program_parse.y"
+#line 1853 "program_parse.y"
     {
        ;}
     break;
@@ -4407,14 +4410,14 @@ yyreduce:
   case 239:
 
 /* Line 1455 of yacc.c  */
-#line 1856 "program_parse.y"
+#line 1857 "program_parse.y"
     { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
     break;
 
   case 241:
 
 /* Line 1455 of yacc.c  */
-#line 1860 "program_parse.y"
+#line 1861 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
              YYERROR;
@@ -4425,7 +4428,7 @@ yyreduce:
   case 242:
 
 /* Line 1455 of yacc.c  */
-#line 1866 "program_parse.y"
+#line 1867 "program_parse.y"
     {
           if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
              YYERROR;
@@ -4436,7 +4439,7 @@ yyreduce:
   case 243:
 
 /* Line 1455 of yacc.c  */
-#line 1874 "program_parse.y"
+#line 1875 "program_parse.y"
     {
           struct asm_symbol *const s =
              declare_variable(state, (yyvsp[(3) - (5)].string), at_output, & (yylsp[(3) - (5)]));
@@ -4452,7 +4455,7 @@ yyreduce:
   case 244:
 
 /* Line 1455 of yacc.c  */
-#line 1887 "program_parse.y"
+#line 1888 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_HPOS;
@@ -4466,7 +4469,7 @@ yyreduce:
   case 245:
 
 /* Line 1455 of yacc.c  */
-#line 1896 "program_parse.y"
+#line 1897 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_FOGC;
@@ -4480,7 +4483,7 @@ yyreduce:
   case 246:
 
 /* Line 1455 of yacc.c  */
-#line 1905 "program_parse.y"
+#line 1906 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (2)].result);
        ;}
@@ -4489,7 +4492,7 @@ yyreduce:
   case 247:
 
 /* Line 1455 of yacc.c  */
-#line 1909 "program_parse.y"
+#line 1910 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_PSIZ;
@@ -4503,7 +4506,7 @@ yyreduce:
   case 248:
 
 /* Line 1455 of yacc.c  */
-#line 1918 "program_parse.y"
+#line 1919 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
@@ -4517,7 +4520,7 @@ yyreduce:
   case 249:
 
 /* Line 1455 of yacc.c  */
-#line 1927 "program_parse.y"
+#line 1928 "program_parse.y"
     {
           if (state->mode == ARB_fragment) {
              (yyval.result) = FRAG_RESULT_DEPTH;
@@ -4531,7 +4534,7 @@ yyreduce:
   case 250:
 
 /* Line 1455 of yacc.c  */
-#line 1938 "program_parse.y"
+#line 1939 "program_parse.y"
     {
           (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
        ;}
@@ -4540,7 +4543,7 @@ yyreduce:
   case 251:
 
 /* Line 1455 of yacc.c  */
-#line 1944 "program_parse.y"
+#line 1945 "program_parse.y"
     {
           (yyval.integer) = (state->mode == ARB_vertex)
              ? VERT_RESULT_COL0
@@ -4551,7 +4554,7 @@ yyreduce:
   case 252:
 
 /* Line 1455 of yacc.c  */
-#line 1950 "program_parse.y"
+#line 1951 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_COL0;
@@ -4565,7 +4568,7 @@ yyreduce:
   case 253:
 
 /* Line 1455 of yacc.c  */
-#line 1959 "program_parse.y"
+#line 1960 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = VERT_RESULT_BFC0;
@@ -4579,7 +4582,7 @@ yyreduce:
   case 254:
 
 /* Line 1455 of yacc.c  */
-#line 1970 "program_parse.y"
+#line 1971 "program_parse.y"
     {
           (yyval.integer) = 0; 
        ;}
@@ -4588,7 +4591,7 @@ yyreduce:
   case 255:
 
 /* Line 1455 of yacc.c  */
-#line 1974 "program_parse.y"
+#line 1975 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 0;
@@ -4602,7 +4605,7 @@ yyreduce:
   case 256:
 
 /* Line 1455 of yacc.c  */
-#line 1983 "program_parse.y"
+#line 1984 "program_parse.y"
     {
           if (state->mode == ARB_vertex) {
              (yyval.integer) = 1;
@@ -4616,91 +4619,91 @@ yyreduce:
   case 257:
 
 /* Line 1455 of yacc.c  */
-#line 1993 "program_parse.y"
+#line 1994 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
   case 258:
 
 /* Line 1455 of yacc.c  */
-#line 1994 "program_parse.y"
+#line 1995 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
   case 259:
 
 /* Line 1455 of yacc.c  */
-#line 1995 "program_parse.y"
+#line 1996 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
   case 260:
 
 /* Line 1455 of yacc.c  */
-#line 1998 "program_parse.y"
+#line 1999 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
   case 261:
 
 /* Line 1455 of yacc.c  */
-#line 1999 "program_parse.y"
+#line 2000 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
   case 262:
 
 /* Line 1455 of yacc.c  */
-#line 2000 "program_parse.y"
+#line 2001 "program_parse.y"
     { (yyval.integer) = 1; ;}
     break;
 
   case 263:
 
 /* Line 1455 of yacc.c  */
-#line 2003 "program_parse.y"
+#line 2004 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
   case 264:
 
 /* Line 1455 of yacc.c  */
-#line 2004 "program_parse.y"
+#line 2005 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
   case 265:
 
 /* Line 1455 of yacc.c  */
-#line 2007 "program_parse.y"
+#line 2008 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
   case 266:
 
 /* Line 1455 of yacc.c  */
-#line 2008 "program_parse.y"
+#line 2009 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
   case 267:
 
 /* Line 1455 of yacc.c  */
-#line 2011 "program_parse.y"
+#line 2012 "program_parse.y"
     { (yyval.integer) = 0; ;}
     break;
 
   case 268:
 
 /* Line 1455 of yacc.c  */
-#line 2012 "program_parse.y"
+#line 2013 "program_parse.y"
     { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
     break;
 
   case 269:
 
 /* Line 1455 of yacc.c  */
-#line 2016 "program_parse.y"
+#line 2017 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
@@ -4714,7 +4717,7 @@ yyreduce:
   case 270:
 
 /* Line 1455 of yacc.c  */
-#line 2027 "program_parse.y"
+#line 2028 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
@@ -4728,7 +4731,7 @@ yyreduce:
   case 271:
 
 /* Line 1455 of yacc.c  */
-#line 2038 "program_parse.y"
+#line 2039 "program_parse.y"
     {
           if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
@@ -4742,7 +4745,7 @@ yyreduce:
   case 272:
 
 /* Line 1455 of yacc.c  */
-#line 2049 "program_parse.y"
+#line 2050 "program_parse.y"
     {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
@@ -4766,7 +4769,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
-#line 4770 "program_parse.tab.c"
+#line 4773 "program_parse.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4985,7 +4988,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 2069 "program_parse.y"
+#line 2074 "program_parse.y"
 
 
 void
index 5f89532d654458e4999be31d38aae8706d4645da..c6ed6c777eaf4122aa0d22ff3da9f63b64735bb9 100644 (file)
      VTXATTRIB = 352,
      WEIGHT = 353,
      IDENTIFIER = 354,
-     MASK4 = 355,
-     MASK3 = 356,
-     MASK2 = 357,
-     MASK1 = 358,
-     SWIZZLE = 359,
-     DOT_DOT = 360,
-     DOT = 361
+     USED_IDENTIFIER = 355,
+     MASK4 = 356,
+     MASK3 = 357,
+     MASK2 = 358,
+     MASK1 = 359,
+     SWIZZLE = 360,
+     DOT_DOT = 361,
+     DOT = 362
    };
 #endif
 
@@ -182,7 +183,7 @@ typedef union YYSTYPE
 
 
 /* Line 1676 of yacc.c  */
-#line 186 "program_parse.tab.h"
+#line 187 "program_parse.tab.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index 51cc9f7f119fc355cbd65e8b9fcbbce46c1f3736..d6bac07081cf1c66e8f42c32082dcb2d5f19a677 100644 (file)
@@ -178,7 +178,8 @@ static struct asm_instruction *asm_instruction_copy_ctor(
 %token VERTEX VTXATTRIB
 %token WEIGHT
 
-%token <string> IDENTIFIER
+%token <string> IDENTIFIER USED_IDENTIFIER
+%type <string> string
 %token <swiz_mask> MASK4 MASK3 MASK2 MASK1 SWIZZLE
 %token DOT_DOT
 %token DOT
@@ -289,7 +290,7 @@ optionSequence: optionSequence option
        |
        ;
 
-option: OPTION IDENTIFIER ';'
+option: OPTION string ';'
        {
           int valid = 0;
 
@@ -692,7 +693,7 @@ extSwizSel: INTEGER
           $$.xyzw_valid = 1;
           $$.rgba_valid = 1;
        }
-       | IDENTIFIER
+       | string
        {
           if (strlen($1) > 1) {
              yyerror(& @1, state, "invalid extended swizzle selector");
@@ -742,7 +743,7 @@ extSwizSel: INTEGER
        }
        ;
 
-srcReg: IDENTIFIER /* temporaryReg | progParamSingle */
+srcReg: USED_IDENTIFIER /* temporaryReg | progParamSingle */
        {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, $1);
@@ -832,7 +833,7 @@ dstReg: resultBinding
           $$.File = PROGRAM_OUTPUT;
           $$.Index = $1;
        }
-       | IDENTIFIER /* temporaryReg | vertexResultReg */
+       | USED_IDENTIFIER /* temporaryReg | vertexResultReg */
        {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, $1);
@@ -863,7 +864,7 @@ dstReg: resultBinding
        }
        ;
 
-progParamArray: IDENTIFIER
+progParamArray: USED_IDENTIFIER
        {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, $1);
@@ -930,7 +931,7 @@ addrRegNegOffset: INTEGER
        }
        ;
 
-addrReg: IDENTIFIER
+addrReg: USED_IDENTIFIER
        {
           struct asm_symbol *const s = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, $1);
@@ -1814,7 +1815,7 @@ optionalSign: '+'        { $$ = FALSE; }
 TEMP_statement: optVarSize TEMP { $<integer>$ = $2; } varNameList
        ;
 
-optVarSize: IDENTIFIER
+optVarSize: string
        {
           /* NV_fragment_program_option defines the size qualifiers in a
            * fairly broken way.  "SHORT" or "LONG" can optionally be used
@@ -2045,7 +2046,7 @@ legacyTexUnitNum: INTEGER
        }
        ;
 
-ALIAS_statement: ALIAS IDENTIFIER '=' IDENTIFIER
+ALIAS_statement: ALIAS IDENTIFIER '=' USED_IDENTIFIER
        {
           struct asm_symbol *exist = (struct asm_symbol *)
              _mesa_symbol_table_find_symbol(state->st, 0, $2);
@@ -2066,6 +2067,10 @@ ALIAS_statement: ALIAS IDENTIFIER '=' IDENTIFIER
        }
        ;
 
+string: IDENTIFIER
+       | USED_IDENTIFIER
+       ;
+
 %%
 
 void