summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2016-04-14 13:47:29 +0000
committerkrasimir <krasimir@chalmers.se>2016-04-14 13:47:29 +0000
commit114e95f43b58a41ce0b5c6a6f4cfd67f8e00086f (patch)
tree1b8d4eeb1968bdfc4af486e29156ba3ea54013d7 /src/runtime/c/pgf
parent627abeb703e4bf14181d18c02dea9206e69d828e (diff)
fix in evaluator.c
Diffstat (limited to 'src/runtime/c/pgf')
-rw-r--r--src/runtime/c/pgf/evaluator.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/runtime/c/pgf/evaluator.c b/src/runtime/c/pgf/evaluator.c
index 3295b81f4..457f60896 100644
--- a/src/runtime/c/pgf/evaluator.c
+++ b/src/runtime/c/pgf/evaluator.c
@@ -100,18 +100,16 @@ repeat:;
} else {
size_t arity = absfun->arity;
- if (n_args == arity) {
- PgfValue* val = gu_new_flex(rs->pool, PgfValue, args, arity);
+ if (n_args >= arity) {
+ PgfValue* val = gu_new_flex(rs->pool, PgfValue, args, n_args);
val->header.code = rs->eval_gates->evaluate_value;
val->con = (PgfClosure*) &absfun->closure;
- for (size_t i = 0; i < arity; i++) {
+ for (size_t i = 0; i < n_args; i++) {
val->args[i] = args[--n_args];
}
res = &val->header;
} else {
- gu_assert(n_args < arity);
-
PgfExprThunk* lambda = gu_new(PgfExprThunk, rs->pool);
lambda->header.code = rs->eval_gates->evaluate_value_lambda;
lambda->env = NULL;
@@ -135,7 +133,7 @@ repeat:;
expr = new_expr;
}
-
+
for (size_t i = 0; i < arity-1; i++) {
PgfExpr new_expr;
@@ -223,7 +221,7 @@ pgf_value2expr(PgfReasoner* rs, int level, PgfClosure* clos)
PgfAbsFun* absfun = gu_container(val->con, PgfAbsFun, closure);
expr = absfun->ep.expr;
- n_args = absfun->arity;
+ n_args = gu_seq_length(absfun->type->hypos);
args = val->args;
} else if (clos->code == rs->eval_gates->evaluate_value_lit) {
PgfValueLit* val = (PgfValueLit*) clos;