From: Giovanni Mascellani Subject: Re: [PATCH vkd3d] vkd3d-shader/preproc: Allow capital U and L after integer constants as well. Message-Id: <88614cca-fd17-92be-1224-3704e97004f6@codeweavers.com> Date: Thu, 13 Jan 2022 15:20:09 +0100 In-Reply-To: <20220110234804.109386-1-zfigura@codeweavers.com> References: <20220110234804.109386-1-zfigura@codeweavers.com> Signed-off-by: Giovanni Mascellani Il 11/01/22 00:48, Zebediah Figura ha scritto: > Technically we shouldn't allow "uu" or "ll" either, but we also don't really > handle preprocessor parsing errors the way we should. > > Signed-off-by: Zebediah Figura > --- > libs/vkd3d-shader/preproc.l | 7 ++++--- > tests/preproc-if-expr.shader_test | 33 +++++++++++++++++++++++++++++++ > 2 files changed, 37 insertions(+), 3 deletions(-) > > diff --git a/libs/vkd3d-shader/preproc.l b/libs/vkd3d-shader/preproc.l > index bf4d669f3..54542331b 100644 > --- a/libs/vkd3d-shader/preproc.l > +++ b/libs/vkd3d-shader/preproc.l > @@ -57,6 +57,7 @@ static void update_location(struct preproc_ctx *ctx); > NEWLINE \r?\n > WS [ \t] > IDENTIFIER [A-Za-z_][A-Za-z0-9_]* > +INT_SUFFIX [uUlL]{0,2} > > %% > > @@ -92,9 +93,9 @@ IDENTIFIER [A-Za-z_][A-Za-z0-9_]* > [0-9]+\.([eE][+-]?[0-9]+)?[hHfF]? {return T_TEXT;} > [0-9]+([eE][+-]?[0-9]+)?[hHfF] {return T_TEXT;} > [0-9]+[eE][+-]?[0-9]+ {return T_TEXT;} > -0[xX][0-9a-fA-f]+[ul]{0,2} {return T_INTEGER;} > -0[0-7]*[ul]{0,2} {return T_INTEGER;} > -[1-9][0-9]*[ul]{0,2} {return T_INTEGER;} > +0[xX][0-9a-fA-f]+{INT_SUFFIX} {return T_INTEGER;} > +0[0-7]*{INT_SUFFIX} {return T_INTEGER;} > +[1-9][0-9]*{INT_SUFFIX} {return T_INTEGER;} > > ## {return T_CONCAT;} > > diff --git a/tests/preproc-if-expr.shader_test b/tests/preproc-if-expr.shader_test > index 61c5a397d..823b9b0e3 100644 > --- a/tests/preproc-if-expr.shader_test > +++ b/tests/preproc-if-expr.shader_test > @@ -99,6 +99,39 @@ pass > pass > #endif > > +[preproc] > +#if 2u == 2 > +pass > +#else > +fail > +#endif > + > +[preproc] > +#if 2l == 2 > +pass > +#else > +fail > +#endif > + > +[preproc] > +#if 2Ul == 2 > +pass > +#else > +fail > +#endif > + > +[preproc] > +#if 2uL == 2 > +pass > +#else > +fail > +#endif > + > +[preproc] > +#if 012lu == 10 > +pass > +#endif > + > [preproc] > /* All math is done using unsigned 32-bit integers. */ > #if 8 / -3 == 2