From 67f0debc923dc97fd79554678435f113c9f761d1 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Wed, 27 Oct 2021 15:15:04 +0200 Subject: Fix an issue with reading local variables when nested --- src/bytecode/vm.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/bytecode/vm.h') diff --git a/src/bytecode/vm.h b/src/bytecode/vm.h index 15a6b86..3c99131 100755 --- a/src/bytecode/vm.h +++ b/src/bytecode/vm.h @@ -175,8 +175,11 @@ vm_interpret(VM *vm) { u8 instruction = *vm->pc++; switch (instruction) { case OP_LOCAL: { - u8 local = *vm->pc++; - array_push(vm->stack, vm->stack[frame->stack_offset + local]); + ssize_t idx = AS_FIXNUM(array_pop(vm->stack)); + ssize_t depth = AS_FIXNUM(array_pop(vm->stack)); + CallFrame frame = vm->frames[depth]; + array_push(vm->stack, vm->stack[frame.stack_offset + idx]); + } break; case OP_CONSTANT: { u8 constant = *vm->pc++; -- cgit v1.2.1