ARB prog parser: Fix a couple issues with previous merge from mesa_7_6_branch
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 2 Nov 2009 20:44:14 +0000 (12:44 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 2 Nov 2009 20:44:14 +0000 (12:44 -0800)
Since the addition of support for Nvidia condition codes, the lexer internally
uses handle_ident to select between returning IDENTIFIER and USED_IDENTIFIER.
Also, use return_string instead of strdup.

Fixes bug #24809.

src/mesa/shader/lex.yy.c
src/mesa/shader/program_lexer.l

index 5e605274aaa6b7cfa4eb7dfc2386b73141a57b9e..fc78b30fb49a64e67edafe8788879f43e74bed88 100644 (file)
@@ -53,7 +53,6 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -84,6 +83,8 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#endif /* ! C99 */
+
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -157,7 +158,15 @@ typedef void* yyscan_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -1057,8 +1066,7 @@ static yyconst flex_int16_t yy_chk[1368] =
       if (condition) {                                 \
         return token;                                  \
       } else {                                         \
-        yylval->string = return_string(yyextra, yytext);       \
-        return IDENTIFIER;                             \
+        return handle_ident(yyextra, yytext, yylval);  \
       }                                                        \
    } while (0)
 
@@ -1082,8 +1090,7 @@ static yyconst flex_int16_t yy_chk[1368] =
         yylval->temp_inst.Opcode = OPCODE_ ## opcode;  \
         return token;                                  \
       } else {                                         \
-        yylval->string = return_string(yyextra, yytext);               \
-        return IDENTIFIER;                             \
+        return handle_ident(yyextra, yytext, yylval);  \
       }                                                        \
    } while (0)
 
@@ -1174,7 +1181,7 @@ swiz_from_char(char c)
 static int
 handle_ident(struct asm_parser_state *state, const char *text, YYSTYPE *lval)
 {
-   lval->string = strdup(text);
+   lval->string = return_string(state, text);
 
    return (_mesa_symbol_table_find_symbol(state->st, 0, text) == NULL)
       ? IDENTIFIER : USED_IDENTIFIER;
@@ -1193,7 +1200,7 @@ handle_ident(struct asm_parser_state *state, const char *text, YYSTYPE *lval)
    } while(0);
 
 #define YY_EXTRA_TYPE struct asm_parser_state *
-#line 1197 "lex.yy.c"
+#line 1204 "lex.yy.c"
 
 #define INITIAL 0
 
