aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode/vm.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-24 16:47:15 +0200
committerBad Diode <bd@badd10de.dev>2021-10-24 16:47:15 +0200
commitabdcae0f839d0bd772c5f7211cb1cb2034355b62 (patch)
treeee3b8c8811a1383cfb453b5638acc20997876a4c /src/bytecode/vm.h
parentdd5210368634e2b322435385eaaaccaa5125b5a9 (diff)
downloadbdl-abdcae0f839d0bd772c5f7211cb1cb2034355b62.tar.gz
bdl-abdcae0f839d0bd772c5f7211cb1cb2034355b62.zip
Cleanup IF jump code in compiler
Diffstat (limited to 'src/bytecode/vm.h')
-rwxr-xr-xsrc/bytecode/vm.h12
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: {