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:
@@ -113,15 +113,13 @@ static struct asm_instruction *asm_instruction_copy_ctor(
|
|||||||
+ (Current).first_column; \
|
+ (Current).first_column; \
|
||||||
} \
|
} \
|
||||||
} while(YYID(0))
|
} while(YYID(0))
|
||||||
|
|
||||||
#define YYLEX_PARAM state->scanner
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%pure-parser
|
%pure-parser
|
||||||
%locations
|
%locations
|
||||||
|
%lex-param { struct asm_parser_state *state }
|
||||||
%parse-param { struct asm_parser_state *state }
|
%parse-param { struct asm_parser_state *state }
|
||||||
%error-verbose
|
%error-verbose
|
||||||
%lex-param { void *scanner }
|
|
||||||
|
|
||||||
%union {
|
%union {
|
||||||
struct asm_instruction *inst;
|
struct asm_instruction *inst;
|
||||||
@@ -274,9 +272,10 @@ _mesa_program_lexer_lex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,
|
|||||||
void *yyscanner);
|
void *yyscanner);
|
||||||
|
|
||||||
static int
|
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);
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user