From 9283b46a08a1c58c321b6c7ebad1353725c3bc47 Mon Sep 17 00:00:00 2001 From: hachem Date: Fri, 4 Sep 2026 20:00:52 +0200 Subject: feat: add if/else blocks if now guards a { } block or bare statement with an optional else (and now else-if chaining). The branch body becomes a statement list; a bare guarded statement is a list of length one. --- src/parser/ast.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/parser/ast.c') diff --git a/src/parser/ast.c b/src/parser/ast.c index a387533..9c78d1f 100644 --- a/src/parser/ast.c +++ b/src/parser/ast.c @@ -26,7 +26,7 @@ void free_expr(struct Expr* expr) free(expr); } -static void free_statement(struct Statement* statement) +void free_statement(struct Statement* statement) { switch (statement->kind) { @@ -36,8 +36,12 @@ static void free_statement(struct Statement* statement) case STATEMENT_IF: free_expr(statement->branch.left); free_expr(statement->branch.right); - free_statement(statement->branch.body); + for (size_t i = 0; i < statement->branch.body_count; i += 1) + free_statement(&statement->branch.body[i]); free(statement->branch.body); + for (size_t i = 0; i < statement->branch.else_count; i += 1) + free_statement(&statement->branch.else_body[i]); + free(statement->branch.else_body); break; case STATEMENT_CALL: for (size_t i = 0; i < statement->call.arg_count; i += 1) -- cgit v1.3