aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode/vm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bytecode/vm.h')
-rwxr-xr-xsrc/bytecode/vm.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/bytecode/vm.h b/src/bytecode/vm.h
index a02bdd1..0d1595d 100755
--- a/src/bytecode/vm.h
+++ b/src/bytecode/vm.h
@@ -193,6 +193,7 @@ vm_interpret(VM *vm) {
193 // of it that lives on the heap. 193 // of it that lives on the heap.
194 Object proc = array_pop(vm->stack); 194 Object proc = array_pop(vm->stack);
195 proc = make_lambda(proc.closure->chunk); 195 proc = make_lambda(proc.closure->chunk);
196
196 ssize_t n_captured = AS_FIXNUM(array_pop(vm->stack)); 197 ssize_t n_captured = AS_FIXNUM(array_pop(vm->stack));
197 for (ssize_t i = 0; i < n_captured; i++) { 198 for (ssize_t i = 0; i < n_captured; i++) {
198 Object value = array_pop(vm->stack); 199 Object value = array_pop(vm->stack);
@@ -303,7 +304,7 @@ vm_interpret(VM *vm) {
303 } break; 304 } break;
304 case OP_CALL: { 305 case OP_CALL: {
305 ssize_t n_args = AS_FIXNUM(array_pop(vm->stack)); 306 ssize_t n_args = AS_FIXNUM(array_pop(vm->stack));
306 Object proc = array_pop(vm->stack); 307 Object proc = vm->stack[array_size(vm->stack) - 1 - n_args];
307 308
308 // Check the number of arguments is correct. 309 // Check the number of arguments is correct.
309 // NOTE: This is probably better handled at compilation, but for 310 // NOTE: This is probably better handled at compilation, but for
@@ -363,7 +364,7 @@ vm_interpret(VM *vm) {
363 vm->pc = frame->rp; 364 vm->pc = frame->rp;
364 array_head(vm->frames)->size--; 365 array_head(vm->frames)->size--;
365 Object ret = array_pop(vm->stack); 366 Object ret = array_pop(vm->stack);
366 array_head(vm->stack)->size = frame->stack_offset; 367 array_head(vm->stack)->size = frame->stack_offset - 1;
367 array_push(vm->stack, ret); 368 array_push(vm->stack, ret);
368 frame = &vm->frames[array_size(vm->frames) - 1]; 369 frame = &vm->frames[array_size(vm->frames) - 1];
369 chunk = frame->closure->chunk; 370 chunk = frame->closure->chunk;