From: Kenneth Graunke Date: Mon, 15 Jul 2013 18:45:24 +0000 (-0700) Subject: glsl: Refactor parameter qualifier handling. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a4d15a3cd963dee6beb0b6d8a4c25b371ea9a289;p=mesa.git glsl: Refactor parameter qualifier handling. "Parameter direction qualifier" is a new term I invented just now; it's not part of any GLSL specification. This paves the way handling multiple parameter qualifiers, in any order, as required by GLSL 4.20/ARB_shading_language_420pack. Signed-off-by: Kenneth Graunke Reviewed-by: Matt Turner --- diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy index ffaf0f3344b..0c5defb47a7 100644 --- a/src/glsl/glsl_parser.yy +++ b/src/glsl/glsl_parser.yy @@ -180,6 +180,7 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg) %type parameter_declarator %type parameter_declaration %type parameter_qualifier +%type parameter_direction_qualifier %type parameter_type_qualifier %type parameter_type_specifier %type function_definition @@ -903,7 +904,17 @@ parameter_qualifier: { memset(& $$, 0, sizeof($$)); } - | IN_TOK + | parameter_direction_qualifier parameter_qualifier + { + if (($1.flags.q.in || $1.flags.q.out) && ($2.flags.q.in || $2.flags.q.out)) + _mesa_glsl_error(&@1, state, "duplicate in/out/inout qualifier"); + + $$ = $1; + $$.merge_qualifier(&@1, state, $2); + } + +parameter_direction_qualifier: + IN_TOK { memset(& $$, 0, sizeof($$)); $$.flags.q.in = 1;