xo-interpreter2 stack: support 0-argument function calls

This commit is contained in:
Roland Conybeare 2026-02-28 13:20:11 +11:00
commit 2da3720c0f
2 changed files with 17 additions and 5 deletions

View file

@ -699,11 +699,24 @@ namespace xo {
// now i_arg is 0 -> evaluate that argument
this->expr_ = apply_expr->arg(i_arg);
this->pc_ = VsmInstr::c_eval;
this->cont_ = VsmInstr::c_evalargs;
if (i_arg >= static_cast<int32_t>(apply_expr->n_args())) {
// corner case: function with 0 arguments
return;
this->fn_ = apply_frame->fn(); // = value;
this->args_ = apply_frame->args(); // empty
this->stack_ = apply_frame->parent();
this->pc_ = VsmInstr::c_apply;
this->cont_ = apply_frame->cont();
return;
} else {
this->expr_ = apply_expr->arg(i_arg);
this->pc_ = VsmInstr::c_eval;
this->cont_ = VsmInstr::c_evalargs;
return;
}
} else {
// error - function position must deliver something with AProcedure?
// or DClosure, but we'll get to that.

View file

@ -110,7 +110,6 @@ namespace xo {
using R = typename Traits::return_type;
assert(args);
assert(args->size() > 0);
obj<AAllocator> mm = rcx.allocator();