From 9460f325d22fac3962a3452ce25a24b04d22e665 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Wed, 27 Oct 2021 14:22:19 +0200 Subject: Fix function call bug with number of locals --- src/bytecode/vm.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/bytecode/vm.h b/src/bytecode/vm.h index 287c83c..15a6b86 100755 --- a/src/bytecode/vm.h +++ b/src/bytecode/vm.h @@ -288,7 +288,7 @@ vm_interpret(VM *vm) { // NOTE: This is probably better handled at compilation, but for // now this is simpler to implement. ssize_t n_params = proc.chunk->n_params; - ssize_t n_locals = proc.chunk->n_locals; + ssize_t n_locals = proc.chunk->n_locals - n_params; if (n_args < n_params) { RUNTIME_ERROR(ERR_NOT_ENOUGH_ARGS); } else if (n_args > n_params) { @@ -317,7 +317,8 @@ vm_interpret(VM *vm) { } else { // Bind tail-call parameters. for (ssize_t i = 0; i < n_params; i++) { - Object obj = array_peek(vm->stack, n_locals + n_params - 1 - i); + size_t offset = n_locals + n_params - 1 - i; + Object obj = array_peek(vm->stack, offset); vm->stack[frame->stack_offset + i] = obj; } -- cgit v1.2.1