Le 28 juil. 2013 à 20:05, Никита Малявин <[email protected]> a écrit :

Hi!

> Hello, i've got compilation error while compiling latest mesa git sources
> with bison version 3.0:
> 
> glsl_parser.cpp: In function 'int
> _mesa_glsl_parse(_mesa_glsl_parse_state*)':
> glsl_parser.cpp:2616:41: error: 'scanner' was not declared in this scope
> 
> It seems to be somehow related to string in glsl/glsl_parser.yy:
> 
> %lex-param   {void *scanner}
> 
> Compilation succeeds with bison 2.7.1
> 
> I'm using archlinux.
> 
> Is there any additional configuraton for 3.0 version to work in backward
> compatibility or something else?

The problem here is that this file is using YYLEX_PARAM, whose support was
removed in favor of %parse-param, %lex-param, and %param.  The latter is
introduced by Bison 2.7, but %parse-param and %lex-param have existed for
a long time now.

The file looks like this currently:

#define YYLEX_PARAM state->scanner
…
%lex-param   {void *scanner}
%parse-param {struct _mesa_glsl_parse_state *state}

It should rather look like this now:

%lex-param   {struct _mesa_glsl_parse_state *state}
%parse-param {struct _mesa_glsl_parse_state *state}

and use 'state' instead of 'scanner' in the scanner.  Unfortunately
there is no way to pass state->scanner to the scanner.

If using Bison 3.0 is ok for you, then

%param   {struct _mesa_glsl_parse_state *state}

suffices for both.

Are you a contributor to Mesa?  Is there a way to communicate with its
team to help with the migration?

Thanks in advance!


Reply via email to