diff options
Diffstat (limited to 'src/parser/ast.c')
| -rw-r--r-- | src/parser/ast.c | 16 |
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) |
