From db36425d8cc1f9d27ba7047f30158e3524c71fce Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Mon, 29 Aug 2016 21:39:44 +0200 Subject: Fixed issue with twice --- interpreter/eval.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'interpreter/eval.c') 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); -- cgit v1.2.3