-----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-----
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to