glsl: 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:
parent
eb7c8c7fb6
commit
f043381334
|
@ -31,8 +31,6 @@
|
|||
#include "glsl_types.h"
|
||||
#include "main/context.h"
|
||||
|
||||
#define YYLEX_PARAM state->scanner
|
||||
|
||||
#undef yyerror
|
||||
|
||||
static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
|
||||
|
@ -41,9 +39,9 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
|
|||
}
|
||||
|
||||
static int
|
||||
_mesa_glsl_lex(YYSTYPE *val, YYLTYPE *loc, void *scanner)
|
||||
_mesa_glsl_lex(YYSTYPE *val, YYLTYPE *loc, _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return _mesa_glsl_lexer_lex(val, loc, scanner);
|
||||
return _mesa_glsl_lexer_lex(val, loc, state->scanner);
|
||||
}
|
||||
%}
|
||||
|
||||
|
@ -61,7 +59,7 @@ _mesa_glsl_lex(YYSTYPE *val, YYLTYPE *loc, void *scanner)
|
|||
@$.source = 0;
|
||||
}
|
||||
|
||||
%lex-param {void *scanner}
|
||||
%lex-param {struct _mesa_glsl_parse_state *state}
|
||||
%parse-param {struct _mesa_glsl_parse_state *state}
|
||||
|
||||
%union {
|
||||
|
|
Loading…
Reference in New Issue