mesa/program: Switch from the deprecated YYLEX_PARAM to %lex-param.

YYLEX_PARAM is no longer supported as of Bison 3.0.  Instead, the Bison
developers recommend using %lex-param.

%lex-param takes a type and variable name, similar to %parse-param,
so you can't pass an arbitrary expression like state->scanner.  But Flex
insists on passing the actual scanner object, not an arbitrary object
like state.

To solve this, the parser defines a wrapper lex() function which accepts
"state," and calls Flex's lex() function with state->scanner.

Fixes the build with Bison 3.0.  Also works with Bison 2.7.1.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67354
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Tested-by: Laurent Carlier <lordheavym@gmail.com>
Cc: "9.2" mesa-stable@lists.freedesktop.org
This commit is contained in:
Kenneth Graunke
2013-07-29 16:03:46 -07:00
parent de917b4c4c
commit 6d2a9220b8

View File

@@ -113,15 +113,13 @@ static struct asm_instruction *asm_instruction_copy_ctor(
+ (Current).first_column; \
} \
} while(YYID(0))
#define YYLEX_PARAM state->scanner
%}
%pure-parser
%locations
%lex-param { struct asm_parser_state *state }
%parse-param { struct asm_parser_state *state }
%error-verbose
%lex-param { void *scanner }
%union {
struct asm_instruction *inst;
@@ -274,9 +272,10 @@ _mesa_program_lexer_lex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
void *yyscanner);
static int
yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, void *yyscanner)
yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
struct asm_parser_state *state)
{
return _mesa_program_lexer_lex(yylval_param, yylloc_param, yyscanner);
return _mesa_program_lexer_lex(yylval_param, yylloc_param, state->scanner);
}
%}