From 878e12badcc573c1b312859382a956552a711b5d Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 28 Feb 2026 13:20:11 +1100 Subject: [PATCH] xo-interpreter2 stack: support 0-argument function calls --- src/interpreter2/VirtualSchematikaMachine.cpp | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/interpreter2/VirtualSchematikaMachine.cpp b/src/interpreter2/VirtualSchematikaMachine.cpp index c258cdd6..c2221aed 100644 --- a/src/interpreter2/VirtualSchematikaMachine.cpp +++ b/src/interpreter2/VirtualSchematikaMachine.cpp @@ -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(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.