mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 19:42:50 -06:00
fix in evaluator.c
This commit is contained in:
@@ -100,18 +100,16 @@ repeat:;
|
|||||||
} else {
|
} else {
|
||||||
size_t arity = absfun->arity;
|
size_t arity = absfun->arity;
|
||||||
|
|
||||||
if (n_args == arity) {
|
if (n_args >= arity) {
|
||||||
PgfValue* val = gu_new_flex(rs->pool, PgfValue, args, arity);
|
PgfValue* val = gu_new_flex(rs->pool, PgfValue, args, n_args);
|
||||||
val->header.code = rs->eval_gates->evaluate_value;
|
val->header.code = rs->eval_gates->evaluate_value;
|
||||||
val->con = (PgfClosure*) &absfun->closure;
|
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];
|
val->args[i] = args[--n_args];
|
||||||
}
|
}
|
||||||
res = &val->header;
|
res = &val->header;
|
||||||
} else {
|
} else {
|
||||||
gu_assert(n_args < arity);
|
|
||||||
|
|
||||||
PgfExprThunk* lambda = gu_new(PgfExprThunk, rs->pool);
|
PgfExprThunk* lambda = gu_new(PgfExprThunk, rs->pool);
|
||||||
lambda->header.code = rs->eval_gates->evaluate_value_lambda;
|
lambda->header.code = rs->eval_gates->evaluate_value_lambda;
|
||||||
lambda->env = NULL;
|
lambda->env = NULL;
|
||||||
@@ -135,7 +133,7 @@ repeat:;
|
|||||||
|
|
||||||
expr = new_expr;
|
expr = new_expr;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < arity-1; i++) {
|
for (size_t i = 0; i < arity-1; i++) {
|
||||||
PgfExpr new_expr;
|
PgfExpr new_expr;
|
||||||
|
|
||||||
@@ -223,7 +221,7 @@ pgf_value2expr(PgfReasoner* rs, int level, PgfClosure* clos)
|
|||||||
PgfAbsFun* absfun = gu_container(val->con, PgfAbsFun, closure);
|
PgfAbsFun* absfun = gu_container(val->con, PgfAbsFun, closure);
|
||||||
|
|
||||||
expr = absfun->ep.expr;
|
expr = absfun->ep.expr;
|
||||||
n_args = absfun->arity;
|
n_args = gu_seq_length(absfun->type->hypos);
|
||||||
args = val->args;
|
args = val->args;
|
||||||
} else if (clos->code == rs->eval_gates->evaluate_value_lit) {
|
} else if (clos->code == rs->eval_gates->evaluate_value_lit) {
|
||||||
PgfValueLit* val = (PgfValueLit*) clos;
|
PgfValueLit* val = (PgfValueLit*) clos;
|
||||||
|
|||||||
Reference in New Issue
Block a user