[Mesa-dev] [PATCH 2/6] glsl: Add productions to GLSL grammar for switch statement

Ian Romanick idr at freedesktop.org
Mon Jun 20 15:39:10 PDT 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 06/17/2011 05:43 PM, Dan McCabe wrote:
> The grammar is modified to support switch statements. Rather than follow the
> grammar in the appendix, which allows case labels to be placed ANYWHERE
> as a regular statement, we follow the development of the grammar as
> described in the body of the GLSL.
> 
> In this variation, the switch statement has a body which consists of a list
> of case statements. A case statement is preceded by a list of case labels and
> ends with a list of statements.

Either this patch or patch 6/6 is the right place to restrict
switch-statements and case labels to GLSL 1.30.  From the looks of the
series, these patches will merrily allow switch-statements on any GLSL
version.  That seems bad. :)

> ---
>  src/glsl/glsl_parser.yy |   64 ++++++++++++++++++++++++++++++++++++++++++++--
>  1 files changed, 61 insertions(+), 3 deletions(-)
> 
> diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
> index 2c0498e..b3727ce 100644
> --- a/src/glsl/glsl_parser.yy
> +++ b/src/glsl/glsl_parser.yy
> @@ -206,6 +206,12 @@
>  %type <declaration> struct_declarator_list
>  %type <node> selection_statement
>  %type <selection_rest_statement> selection_rest_statement
> +%type <node> switch_statement
> +%type <node> switch_body
> +%type <node> case_label
> +%type <node> case_label_list
> +%type <node> case_statement
> +%type <node> case_statement_list
>  %type <node> iteration_statement
>  %type <node> condition
>  %type <node> conditionopt
> @@ -1519,8 +1525,7 @@ simple_statement:
>  	declaration_statement
>  	| expression_statement
>  	| selection_statement
> -	| switch_statement		{ $$ = NULL; }
> -	| case_label			{ $$ = NULL; }
> +	| switch_statement
>  	| iteration_statement
>  	| jump_statement
>  	;
> @@ -1642,15 +1647,68 @@ condition:
>  	}
>  	;
>  
> +/*
> + * siwtch_statement grammar is based on the syntax described in the body
> + * of the GLSL spec, not in it's appendix!!!
> + */
>  switch_statement:
> -	SWITCH '(' expression ')' compound_statement
> +	SWITCH '(' expression ')' switch_body
> +	{
> +	   $$ = NULL;
> +	}
> +	;
> +
> +switch_body:
> +	'{' '}'
> +	{
> +	   $$ = NULL;
> +	}
> +	| '{' case_statement_list '}'
> +	{
> +	   $$ = NULL;
> +	}
>  	;
>  
>  case_label:
>  	CASE expression ':'
> +	{
> +	   $$ = NULL;
> +	}
>  	| DEFAULT ':'
> +	{
> +	   $$ = NULL;
> +	}
>  	;
>  
> +case_label_list:
> +	case_label
> +	{
> +	   $$ = NULL;
> +	}
> +	| case_label_list case_label
> +	{
> +	   $$ = NULL;
> +	}
> +	;
> +
> +case_statement:
> +	case_label_list statement_list
> +	{
> +	   $$ = NULL;
> +	}
> +	;
> +
> +case_statement_list:
> +	case_statement
> +	{
> +	   $$ = NULL;
> +	}
> +	| case_statement_list case_statement
> +	{
> +	   $$ = NULL;
> +	}
> +	;
> +	
>  iteration_statement:
>  	WHILE '(' condition ')' statement_no_new_scope
>  	{

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iEYEARECAAYFAk3/zA4ACgkQX1gOwKyEAw8ntQCgnhIlrhzQIJoLb93iSXge1LI1
qiQAn2fnderiysv+W11krRxrSc7M9VtJ
=2Juy
-----END PGP SIGNATURE-----


More information about the mesa-dev mailing list