aboutsummaryrefslogtreecommitdiff
path: root/src/parser/ast.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/ast.c')
-rw-r--r--src/parser/ast.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/parser/ast.c b/src/parser/ast.c
index 97cdb6d..9bdf4d1 100644
--- a/src/parser/ast.c
+++ b/src/parser/ast.c
@@ -25,8 +25,20 @@ void free_expr(struct Expr* expr)
static void free_statement(struct Statement* statement)
{
- if (statement->kind == STATEMENT_ASSIGN)
- free_expr(statement->assign.value);
+ switch (statement->kind)
+ {
+ case STATEMENT_ASSIGN:
+ free_expr(statement->assign.value);
+ break;
+ case STATEMENT_IF:
+ free_expr(statement->branch.left);
+ free_expr(statement->branch.right);
+ free_statement(statement->branch.body);
+ free(statement->branch.body);
+ break;
+ default:
+ break;
+ }
}
void free_proc(struct ProcDecl* proc)