[Mesa-dev] [PATCH 01/18] glsl: Take advantage of the layout qualifier flags union to clean up parsing.

Ian Romanick idr at freedesktop.org
Thu Jul 5 11:29:43 PDT 2012


On 07/02/2012 05:38 PM, Eric Anholt wrote:
> The got_one variable was set iff one of the bits in flags.i was set.
> ---
>   src/glsl/glsl_parser.yy |   31 ++++++-------------------------
>   1 file changed, 6 insertions(+), 25 deletions(-)
>
> diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
> index 5ca8740..e688b48 100644
> --- a/src/glsl/glsl_parser.yy
> +++ b/src/glsl/glsl_parser.yy
> @@ -1119,21 +1119,17 @@ layout_qualifier_id_list:
>   layout_qualifier_id:
>   	any_identifier
>   	{
> -	   bool got_one = false;
> -
>   	   memset(&  $$, 0, sizeof($$));
>
>   	   /* Layout qualifiers for ARB_fragment_coord_conventions. */
> -	   if (!got_one&&  state->ARB_fragment_coord_conventions_enable) {
> +	   if (!$$.flags.i&&  state->ARB_fragment_coord_conventions_enable) {
>   	      if (strcmp($1, "origin_upper_left") == 0) {
> -		 got_one = true;
>   		 $$.flags.q.origin_upper_left = 1;
>   	      } else if (strcmp($1, "pixel_center_integer") == 0) {
> -		 got_one = true;
>   		 $$.flags.q.pixel_center_integer = 1;
>   	      }
>
> -	      if (got_one&&  state->ARB_fragment_coord_conventions_warn) {
> +	      if ($$.flags.i&&  state->ARB_fragment_coord_conventions_warn) {
>   		 _mesa_glsl_warning(&  @1, state,
>   				    "GL_ARB_fragment_coord_conventions layout "
>   				    "identifier `%s' used\n", $1);
> @@ -1141,36 +1137,27 @@ layout_qualifier_id:
>   	   }
>
>   	   /* Layout qualifiers for AMD/ARB_conservative_depth. */
> -	   if (!got_one&&
> +	   if (!$$.flags.i&&
>   	(state->AMD_conservative_depth_enable ||
>   	        state->ARB_conservative_depth_enable)) {
>   	      if (strcmp($1, "depth_any") == 0) {
> -	         got_one = true;
>   	         $$.flags.q.depth_any = 1;
>   	      } else if (strcmp($1, "depth_greater") == 0) {
> -	         got_one = true;
>   	         $$.flags.q.depth_greater = 1;
>   	      } else if (strcmp($1, "depth_less") == 0) {
> -	         got_one = true;
>   	         $$.flags.q.depth_less = 1;
>   	      } else if (strcmp($1, "depth_unchanged") == 0) {
> -	         got_one = true;
>   	         $$.flags.q.depth_unchanged = 1;
>   	      }
>   	
> -	      if (got_one&&  state->AMD_conservative_depth_warn) {
> +	      if ($$.flags.i&&  state->AMD_conservative_depth_warn) {
>   	         _mesa_glsl_warning(&  @1, state,
>   	                            "GL_AMD_conservative_depth "
>   	                            "layout qualifier `%s' is used\n", $1);
>   	      }
> -	      if (got_one&&  state->ARB_conservative_depth_warn) {
> -	         _mesa_glsl_warning(&  @1, state,
> -	                            "GL_ARB_conservative_depth "
> -	                            "layout qualifier `%s' is used\n", $1);
> -	      }

Did you mean for this entire hunk to go?  It seems like it should get 
the same treatment as the previous block.

>   	   }
>
> -	   if (!got_one) {
> +	   if (!$$.flags.i) {
>   	      _mesa_glsl_error(&  @1, state, "unrecognized layout identifier "
>   			       "`%s'\n", $1);
>   	      YYERROR;
> @@ -1178,8 +1165,6 @@ layout_qualifier_id:
>   	}
>   	| any_identifier '=' INTCONSTANT
>   	{
> -	   bool got_one = false;
> -
>   	   memset(&  $$, 0, sizeof($$));
>
>   	   if (state->ARB_explicit_attrib_location_enable) {
> @@ -1187,8 +1172,6 @@ layout_qualifier_id:
>   	       * FINISHME: GLSL 1.30 (or later) are supported.
>   	       */
>   	      if (strcmp("location", $1) == 0) {
> -		 got_one = true;
> -
>   		 $$.flags.q.explicit_location = 1;
>
>   		 if ($3>= 0) {
> @@ -1201,8 +1184,6 @@ layout_qualifier_id:
>   	      }
>
>   	      if (strcmp("index", $1) == 0) {
> -	      	 got_one = true;
> -
>   		 $$.flags.q.explicit_index = 1;
>
>   		 if ($3>= 0) {
> @@ -1218,7 +1199,7 @@ layout_qualifier_id:
>   	   /* If the identifier didn't match any known layout identifiers,
>   	    * emit an error.
>   	    */
> -	   if (!got_one) {
> +	   if (!$$.flags.i) {
>   	      _mesa_glsl_error(&  @1, state, "unrecognized layout identifier "
>   			       "`%s'\n", $1);
>   	      YYERROR;


More information about the mesa-dev mailing list