aboutsummaryrefslogtreecommitdiff
path: root/parse.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-11-03 16:06:26 -0500
committerBruce Hill <bruce@bruce-hill.com>2024-11-03 16:06:26 -0500
commit39a58bc129fd9461d54b837bc1650c4c650aa333 (patch)
treed3a7e9b3be33856cc8343f6cb273f9a14c28effd /parse.c
parent3743913ce2c5bc37f899d437c09b60cbb3bc6dea (diff)
Clean up behavior and syntax for unsigned bit shifts (<<<, >>>)
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/parse.c b/parse.c
index 1e76f828..0130673a 100644
--- a/parse.c
+++ b/parse.c
@@ -1706,21 +1706,21 @@ binop_e match_binary_operator(const char **pos)
case '^': *pos += 1; return BINOP_POWER;
case '<': {
*pos += 1;
- if (match(pos, "=")) return BINOP_LE;
- else if (match(pos, ">")) return BINOP_CMP;
+ if (match(pos, "=")) return BINOP_LE; // "<="
+ else if (match(pos, ">")) return BINOP_CMP; // "<>"
else if (match(pos, "<")) {
- if (match(pos, "[u]"))
- return BINOP_ULSHIFT;
- return BINOP_LSHIFT;
+ if (match(pos, "<"))
+ return BINOP_ULSHIFT; // "<<<"
+ return BINOP_LSHIFT; // "<<"
} else return BINOP_LT;
}
case '>': {
*pos += 1;
- if (match(pos, "=")) return BINOP_GE;
+ if (match(pos, "=")) return BINOP_GE; // ">="
if (match(pos, ">")) {
- if (match(pos, "[u]"))
- return BINOP_URSHIFT;
- return BINOP_RSHIFT;
+ if (match(pos, ">"))
+ return BINOP_URSHIFT; // ">>>"
+ return BINOP_RSHIFT; // ">>"
}
return BINOP_GT;
}
@@ -1814,6 +1814,10 @@ PARSER(parse_update) {
else if (match(&pos, "*=")) op = BINOP_MULT;
else if (match(&pos, "/=")) op = BINOP_DIVIDE;
else if (match(&pos, "^=")) op = BINOP_POWER;
+ else if (match(&pos, "<<=")) op = BINOP_LSHIFT;
+ else if (match(&pos, "<<<=")) op = BINOP_ULSHIFT;
+ else if (match(&pos, ">>=")) op = BINOP_RSHIFT;
+ else if (match(&pos, ">>>=")) op = BINOP_URSHIFT;
else if (match(&pos, "and=")) op = BINOP_AND;
else if (match(&pos, "or=")) op = BINOP_OR;
else if (match(&pos, "xor=")) op = BINOP_XOR;