[Mesa-dev] [PATCH 1/4] glsl: Change the lexer's namespace.

Kenneth Graunke kenneth at whitecape.org
Wed Jul 31 12:02:00 PDT 2013


On 07/31/2013 12:08 AM, Laurent Carlier wrote:
> Le lundi 29 juillet 2013 16:07:35 Kenneth Graunke a écrit :
>> Bison 3.0 removes the YYLEX_PARAM macro.  In preparation for handling
>> this using %lex-param, the parser needs a wrapper function for the
>> actual Flex lex() function.
>>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67354
>> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
>> Cc: mesa-stable at lists.freedesktop.org
>> Cc: Sandeep <sandy.8925 at gmail.com>
>> Cc: Bruno Jacquet <maxijac at free.fr>
>> Cc: Laurent Carlier <lordheavym at gmail.com>
>> Cc: Nikita Malyavin <nikitamalyavin at gmail.com>
>> ---
>>   src/glsl/glsl_lexer.ll        | 2 +-
>>   src/glsl/glsl_parser.yy       | 6 ++++++
>>   src/glsl/glsl_parser_extras.h | 4 ++--
>>   3 files changed, 9 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/glsl/glsl_lexer.ll b/src/glsl/glsl_lexer.ll
>> index 9375230..e24df80 100644
>> --- a/src/glsl/glsl_lexer.ll
>> +++ b/src/glsl/glsl_lexer.ll
>> @@ -149,7 +149,7 @@ literal_integer(char *text, int len, struct
>> _mesa_glsl_parse_state *state, %option bison-bridge bison-locations
>> reentrant noyywrap
>>   %option nounput noyy_top_state
>>   %option never-interactive
>> -%option prefix="_mesa_glsl_"
>> +%option prefix="_mesa_glsl_lexer_"
>>   %option extra-type="struct _mesa_glsl_parse_state *"
>>
>>   %x PP PRAGMA
>> diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
>> index bf31236..0b16d1d 100644
>> --- a/src/glsl/glsl_parser.yy
>> +++ b/src/glsl/glsl_parser.yy
>> @@ -39,6 +39,12 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state
>> *st, const char *msg) {
>>      _mesa_glsl_error(loc, st, "%s", msg);
>>   }
>> +
>> +static int
>> +_mesa_glsl_lex(YYSTYPE *val, YYLTYPE *loc, void *scanner)
>> +{
>> +   return _mesa_glsl_lexer_lex(val, loc, scanner);
>> +}
>>   %}
>>
>>   %expect 0
>> diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
>> index 7f478df..1e386dd 100644
>> --- a/src/glsl/glsl_parser_extras.h
>> +++ b/src/glsl/glsl_parser_extras.h
>> @@ -337,8 +337,8 @@ extern void _mesa_glsl_lexer_ctor(struct
>> _mesa_glsl_parse_state *state, extern void _mesa_glsl_lexer_dtor(struct
>> _mesa_glsl_parse_state *state);
>>
>>   union YYSTYPE;
>> -extern int _mesa_glsl_lex(union YYSTYPE *yylval, YYLTYPE *yylloc,
>> -			  void *scanner);
>> +extern int _mesa_glsl_lexer_lex(union YYSTYPE *yylval, YYLTYPE *yylloc,
>> +                                void *scanner);
>>
>>   extern int _mesa_glsl_parse(struct _mesa_glsl_parse_state *);
>
> Got the following error with bison3:
> make[4]: Leaving directory `/build/mesa-git/src/mesa/src/glsl'
> make[3]: Leaving directory `/build/mesa-git/src/mesa/src/glsl'
> make[2]: Leaving directory `/build/mesa-git/src/mesa/src/glsl'
> Making all in mesa
> make[2]: Entering directory `/build/mesa-git/src/mesa/src/mesa'
>    GEN      main/get_hash.h
> updating main/git_sha1.h
> make  all-recursive
> make[3]: Entering directory `/build/mesa-git/src/mesa/src/mesa'
> Making all in program
> make[4]: Entering directory `/build/mesa-git/src/mesa/src/mesa/program'
>    GEN      program_parse.tab.c
>    GEN      program_parse.tab.h
>    GEN      lex.yy.c
> make  all-am
> make[5]: Entering directory `/build/mesa-git/src/mesa/src/mesa/program'
>    CC       libdricore_program_la-arbprogparse.lo
>    CC       libdricore_program_la-prog_hash_table.lo
>    CXX      libdricore_program_la-ir_to_mesa.lo
>    CC       libdricore_program_la-program.lo
>    CC       libdricore_program_la-program_parse_extra.lo
>    CC       libdricore_program_la-prog_cache.lo
>    CC       libdricore_program_la-prog_execute.lo
>    CC       libdricore_program_la-prog_instruction.lo
>    CC       libdricore_program_la-prog_noise.lo
>    CC       libdricore_program_la-prog_optimize.lo
>    CC       libdricore_program_la-prog_opt_constant_fold.lo
>    CC       libdricore_program_la-prog_parameter.lo
>    CC       libdricore_program_la-prog_parameter_layout.lo
>    CC       libdricore_program_la-prog_print.lo
>    CC       libdricore_program_la-prog_statevars.lo
>    CC       libdricore_program_la-programopt.lo
>    CC       libdricore_program_la-register_allocate.lo
>    CXX      libdricore_program_la-sampler.lo
>    CXX      libdricore_program_la-string_to_uint_map.lo
>    CC       libdricore_program_la-symbol_table.lo
>    CC       libdricore_program_la-lex.yy.lo
>    CC       libdricore_program_la-program_parse.tab.lo
>    CC       arbprogparse.lo
>    CC       prog_hash_table.lo
> program_parse.tab.c: In function '_mesa_program_parse':
> program_parse.tab.c:1958:3: error: implicit declaration of function 'YYID' [-
> Werror=implicit-function-declaration]
>     YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);

Strange, I must've botched my testing...I definitely hit that too.  I 
applied your patch to fix the problem.  Thanks for the patch!

master should build with both 2.7 and 3.0 now.


More information about the mesa-dev mailing list