From: Lukas Krickl Date: Sun, 10 Dec 2023 08:03:58 +0000 (+0100) Subject: Added remaining int operators X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=2d0854a57bf88f391cbce9a138cedc5d13b4e692;p=ulas%2F.git Added remaining int operators --- diff --git a/include/ulas.h b/include/ulas.h index 575d284..e6b2b67 100644 --- a/include/ulas.h +++ b/include/ulas.h @@ -129,7 +129,9 @@ enum ulas_type { ULAS_EQ, ULAS_NEQ, ULAS_GTEQ, - ULAS_LTEQ + ULAS_LTEQ, + ULAS_RSHIFT, + ULAS_LSHIFT, }; // data type value diff --git a/src/main.c b/src/main.c index e7484df..2bd14d1 100644 --- a/src/main.c +++ b/src/main.c @@ -19,7 +19,7 @@ #define ULAS_INCPATHSMAX 256 -const char *incpaths[ULAS_INCPATHSMAX]; +char *incpaths[ULAS_INCPATHSMAX]; long incpathslen = 0; void ulas_help(void) { diff --git a/src/ulas.c b/src/ulas.c index 3989b5a..5ee5030 100644 --- a/src/ulas.c +++ b/src/ulas.c @@ -526,12 +526,17 @@ struct ulas_tok ulas_totok(char *buf, unsigned long n, int *rc) { if (*buf == '=') { tok.type = ULAS_LTEQ; buf++; + } else if (*buf == '<') { + tok.type = ULAS_LSHIFT; } break; case '>': if (*buf == '=') { tok.type = ULAS_GTEQ; buf++; + } else if (*buf == '>') { + tok.type = ULAS_RSHIFT; + buf++; } break; default: @@ -1527,6 +1532,16 @@ int ulas_intexpreval(int i, int *rc) { return 0; } return left % right; + case ULAS_RSHIFT: + return left >> right; + case ULAS_LSHIFT: + return left << right; + case '|': + return left | right; + case '&': + return left & right; + case '^': + return left ^ right; default: ULASPANIC("Unhandeled binary operator\n"); break; @@ -1544,6 +1559,8 @@ int ulas_intexpreval(int i, int *rc) { return !right; case '-': return -right; + case '~': + return ~right; default: ULASPANIC("Unhandeled unary operation\n"); break;