diff options
author | Bad Diode <bd@badd10de.dev> | 2021-10-24 16:47:15 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-10-24 16:47:15 +0200 |
commit | abdcae0f839d0bd772c5f7211cb1cb2034355b62 (patch) | |
tree | ee3b8c8811a1383cfb453b5638acc20997876a4c /src/bytecode/vm.h | |
parent | dd5210368634e2b322435385eaaaccaa5125b5a9 (diff) | |
download | bdl-abdcae0f839d0bd772c5f7211cb1cb2034355b62.tar.gz bdl-abdcae0f839d0bd772c5f7211cb1cb2034355b62.zip |
Cleanup IF jump code in compiler
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: { |