aboutsummaryrefslogtreecommitdiff
path: root/compiler/syntax.c
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/syntax.c')
-rw-r--r--compiler/syntax.c47
1 files changed, 22 insertions, 25 deletions
diff --git a/compiler/syntax.c b/compiler/syntax.c
index cbb2fc7..b4ff9dc 100644
--- a/compiler/syntax.c
+++ b/compiler/syntax.c
@@ -3,17 +3,18 @@
#include <stdlib.h>
#include <string.h>
+#include "mem.h"
+
void free_token(token* tk) {
- if (tk->var) {
- free(tk->var);
- }
+ if (tk->var)
+ my_free(tk->var);
}
void free_token_list(token_list* list) {
free_token(&list->elem);
if (list->rest)
free_token_list(list->rest);
- free(list->rest);
+ my_free(list->rest);
}
unsigned empty_args_list(arg_list* list) {
@@ -24,15 +25,11 @@ void cpy_expression(expression* dst, expression* src) {
dst->kind = src->kind;
switch (dst->kind) {
case EXPR_INT:
- dst->var1 = malloc(sizeof(int));
- if (!dst->var1)
- error_no_mem();
+ dst->var1 = my_calloc(1, sizeof(int));
*((int*) dst->var1) = *((int*) src->var1);
break;
case EXPR_NAME:
- dst->var1 = malloc(strlen((char*) src->var1) + 1);
- if (!dst->var1)
- error_no_mem();
+ dst->var1 = my_calloc(1, strlen((char*) src->var1) + 1);
strcpy(dst->var1, src->var1);
break;
case EXPR_LIST:
@@ -40,10 +37,8 @@ void cpy_expression(expression* dst, expression* src) {
break;
case EXPR_TUPLE:
case EXPR_APP:
- dst->var1 = malloc(sizeof(expression));
- dst->var2 = malloc(sizeof(expression));
- if (!dst->var1 || !dst->var2)
- error_no_mem();
+ dst->var1 = my_calloc(1, sizeof(expression));
+ dst->var2 = my_calloc(1, sizeof(expression));
cpy_expression(dst->var1, src->var1);
cpy_expression(dst->var2, src->var2);
break;
@@ -60,8 +55,8 @@ unsigned eq_expression(expression* a, expression* b) {
case EXPR_TUPLE:
case EXPR_LIST:
case EXPR_APP:
- if (!a->var1 && b->var1 || a->var1 && !b->var1 ||
- !a->var2 && b->var2 || a->var2 && b->var2)
+ if ((!a->var1 && b->var1) || (a->var1 && !b->var1) ||
+ (!a->var2 && b->var2) || (a->var2 && b->var2))
return 0;
if (a->var1 && !eq_expression(a->var1, b->var1))
return 0;
@@ -69,6 +64,8 @@ unsigned eq_expression(expression* a, expression* b) {
return 0;
return 1;
}
+
+ return 0;
}
expression** flatten_app_args(expression* from) {
@@ -80,7 +77,7 @@ expression** flatten_app_args(expression* from) {
}
len++;
- expression** result = calloc(1, sizeof(expression*) * (len + 1));
+ expression** result = my_calloc(1, sizeof(expression*) * (len + 1));
unsigned int i = 1;
while (from->kind == EXPR_APP) {
result[len - i] = from->var2;
@@ -103,7 +100,7 @@ void concat_fuspel(fuspel* start, fuspel* end) {
}
fuspel* push_fuspel(fuspel* rules) {
- fuspel* new_rules = calloc(1, sizeof(fuspel));
+ fuspel* new_rules = my_calloc(1, sizeof(fuspel));
new_rules->rest = rules;
return new_rules;
}
@@ -128,15 +125,15 @@ void free_expression(expression* expr) {
switch (expr->kind) {
case EXPR_INT:
case EXPR_NAME:
- free(expr->var1);
+ my_free(expr->var1);
break;
case EXPR_LIST:
case EXPR_TUPLE:
case EXPR_APP:
free_expression(expr->var1);
free_expression(expr->var2);
- free(expr->var1);
- free(expr->var2);
+ my_free(expr->var1);
+ my_free(expr->var2);
break;
}
}
@@ -145,14 +142,14 @@ void free_arg_list(arg_list* list) {
free_expression(&list->elem);
if (list->rest)
free_arg_list(list->rest);
- free(list->rest);
+ my_free(list->rest);
}
void free_rewrite_rule(rewrite_rule* rule) {
- free(rule->name);
+ my_free(rule->name);
if (rule->args)
free_arg_list(rule->args);
- free(rule->args);
+ my_free(rule->args);
free_expression(&rule->rhs);
}
@@ -160,5 +157,5 @@ void free_fuspel(fuspel* rules) {
free_rewrite_rule(&rules->rule);
if (rules->rest)
free_fuspel(rules->rest);
- free(rules->rest);
+ my_free(rules->rest);
}