[Mesa-dev] [PATCH 06/19] glsl: Refactor code to check that identifier names are valid.

Paul Berry stereotype441 at gmail.com
Tue Oct 8 14:29:55 PDT 2013


On 5 October 2013 12:12, Kenneth Graunke <kenneth at whitecape.org> wrote:

> On 10/02/2013 05:45 PM, Paul Berry wrote:
> > GLSL reserves identifiers beginning with "gl_" or containing "__", but
> > we haven't been consistent about enforcing this rule.  This patch
> > makes a new function to check whether identifier names are valid.  In
> > the process it closes a loophole where we would previously allow
> > function argument names to contain "__".
> > ---
> >  src/glsl/ast_to_hir.cpp | 65
> ++++++++++++++++++++++++-------------------------
> >  1 file changed, 32 insertions(+), 33 deletions(-)
> >
> > diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
> > index c1e3c08..f4f81e0 100644
> > --- a/src/glsl/ast_to_hir.cpp
> > +++ b/src/glsl/ast_to_hir.cpp
> > @@ -2649,6 +2649,36 @@ handle_geometry_shader_input_decl(struct
> _mesa_glsl_parse_state *state,
> >     }
> >  }
> >
> > +
> > +void
> > +check_valid_identifier(const char *identifier, YYLTYPE loc,
> > +                       struct _mesa_glsl_parse_state *state)
>
> "check_valid_identifier" sounds strange if you read it aloud.
>
> Perhaps one of the following?
> - validate_identifier()
> - check_for_valid_identifier()
> - check_identifier_validity()
>

Ok, I went with validate_identifier().


>
> > +{
> > +   /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
> > +    *
> > +    *   "Identifiers starting with "gl_" are reserved for use by
> > +    *   OpenGL, and may not be declared in a shader as either a
> > +    *   variable or a function."
> > +    */
> > +   if (strncmp(identifier, "gl_", 3) == 0)
>
> I would really like to see curly braces here, for two reasons:
> 1. Even though it's a single statement, it spans multiple lines.
> 2. The else case uses curly braces.
>

Ok, fixed.


>
> Even if you don't take my suggestions, this is:
> Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
>
> > +      _mesa_glsl_error(&loc, state,
> > +                       "identifier `%s' uses reserved `gl_' prefix",
> > +                       identifier);
> > +   else if (strstr(identifier, "__")) {
> > +      /* From page 14 (page 20 of the PDF) of the GLSL 1.10
> > +       * spec:
> > +       *
> > +       *     "In addition, all identifiers containing two
> > +       *      consecutive underscores (__) are reserved as
> > +       *      possible future keywords."
> > +       */
> > +      _mesa_glsl_error(&loc, state,
> > +                       "identifier `%s' uses reserved `__' string",
> > +                       identifier);
> > +   }
> > +}
> > +
> > +
> >  ir_rvalue *
> >  ast_declarator_list::hir(exec_list *instructions,
> >                        struct _mesa_glsl_parse_state *state)
> > @@ -3243,28 +3273,7 @@ ast_declarator_list::hir(exec_list *instructions,
> >         * created for the declaration should be added to the IR stream.
> >         */
> >        if (earlier == NULL) {
> > -      /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
> > -       *
> > -       *   "Identifiers starting with "gl_" are reserved for use by
> > -       *   OpenGL, and may not be declared in a shader as either a
> > -       *   variable or a function."
> > -       */
> > -      if (strncmp(decl->identifier, "gl_", 3) == 0)
> > -         _mesa_glsl_error(& loc, state,
> > -                          "identifier `%s' uses reserved `gl_' prefix",
> > -                          decl->identifier);
> > -      else if (strstr(decl->identifier, "__")) {
> > -         /* From page 14 (page 20 of the PDF) of the GLSL 1.10
> > -          * spec:
> > -          *
> > -          *     "In addition, all identifiers containing two
> > -          *      consecutive underscores (__) are reserved as
> > -          *      possible future keywords."
> > -          */
> > -         _mesa_glsl_error(& loc, state,
> > -                          "identifier `%s' uses reserved `__' string",
> > -                          decl->identifier);
> > -      }
> > +         check_valid_identifier(decl->identifier, loc, state);
> >
> >        /* Add the variable to the symbol table.  Note that the
> initializer's
> >         * IR was already processed earlier (though it hasn't been emitted
> > @@ -3505,17 +3514,7 @@ ast_function::hir(exec_list *instructions,
> >                      "function body", name);
> >     }
> >
> > -   /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
> > -    *
> > -    *   "Identifiers starting with "gl_" are reserved for use by
> > -    *   OpenGL, and may not be declared in a shader as either a
> > -    *   variable or a function."
> > -    */
> > -   if (strncmp(name, "gl_", 3) == 0) {
> > -      YYLTYPE loc = this->get_location();
> > -      _mesa_glsl_error(&loc, state,
> > -                    "identifier `%s' uses reserved `gl_' prefix", name);
> > -   }
> > +   check_valid_identifier(name, this->get_location(), state);
> >
> >     /* Convert the list of function parameters to HIR now so that they
> can be
> >      * used below to compare this function's signature with previously
> seen
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20131008/f214b84d/attachment.html>


More information about the mesa-dev mailing list