[Mesa-dev] [PATCH] glsl: Fix glcpp to properly lex entire "preprocessing numbers"

Anuj Phogat anuj.phogat at gmail.com
Thu Jun 12 17:18:15 PDT 2014


On Thu, Jun 12, 2014 at 3:13 PM, Carl Worth <cworth at cworth.org> wrote:
>
> The preprocessor defines a notions of a "preprocessing number" that
> starts with either a digit or a decimal point, and continues with zero
> or more of digits, decimal points, identifier characters, or the sign
> symbols, ('-' and '+').
>
> Prior to this change, preprocessing numbers were lexed as some
> combination of OTHER and IDENTIFIER tokens. This had the problem of
> causing undesired macro expansion in some cases.
>
> We add tests to ensure that the undesired macro expansion does not
> happen in cases such as:
>
>         #define e +1
>         #define xyz -2
>
>         int n = 1e;
>         int p = 1xyz;
>
> In either case these macro definitions have no effect after this
> change, so that the numeric literals, (whether valid or not), will be
> passed on as-is from the preprocessor to the compiler proper.
>
> This fixes at least the following Khronos GLES3 CTS test:
>
> preprocessor.basic.correct_phases_fragment
> ---
>  src/glsl/glcpp/glcpp-lex.l                                | 6 ++++++
>  src/glsl/glcpp/tests/124-preprocessing-numbers.c          | 8 ++++++++
>  src/glsl/glcpp/tests/124-preprocessing-numbers.c.expected | 9 +++++++++
>  3 files changed, 23 insertions(+)
>  create mode 100644 src/glsl/glcpp/tests/124-preprocessing-numbers.c
>  create mode 100644 src/glsl/glcpp/tests/124-preprocessing-numbers.c.expected
>
> diff --git a/src/glsl/glcpp/glcpp-lex.l b/src/glsl/glcpp/glcpp-lex.l
> index d5fb087..4dbaa9e 100644
> --- a/src/glsl/glcpp/glcpp-lex.l
> +++ b/src/glsl/glcpp/glcpp-lex.l
> @@ -91,6 +91,7 @@ DIGITS                        [0-9][0-9]*
>  DECIMAL_INTEGER                [1-9][0-9]*[uU]?
>  OCTAL_INTEGER          0[0-7]*[uU]?
>  HEXADECIMAL_INTEGER    0[xX][0-9a-fA-F]+[uU]?
> +PP_NUMBER              [0-9.][-+._a-zA-Z0-9]*
>
>  %%
>
> @@ -339,6 +340,11 @@ HEXADECIMAL_INTEGER        0[xX][0-9a-fA-F]+[uU]?
>         return OTHER;
>  }
>
> +{PP_NUMBER} {
> +       yylval->str = ralloc_strdup (yyextra, yytext);
> +       return OTHER;
> +}
> +
>  {HSPACE} {
>         if (yyextra->space_tokens) {
>                 return SPACE;
> diff --git a/src/glsl/glcpp/tests/124-preprocessing-numbers.c b/src/glsl/glcpp/tests/124-preprocessing-numbers.c
> new file mode 100644
> index 0000000..3743c69
> --- /dev/null
> +++ b/src/glsl/glcpp/tests/124-preprocessing-numbers.c
> @@ -0,0 +1,8 @@
> +#define e +1
> +#define xyz -2
> +
> +/* The following are "preprocessing numbers" and should not trigger macro
> + * expansion. */
> +int n = 1e;
> +int p = 1xyz;
> +
> diff --git a/src/glsl/glcpp/tests/124-preprocessing-numbers.c.expected b/src/glsl/glcpp/tests/124-preprocessing-numbers.c.expected
> new file mode 100644
> index 0000000..951581e
> --- /dev/null
> +++ b/src/glsl/glcpp/tests/124-preprocessing-numbers.c.expected
> @@ -0,0 +1,9 @@
> +
> +
> +
> +
> +
> +int n = 1e;
> +int p = 1xyz;
> +
> +
> --
> 2.0.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>


More information about the mesa-dev mailing list