aboutsummaryrefslogtreecommitdiff
path: root/parse.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-11-03 15:48:13 -0500
committerBruce Hill <bruce@bruce-hill.com>2024-11-03 15:48:13 -0500
commit3743913ce2c5bc37f899d437c09b60cbb3bc6dea (patch)
treecbbe7fe8debc7651c915b727f608bf2bcfa151ea /parse.c
parent792743dff3b4af6df030a53e447b28a8a3e8b072 (diff)
Add unsigned integer shifts
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/parse.c b/parse.c
index 13c0a208..1e76f828 100644
--- a/parse.c
+++ b/parse.c
@@ -1704,13 +1704,26 @@ binop_e match_binary_operator(const char **pos)
case '*': *pos += 1; return BINOP_MULT;
case '/': *pos += 1; return BINOP_DIVIDE;
case '^': *pos += 1; return BINOP_POWER;
- case '<':
+ case '<': {
*pos += 1;
if (match(pos, "=")) return BINOP_LE;
else if (match(pos, ">")) return BINOP_CMP;
- else if (match(pos, "<")) return BINOP_LSHIFT;
- else return BINOP_LT;
- case '>': *pos += 1; return match(pos, "=") ? BINOP_GE : (match(pos, ">") ? BINOP_RSHIFT : BINOP_GT);
+ else if (match(pos, "<")) {
+ if (match(pos, "[u]"))
+ return BINOP_ULSHIFT;
+ return BINOP_LSHIFT;
+ } else return BINOP_LT;
+ }
+ case '>': {
+ *pos += 1;
+ if (match(pos, "=")) return BINOP_GE;
+ if (match(pos, ">")) {
+ if (match(pos, "[u]"))
+ return BINOP_URSHIFT;
+ return BINOP_RSHIFT;
+ }
+ return BINOP_GT;
+ }
default: {
if (match(pos, "!=")) return BINOP_NE;
else if (match(pos, "==") && **pos != '=') return BINOP_EQ;