aboutsummaryrefslogtreecommitdiff
path: root/compiler/parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/parse.c')
-rw-r--r--compiler/parse.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/compiler/parse.c b/compiler/parse.c
index a8c4b37..8507098 100644
--- a/compiler/parse.c
+++ b/compiler/parse.c
@@ -47,6 +47,7 @@ token_list* parse_simple_expression(expression* expr, token_list* list) {
if (!_expr)
error_no_mem();
cpy_expression(_expr, expr);
+ free_expression(expr);
expr->kind = EXPR_TUPLE;
expr->var1 = _expr;
expr->var2 = calloc(1, sizeof(expression));
@@ -138,6 +139,7 @@ token_list* parse_expression_no_app(expression* expr, token_list* list) {
error_no_mem();
cpy_expression(_expr, expr);
+ free_expression(expr);
expr->kind = EXPR_TUPLE;
expr->var1 = _expr;
@@ -166,11 +168,15 @@ token_list* parse_expression_no_app(expression* expr, token_list* list) {
token_list* _list = parse_expression(expr1, list->rest);
if (!_list || _list->elem.kind != TOKEN_COLON) {
+ free_expression(expr1);
free(expr1);
+ free(expr2);
} else {
_list = parse_expression(expr2, _list->rest);
if (!_list || _list->elem.kind != TOKEN_CLOSE_SQ) {
free_expression(expr1);
+ free_expression(expr2);
+ free(expr1);
free(expr2);
} else {
expr->var1 = expr1;
@@ -203,6 +209,7 @@ token_list* parse_expression(expression* expr, token_list* list) {
error_no_mem();
cpy_expression(_expr, expr);
+ free_expression(expr);
expr->kind = EXPR_APP;
expr->var1 = _expr;