-----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