aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2026-09-22 21:31:45 +0000
committeronelin <oscar@nelin.dk>2026-09-22 21:31:45 +0000
commit9908a38ec32dea9d6808164073b652216bf74e4b (patch)
tree84527e5f8f1aa3d57141212993755313b9c9041d
parent5bcc3382fc3b3299186d941dde16a35c9bb4281b (diff)
fix: check for consequtive n-ary expressionsHEADmaster
-rw-r--r--main.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/main.c b/main.c
index 4130099..c071959 100644
--- a/main.c
+++ b/main.c
@@ -387,8 +387,8 @@ p_arith(char const* restrict text, TokenList_t* restrict tokens) {
} else if (token->type == t_number && root != NULL &&
root->type != e_number) {
- // Consequtive nullary expressions are invalid
- if (exp_idx > 0 && expression[exp_idx - 1].type == e_number) {
+ // Consequtive nullary expressions are invalid (>1 because start from 1)
+ if (exp_idx > 1 && expression[exp_idx - 1].type == e_number) {
fprintf(stderr, "Unexpected number at %d:%d\n", token->pos.line,
token->pos.column);
return top;
@@ -406,6 +406,13 @@ p_arith(char const* restrict text, TokenList_t* restrict tokens) {
} else if (token->type != t_number && root != NULL) {
+ // Consequtive n-ary expressions are invalid (>1 because start from 1)
+ if (exp_idx > 1 && expression[exp_idx - 1].type != e_number) {
+ fprintf(stderr, "Unexpected n-ary operator at %d:%d\n", token->pos.line,
+ token->pos.column);
+ return top;
+ }
+
if (token->type == t_multiply) {
*expr = (AExp_t){.type = e_mul};
} else if (token->type == t_divide) {