diff options
| author | krasimir <krasimir@chalmers.se> | 2016-04-14 13:47:29 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2016-04-14 13:47:29 +0000 |
| commit | 114e95f43b58a41ce0b5c6a6f4cfd67f8e00086f (patch) | |
| tree | 1b8d4eeb1968bdfc4af486e29156ba3ea54013d7 /src/runtime/c/pgf/evaluator.c | |
| parent | 627abeb703e4bf14181d18c02dea9206e69d828e (diff) | |
fix in evaluator.c
Diffstat (limited to 'src/runtime/c/pgf/evaluator.c')
| -rw-r--r-- | src/runtime/c/pgf/evaluator.c | 12 |
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; |
