From abdcae0f839d0bd772c5f7211cb1cb2034355b62 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 24 Oct 2021 16:47:15 +0200 Subject: Cleanup IF jump code in compiler --- src/bytecode/vm.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/bytecode/vm.h') diff --git a/src/bytecode/vm.h b/src/bytecode/vm.h index b24a5fa..ba33077 100755 --- a/src/bytecode/vm.h +++ b/src/bytecode/vm.h @@ -197,13 +197,17 @@ vm_interpret(VM *vm, Chunk *chunk) { case OP_LESS_EQUAL: { FIXNUM_COMPARE_OP(<=); } break; case OP_GREATER_EQUAL: { FIXNUM_COMPARE_OP(>=); } break; case OP_JUMP: { - ssize_t off = AS_FIXNUM(array_pop(vm->stack)); - vm->pc += off; + u16 a = *vm->pc++; + u16 b = *vm->pc++; + u16 offset = (a << 8) | b; + vm->pc += offset; } break; case OP_JUMP_IF_FALSE: { - ssize_t off = AS_FIXNUM(array_pop(vm->stack)); + u16 a = *vm->pc++; + u16 b = *vm->pc++; + u16 offset = (a << 8) | b; if (IS_FALSE(array_pop(vm->stack))) { - vm->pc += off; + vm->pc += offset; } } break; case OP_DISPLAY: { -- cgit v1.2.1