diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-11-03 15:48:13 -0500 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-11-03 15:48:13 -0500 |
| commit | 3743913ce2c5bc37f899d437c09b60cbb3bc6dea (patch) | |
| tree | cbbe7fe8debc7651c915b727f608bf2bcfa151ea /parse.c | |
| parent | 792743dff3b4af6df030a53e447b28a8a3e8b072 (diff) | |
Add unsigned integer shifts
Diffstat (limited to 'parse.c')
| -rw-r--r-- | parse.c | 21 |
1 files changed, 17 insertions, 4 deletions
@@ -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; |