@@ -1330,7 +1337,12 @@ static int input (yyscan_t yyscanner );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1338,7 +1350,7 @@ static int input (yyscan_t yyscanner );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -1349,7 +1361,7 @@ static int input (yyscan_t yyscanner );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               unsigned n; \
+               size_t n; \
                for ( n = 0; n < max_size && \
                             (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
@@ -1434,10 +1446,10 @@ YY_DECL
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 198 "program_lexer.l"
+#line 196 "program_lexer.l"
 
 
-#line 1441 "lex.yy.c"
+#line 1453 "lex.yy.c"
 
     yylval = yylval_param;
 
@@ -1526,17 +1538,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 200 "program_lexer.l"
+#line 198 "program_lexer.l"
 { return ARBvp_10; }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 201 "program_lexer.l"
+#line 199 "program_lexer.l"
 { return ARBfp_10; }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 202 "program_lexer.l"
+#line 200 "program_lexer.l"
 {
    yylval->integer = at_address;
    return_token_or_IDENTIFIER(require_ARB_vp, ADDRESS);
@@ -1544,692 +1556,692 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 206 "program_lexer.l"
+#line 204 "program_lexer.l"
 { return ALIAS; }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 207 "program_lexer.l"
+#line 205 "program_lexer.l"
 { return ATTRIB; }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 208 "program_lexer.l"
+#line 206 "program_lexer.l"
 { return END; }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 209 "program_lexer.l"
+#line 207 "program_lexer.l"
 { return OPTION; }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 210 "program_lexer.l"
+#line 208 "program_lexer.l"
 { return OUTPUT; }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 211 "program_lexer.l"
+#line 209 "program_lexer.l"
 { return PARAM; }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 212 "program_lexer.l"
+#line 210 "program_lexer.l"
 { yylval->integer = at_temp; return TEMP; }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 214 "program_lexer.l"
+#line 212 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, ABS, 3); }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 215 "program_lexer.l"
+#line 213 "program_lexer.l"
 { return_opcode(             1, BIN_OP, ADD, 3); }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 216 "program_lexer.l"
+#line 214 "program_lexer.l"
 { return_opcode(require_ARB_vp, ARL, ARL, 3); }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 218 "program_lexer.l"
+#line 216 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, CMP, 3); }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 219 "program_lexer.l"
+#line 217 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, COS, 3); }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 221 "program_lexer.l"
+#line 219 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, DDX, 3); }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 222 "program_lexer.l"
+#line 220 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, DDY, 3); }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 223 "program_lexer.l"
+#line 221 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DP3, 3); }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 224 "program_lexer.l"
+#line 222 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DP4, 3); }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 225 "program_lexer.l"
+#line 223 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DPH, 3); }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 226 "program_lexer.l"
+#line 224 "program_lexer.l"
 { return_opcode(             1, BIN_OP, DST, 3); }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 228 "program_lexer.l"
+#line 226 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, EX2, 3); }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 229 "program_lexer.l"
+#line 227 "program_lexer.l"
 { return_opcode(require_ARB_vp, SCALAR_OP, EXP, 3); }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 231 "program_lexer.l"
+#line 229 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, FLR, 3); }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 232 "program_lexer.l"
+#line 230 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, FRC, 3); }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 234 "program_lexer.l"
+#line 232 "program_lexer.l"
 { return_opcode(require_ARB_fp, KIL, KIL, 3); }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 236 "program_lexer.l"
+#line 234 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, LIT, 3); }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 237 "program_lexer.l"
+#line 235 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, LG2, 3); }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 238 "program_lexer.l"
+#line 236 "program_lexer.l"
 { return_opcode(require_ARB_vp, SCALAR_OP, LOG, 3); }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 239 "program_lexer.l"
+#line 237 "program_lexer.l"
 { return_opcode(require_ARB_fp, TRI_OP, LRP, 3); }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 241 "program_lexer.l"
+#line 239 "program_lexer.l"
 { return_opcode(             1, TRI_OP, MAD, 3); }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 242 "program_lexer.l"
+#line 240 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MAX, 3); }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 243 "program_lexer.l"
+#line 241 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MIN, 3); }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 244 "program_lexer.l"
+#line 242 "program_lexer.l"
 { return_opcode(             1, VECTOR_OP, MOV, 3); }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 245 "program_lexer.l"
+#line 243 "program_lexer.l"
 { return_opcode(             1, BIN_OP, MUL, 3); }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 247 "program_lexer.l"
+#line 245 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, PK2H, 4); }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 248 "program_lexer.l"
+#line 246 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, PK2US, 5); }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 249 "program_lexer.l"
+#line 247 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, PK4B, 4); }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 250 "program_lexer.l"
+#line 248 "program_lexer.l"
 { return_opcode(require_NV_fp,  VECTOR_OP, PK4UB, 5); }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 251 "program_lexer.l"
+#line 249 "program_lexer.l"
 { return_opcode(             1, BINSC_OP, POW, 3); }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 253 "program_lexer.l"
+#line 251 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, RCP, 3); }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 254 "program_lexer.l"
+#line 252 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP,    RFL, 3); }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 255 "program_lexer.l"
+#line 253 "program_lexer.l"
 { return_opcode(             1, SCALAR_OP, RSQ, 3); }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 257 "program_lexer.l"
+#line 255 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SCS, 3); }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 258 "program_lexer.l"
+#line 256 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, SEQ, 3); }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 259 "program_lexer.l"
+#line 257 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, SFL, 3); }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 260 "program_lexer.l"
+#line 258 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SGE, 3); }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 261 "program_lexer.l"
+#line 259 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, SGT, 3); }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 262 "program_lexer.l"
+#line 260 "program_lexer.l"
 { return_opcode(require_ARB_fp, SCALAR_OP, SIN, 3); }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 263 "program_lexer.l"
+#line 261 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, SLE, 3); }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 264 "program_lexer.l"
+#line 262 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SLT, 3); }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 265 "program_lexer.l"
+#line 263 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, SNE, 3); }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 266 "program_lexer.l"
+#line 264 "program_lexer.l"
 { return_opcode(require_NV_fp,  BIN_OP, STR, 3); }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 267 "program_lexer.l"
+#line 265 "program_lexer.l"
 { return_opcode(             1, BIN_OP, SUB, 3); }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 268 "program_lexer.l"
+#line 266 "program_lexer.l"
 { return_opcode(             1, SWZ, SWZ, 3); }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 270 "program_lexer.l"
+#line 268 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, 3); }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 271 "program_lexer.l"
+#line 269 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, 3); }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 272 "program_lexer.l"
+#line 270 "program_lexer.l"
 { return_opcode(require_NV_fp,  TXD_OP, TXD, 3); }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 273 "program_lexer.l"
+#line 271 "program_lexer.l"
 { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, 3); }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 275 "program_lexer.l"
+#line 273 "program_lexer.l"
 { return_opcode(require_NV_fp,  SCALAR_OP, UP2H, 4); }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 276 "program_lexer.l"
+#line 274 "program_lexer.l"
 { return_opcode(require_NV_fp,  SCALAR_OP, UP2US, 5); }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 277 "program_lexer.l"
+#line 275 "program_lexer.l"
 { return_opcode(require_NV_fp,  SCALAR_OP, UP4B, 4); }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 278 "program_lexer.l"
+#line 276 "program_lexer.l"
 { return_opcode(require_NV_fp,  SCALAR_OP, UP4UB, 5); }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 280 "program_lexer.l"
+#line 278 "program_lexer.l"
 { return_opcode(require_NV_fp,  TRI_OP, X2D, 3); }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 281 "program_lexer.l"
+#line 279 "program_lexer.l"
 { return_opcode(             1, BIN_OP, XPD, 3); }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 283 "program_lexer.l"
+#line 281 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_vp, VERTEX); }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 284 "program_lexer.l"
+#line 282 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, FRAGMENT); }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 285 "program_lexer.l"
+#line 283 "program_lexer.l"
 { return PROGRAM; }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 286 "program_lexer.l"
+#line 284 "program_lexer.l"
 { return STATE; }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 287 "program_lexer.l"
+#line 285 "program_lexer.l"
 { return RESULT; }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 289 "program_lexer.l"
+#line 287 "program_lexer.l"
 { return AMBIENT; }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 290 "program_lexer.l"
+#line 288 "program_lexer.l"
 { return ATTENUATION; }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 291 "program_lexer.l"
+#line 289 "program_lexer.l"
 { return BACK; }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 292 "program_lexer.l"
+#line 290 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, CLIP); }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 293 "program_lexer.l"
+#line 291 "program_lexer.l"
 { return COLOR; }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 294 "program_lexer.l"
+#line 292 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, DEPTH); }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 295 "program_lexer.l"
+#line 293 "program_lexer.l"
 { return DIFFUSE; }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 296 "program_lexer.l"
+#line 294 "program_lexer.l"
 { return DIRECTION; }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 297 "program_lexer.l"
+#line 295 "program_lexer.l"
 { return EMISSION; }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 298 "program_lexer.l"
+#line 296 "program_lexer.l"
 { return ENV; }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 299 "program_lexer.l"
+#line 297 "program_lexer.l"
 { return EYE; }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 300 "program_lexer.l"
+#line 298 "program_lexer.l"
 { return FOGCOORD; }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 301 "program_lexer.l"
+#line 299 "program_lexer.l"
 { return FOG; }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 302 "program_lexer.l"
+#line 300 "program_lexer.l"
 { return FRONT; }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 303 "program_lexer.l"
+#line 301 "program_lexer.l"
 { return HALF; }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 304 "program_lexer.l"
+#line 302 "program_lexer.l"
 { return INVERSE; }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 305 "program_lexer.l"
+#line 303 "program_lexer.l"
 { return INVTRANS; }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 306 "program_lexer.l"
+#line 304 "program_lexer.l"
 { return LIGHT; }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 307 "program_lexer.l"
+#line 305 "program_lexer.l"
 { return LIGHTMODEL; }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 308 "program_lexer.l"
+#line 306 "program_lexer.l"
 { return LIGHTPROD; }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 309 "program_lexer.l"
+#line 307 "program_lexer.l"
 { return LOCAL; }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 310 "program_lexer.l"
+#line 308 "program_lexer.l"
 { return MATERIAL; }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 311 "program_lexer.l"
+#line 309 "program_lexer.l"
 { return MAT_PROGRAM; }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 312 "program_lexer.l"
+#line 310 "program_lexer.l"
 { return MATRIX; }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 313 "program_lexer.l"
+#line 311 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, MATRIXINDEX); }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 314 "program_lexer.l"
+#line 312 "program_lexer.l"
 { return MODELVIEW; }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 315 "program_lexer.l"
+#line 313 "program_lexer.l"
 { return MVP; }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 316 "program_lexer.l"
+#line 314 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, NORMAL); }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 317 "program_lexer.l"
+#line 315 "program_lexer.l"
 { return OBJECT; }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 318 "program_lexer.l"
+#line 316 "program_lexer.l"
 { return PALETTE; }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 319 "program_lexer.l"
+#line 317 "program_lexer.l"
 { return PARAMS; }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 320 "program_lexer.l"
+#line 318 "program_lexer.l"
 { return PLANE; }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 321 "program_lexer.l"
+#line 319 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, POINT_TOK); }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 322 "program_lexer.l"
+#line 320 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, POINTSIZE); }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 323 "program_lexer.l"
+#line 321 "program_lexer.l"
 { return POSITION; }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 324 "program_lexer.l"
+#line 322 "program_lexer.l"
 { return PRIMARY; }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 325 "program_lexer.l"
+#line 323 "program_lexer.l"
 { return PROJECTION; }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 326 "program_lexer.l"
+#line 324 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, RANGE); }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 327 "program_lexer.l"
+#line 325 "program_lexer.l"
 { return ROW; }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 328 "program_lexer.l"
+#line 326 "program_lexer.l"
 { return SCENECOLOR; }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 329 "program_lexer.l"
+#line 327 "program_lexer.l"
 { return SECONDARY; }
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 330 "program_lexer.l"
+#line 328 "program_lexer.l"
 { return SHININESS; }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 331 "program_lexer.l"
+#line 329 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, SIZE_TOK); }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 332 "program_lexer.l"
+#line 330 "program_lexer.l"
 { return SPECULAR; }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 333 "program_lexer.l"
+#line 331 "program_lexer.l"
 { return SPOT; }
        YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 334 "program_lexer.l"
+#line 332 "program_lexer.l"
 { return TEXCOORD; }
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 335 "program_lexer.l"
+#line 333 "program_lexer.l"
 { return_token_or_DOT(require_ARB_fp, TEXENV); }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 336 "program_lexer.l"
+#line 334 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN); }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 337 "program_lexer.l"
+#line 335 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_Q); }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 338 "program_lexer.l"
+#line 336 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_S); }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 339 "program_lexer.l"
+#line 337 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, TEXGEN_T); }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 340 "program_lexer.l"
+#line 338 "program_lexer.l"
 { return TEXTURE; }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 341 "program_lexer.l"
+#line 339 "program_lexer.l"
 { return TRANSPOSE; }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 342 "program_lexer.l"
+#line 340 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, VTXATTRIB); }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 343 "program_lexer.l"
+#line 341 "program_lexer.l"
 { return_token_or_DOT(require_ARB_vp, WEIGHT); }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 345 "program_lexer.l"
+#line 343 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEXTURE_UNIT); }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 346 "program_lexer.l"
+#line 344 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_1D); }
        YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 347 "program_lexer.l"
+#line 345 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_2D); }
        YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 348 "program_lexer.l"
+#line 346 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_3D); }
        YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 349 "program_lexer.l"
+#line 347 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp, TEX_CUBE); }
        YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 350 "program_lexer.l"
+#line 348 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_rect, TEX_RECT); }
        YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 351 "program_lexer.l"
+#line 349 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); }
        YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 352 "program_lexer.l"
+#line 350 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW2D); }
        YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 353 "program_lexer.l"
+#line 351 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_rect, TEX_SHADOWRECT); }
        YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 354 "program_lexer.l"
+#line 352 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY1D); }
        YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 355 "program_lexer.l"
+#line 353 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY2D); }
        YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 356 "program_lexer.l"
+#line 354 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW1D); }
        YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 357 "program_lexer.l"
+#line 355 "program_lexer.l"
 { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW2D); }
        YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 359 "program_lexer.l"
+#line 357 "program_lexer.l"
 { return handle_ident(yyextra, yytext, yylval); }
        YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 361 "program_lexer.l"
+#line 359 "program_lexer.l"
 { return DOT_DOT; }
        YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 363 "program_lexer.l"
+#line 361 "program_lexer.l"
 {
    yylval->integer = strtol(yytext, NULL, 10);
    return INTEGER;
@@ -2237,7 +2249,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 367 "program_lexer.l"
+#line 365 "program_lexer.l"
 {
    yylval->real = _mesa_strtod(yytext, NULL);
    return REAL;
@@ -2249,7 +2261,7 @@ case 143:
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 371 "program_lexer.l"
+#line 369 "program_lexer.l"
 {
    yylval->real = _mesa_strtod(yytext, NULL);
    return REAL;
@@ -2257,7 +2269,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 375 "program_lexer.l"
+#line 373 "program_lexer.l"
 {
    yylval->real = _mesa_strtod(yytext, NULL);
    return REAL;
@@ -2265,7 +2277,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 379 "program_lexer.l"
+#line 377 "program_lexer.l"
 {
    yylval->real = _mesa_strtod(yytext, NULL);
    return REAL;
@@ -2273,7 +2285,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 384 "program_lexer.l"
+#line 382 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
@@ -2282,7 +2294,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 390 "program_lexer.l"
+#line 388 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
@@ -2292,7 +2304,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 396 "program_lexer.l"
+#line 394 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
@@ -2301,7 +2313,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 149:
 YY_RULE_SETUP
-#line 401 "program_lexer.l"
+#line 399 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
@@ -2310,7 +2322,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 150:
 YY_RULE_SETUP
-#line 407 "program_lexer.l"
+#line 405 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
@@ -2320,7 +2332,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 413 "program_lexer.l"
+#line 411 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
@@ -2330,7 +2342,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 152:
 YY_RULE_SETUP
-#line 419 "program_lexer.l"
+#line 417 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
@@ -2339,7 +2351,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 153:
 YY_RULE_SETUP
-#line 425 "program_lexer.l"
+#line 423 "program_lexer.l"
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
@@ -2349,7 +2361,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 154:
 YY_RULE_SETUP
-#line 432 "program_lexer.l"
+#line 430 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
@@ -2361,7 +2373,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 155:
 YY_RULE_SETUP
-#line 441 "program_lexer.l"
+#line 439 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_NOOP;
    yylval->swiz_mask.mask = WRITEMASK_XYZW;
@@ -2370,7 +2382,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 156:
 YY_RULE_SETUP
-#line 447 "program_lexer.l"
+#line 445 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XY
@@ -2380,7 +2392,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 157:
 YY_RULE_SETUP
-#line 453 "program_lexer.l"
+#line 451 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_XZW;
@@ -2389,7 +2401,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 158:
 YY_RULE_SETUP
-#line 458 "program_lexer.l"
+#line 456 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_YZW;
@@ -2398,7 +2410,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 159:
 YY_RULE_SETUP
-#line 464 "program_lexer.l"
+#line 462 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_X
@@ -2408,7 +2420,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 160:
 YY_RULE_SETUP
-#line 470 "program_lexer.l"
+#line 468 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_Y
@@ -2418,7 +2430,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 161:
 YY_RULE_SETUP
-#line 476 "program_lexer.l"
+#line 474 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = SWIZZLE_INVAL;
    yylval->swiz_mask.mask = WRITEMASK_ZW;
@@ -2427,7 +2439,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 162:
 YY_RULE_SETUP
-#line 482 "program_lexer.l"
+#line 480 "program_lexer.l"
 {
    const unsigned s = swiz_from_char(yytext[1]);
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s);
@@ -2437,7 +2449,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 163:
 YY_RULE_SETUP
-#line 490 "program_lexer.l"
+#line 488 "program_lexer.l"
 {
    if (require_ARB_vp) {
       return TEXGEN_R;
@@ -2451,7 +2463,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 164:
 YY_RULE_SETUP
-#line 501 "program_lexer.l"
+#line 499 "program_lexer.l"
 {
    yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]),
                                            swiz_from_char(yytext[2]),
@@ -2463,13 +2475,13 @@ YY_RULE_SETUP
        YY_BREAK
 case 165:
 YY_RULE_SETUP
-#line 510 "program_lexer.l"
+#line 508 "program_lexer.l"
 { return DOT; }
        YY_BREAK
 case 166:
 /* rule 166 can match eol */
 YY_RULE_SETUP
-#line 512 "program_lexer.l"
+#line 510 "program_lexer.l"
 {
    yylloc->first_line++;
    yylloc->first_column = 1;
@@ -2480,7 +2492,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 167:
 YY_RULE_SETUP
-#line 519 "program_lexer.l"
+#line 517 "program_lexer.l"
 /* eat whitespace */ ;
        YY_BREAK
 case 168:
@@ -2488,20 +2500,20 @@ case 168:
 yyg->yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 520 "program_lexer.l"
+#line 518 "program_lexer.l"
 /* eat comments */ ;
        YY_BREAK
 case 169:
 YY_RULE_SETUP
-#line 521 "program_lexer.l"
+#line 519 "program_lexer.l"
 { return yytext[0]; }
        YY_BREAK
 case 170:
 YY_RULE_SETUP
-#line 522 "program_lexer.l"
+#line 520 "program_lexer.l"
 ECHO;
        YY_BREAK
-#line 2505 "lex.yy.c"
+#line 2517 "lex.yy.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -3269,8 +3281,8 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  */
@@ -3676,7 +3688,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 522 "program_lexer.l"
+#line 520 "program_lexer.l"
 
 
 
index b50fb3c7dc2e22b00380e449f1acf8e3719a4eec..e8dae7bc2675b4acca5fe8bf66afd8aec8e3f064 100644 (file)
@@ -46,8 +46,7 @@
       if (condition) {                                 \
         return token;                                  \
       } else {                                         \
-        yylval->string = return_string(yyextra, yytext);       \
-        return IDENTIFIER;                             \
+        return handle_ident(yyextra, yytext, yylval);  \
       }                                                        \
    } while (0)
 
@@ -71,8 +70,7 @@
         yylval->temp_inst.Opcode = OPCODE_ ## opcode;  \
         return token;                                  \
       } else {                                         \
-        yylval->string = return_string(yyextra, yytext);               \
-        return IDENTIFIER;                             \
+        return handle_ident(yyextra, yytext, yylval);  \
       }                                                        \
    } while (0)
 
@@ -163,7 +161,7 @@ swiz_from_char(char c)
 static int
 handle_ident(struct asm_parser_state *state, const char *text, YYSTYPE *lval)
 {
-   lval->string = strdup(text);
+   lval->string = return_string(state, text);
 
    return (_mesa_symbol_table_find_symbol(state->st, 0, text) == NULL)
       ? IDENTIFIER : USED_IDENTIFIER;