[Mesa-dev] [PATCH] glsl parser: Select typelist as early as possible.

Ian Romanick idr at freedesktop.org
Fri Apr 13 12:09:57 PDT 2012


On 04/11/2012 01:56 AM, Olivier Galibert wrote:
> Type selection must be extended w.r.t version and extension lines as
> soon as it is possible, and in any case before the lookahead is done
> to check the nature of the next line.  Otherwise code such as:
>
>    #version 400
>
>    dmat2 function inverse(dmat2 m) { ... }
>
> fails because "dmat2" has already been lexed as a NEW_IDENTIFIER
> before _mesa_glsl_initialize_types is called.

Do you have a specific test case in mind that fails without this patch 
but passes with?  We don't handle GLSL 4.00 at all, so the above case 
isn't interesting.  It seems like this should have already bitten us for 
even GLSL 1.20 types (e.g., mat2x4).

> Signed-off-by: Olivier Galibert<galibert at pobox.com>
> ---
>   src/glsl/glsl_parser.yy |    5 ++---
>   1 files changed, 2 insertions(+), 3 deletions(-)
>
> [Sorry, resent with the correct subject...]
>
> diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
> index 64506b6..9a0af95 100644
> --- a/src/glsl/glsl_parser.yy
> +++ b/src/glsl/glsl_parser.yy
> @@ -233,9 +233,6 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
>
>   translation_unit:
>   	version_statement extension_statement_list
> -	{
> -	   _mesa_glsl_initialize_types(state);
> -	}
>   	external_declaration_list
>   	{
>   	   delete state->symbols;
> @@ -285,6 +282,7 @@ version_statement:
>   			       state->version_string,
>   			       state->supported_version_string);
>   	   }
> +	   _mesa_glsl_initialize_types(state);
>   	}
>   	;
>
> @@ -322,6 +320,7 @@ extension_statement:
>   	   if (!_mesa_glsl_process_extension($2,&  @2, $4,&  @4, state)) {
>   	      YYERROR;
>   	   }
> +	   _mesa_glsl_initialize_types(state);
>   	}
>   	;
>



More information about the mesa-dev mailing list