aboutsummaryrefslogtreecommitdiff
path: root/interpreter/eval.c
diff options
context:
space:
mode:
authorCamil Staps2016-08-29 21:39:44 +0200
committerCamil Staps2016-08-29 21:39:44 +0200
commitdb36425d8cc1f9d27ba7047f30158e3524c71fce (patch)
tree93bb0c2020b15bf838f977e62b202b3aed533693 /interpreter/eval.c
parentCurrying arguments and Code applications (diff)
Fixed issue with twice
Diffstat (limited to 'interpreter/eval.c')
-rw-r--r--interpreter/eval.c5
1 files changed, 4 insertions, 1 deletions
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);