From 3743913ce2c5bc37f899d437c09b60cbb3bc6dea Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sun, 3 Nov 2024 15:48:13 -0500 Subject: Add unsigned integer shifts --- parse.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'parse.c') 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; -- cgit v1.2.3