diff options
-rw-r--r-- | interpreter/Makefile | 2 | ||||
-rw-r--r-- | interpreter/eval.c | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/interpreter/Makefile b/interpreter/Makefile index 56619ce..99da737 100644 --- a/interpreter/Makefile +++ b/interpreter/Makefile @@ -1,4 +1,4 @@ -CFLAGS=-Wall -Werror -g +CFLAGS=-Wall -Wextra -Werror -s DEPS=lex.h syntax.h print.h parse.h log.h eval.h mem.h code.h graphs.h OBJ=fuspel.o lex.o syntax.o print.o parse.o log.o eval.o mem.o code.o graphs.o diff --git a/interpreter/eval.c b/interpreter/eval.c index 8949841..74b869a 100644 --- a/interpreter/eval.c +++ b/interpreter/eval.c @@ -240,7 +240,6 @@ void eval(fuspel* rules, struct node** node, if (is_code_app(*node)) { eval_code_app(rules, node, repls, to_free); rerun = 1; - // TODO break; } @@ -251,17 +250,21 @@ void eval(fuspel* rules, struct node** node, if (add_args >= 0) { unsigned char j; + unsigned int org_used_count; struct node** _node = node; for (j = 0; j < add_args; j++) _node = (struct node**) &(*_node)->var1; + org_used_count = (*_node)->used_count; + for (j = 0; (*repls)->replacements[j].node; j++) use_node((*repls)->replacements[j].node, 1); free_node(*_node, 0); cpy_expression_to_node(*_node, &_rules->rule.rhs); replace_all(*repls, _node); + use_node(*_node, org_used_count - 1); for (j = 0; (*repls)->replacements[j].node; j++) free_node((*repls)->replacements[j].node, 1); |