diff options
Diffstat (limited to 'src/bytecode/vm.h')
-rwxr-xr-x | src/bytecode/vm.h | 12 |
1 files changed, 8 insertions, 4 deletions
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) { | |||
197 | case OP_LESS_EQUAL: { FIXNUM_COMPARE_OP(<=); } break; | 197 | case OP_LESS_EQUAL: { FIXNUM_COMPARE_OP(<=); } break; |
198 | case OP_GREATER_EQUAL: { FIXNUM_COMPARE_OP(>=); } break; | 198 | case OP_GREATER_EQUAL: { FIXNUM_COMPARE_OP(>=); } break; |
199 | case OP_JUMP: { | 199 | case OP_JUMP: { |
200 | ssize_t off = AS_FIXNUM(array_pop(vm->stack)); | 200 | u16 a = *vm->pc++; |
201 | vm->pc += off; | 201 | u16 b = *vm->pc++; |
202 | u16 offset = (a << 8) | b; | ||
203 | vm->pc += offset; | ||
202 | } break; | 204 | } break; |
203 | case OP_JUMP_IF_FALSE: { | 205 | case OP_JUMP_IF_FALSE: { |
204 | ssize_t off = AS_FIXNUM(array_pop(vm->stack)); | 206 | u16 a = *vm->pc++; |
207 | u16 b = *vm->pc++; | ||
208 | u16 offset = (a << 8) | b; | ||
205 | if (IS_FALSE(array_pop(vm->stack))) { | 209 | if (IS_FALSE(array_pop(vm->stack))) { |
206 | vm->pc += off; | 210 | vm->pc += offset; |
207 | } | 211 | } |
208 | } break; | 212 | } break; |
209 | case OP_DISPLAY: { | 213 | case OP_DISPLAY: { |