[PATCH vkd3d 8/8] vkd3d-shader/preproc: Tokenize prepended '-' sign together with the integer.
Matteo Bruni
mbruni at codeweavers.com
Wed Mar 30 16:38:33 CDT 2022
Fixes regressions in Wine's d3dcompiler asm tests.
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
libs/vkd3d-shader/preproc.l | 10 +++++-----
libs/vkd3d-shader/preproc.y | 8 ++++++++
2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/libs/vkd3d-shader/preproc.l b/libs/vkd3d-shader/preproc.l
index 7686e018..00a4458a 100644
--- a/libs/vkd3d-shader/preproc.l
+++ b/libs/vkd3d-shader/preproc.l
@@ -91,13 +91,13 @@ INT_SUFFIX [uUlL]{0,2}
/* We have no use for floats, but shouldn't parse them as integers. */
-<INITIAL>[0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[hHfF]? {return T_TEXT;}
-<INITIAL>[0-9]+\.([eE][+-]?[0-9]+)?[hHfF]? {return T_TEXT;}
-<INITIAL>[0-9]+([eE][+-]?[0-9]+)?[hHfF] {return T_TEXT;}
-<INITIAL>[0-9]+[eE][+-]?[0-9]+ {return T_TEXT;}
+<INITIAL>-?[0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[hHfF]? {return T_TEXT;}
+<INITIAL>-?[0-9]+\.([eE][+-]?[0-9]+)?[hHfF]? {return T_TEXT;}
+<INITIAL>-?[0-9]+([eE][+-]?[0-9]+)?[hHfF] {return T_TEXT;}
+<INITIAL>-?[0-9]+[eE][+-]?[0-9]+ {return T_TEXT;}
<INITIAL,LINE>0[xX][0-9a-fA-f]+{INT_SUFFIX} {return T_INTEGER;}
<INITIAL,LINE>0[0-7]*{INT_SUFFIX} {return T_INTEGER;}
-<INITIAL,LINE>[1-9][0-9]*{INT_SUFFIX} {return T_INTEGER;}
+<INITIAL,LINE>-?[1-9][0-9]*{INT_SUFFIX} {return T_INTEGER;}
<INITIAL>## {return T_CONCAT;}
diff --git a/libs/vkd3d-shader/preproc.y b/libs/vkd3d-shader/preproc.y
index 3f02ac03..5dd7929a 100644
--- a/libs/vkd3d-shader/preproc.y
+++ b/libs/vkd3d-shader/preproc.y
@@ -179,8 +179,14 @@ static int char_to_int(char c)
static uint32_t preproc_parse_integer(const char *s)
{
uint32_t base = 10, ret = 0;
+ bool sign = false;
int digit;
+ if (*s == '-')
+ {
+ sign = true;
+ ++s;
+ }
if (*s == '0')
{
base = 8;
@@ -194,6 +200,8 @@ static uint32_t preproc_parse_integer(const char *s)
while ((digit = char_to_int(*s++)) >= 0)
ret = ret * base + (uint32_t)digit;
+ if (sign)
+ ret = -ret;
return ret;
}
--
2.34.1
More information about the wine-devel
mailing list