aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode/vm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bytecode/vm.h')
-rwxr-xr-xsrc/bytecode/vm.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/bytecode/vm.h b/src/bytecode/vm.h
index f1c525d..4ff9743 100755
--- a/src/bytecode/vm.h
+++ b/src/bytecode/vm.h
@@ -191,12 +191,17 @@ vm_interpret(VM *vm) {
191 case OP_CAPTURE_LOCAL: { 191 case OP_CAPTURE_LOCAL: {
192 Object proc = array_pop(vm->stack); 192 Object proc = array_pop(vm->stack);
193 ssize_t n_captured = AS_FIXNUM(array_pop(vm->stack)); 193 ssize_t n_captured = AS_FIXNUM(array_pop(vm->stack));
194 for (size_t i = 0; i < n_captured; i++) { 194 for (ssize_t i = 0; i < n_captured; i++) {
195 Object value = array_pop(vm->stack); 195 Object value = array_pop(vm->stack);
196 array_push(proc.closure->values, value); 196 array_push(proc.closure->values, value);
197 } 197 }
198 array_push(vm->stack, proc); 198 array_push(vm->stack, proc);
199 } break; 199 } break;
200 case OP_SET_CAPTURED: {
201 Object value = array_pop(vm->stack);
202 ssize_t idx = AS_FIXNUM(array_pop(vm->stack));
203 frame->closure->values[idx] = value;
204 } break;
200 case OP_DEF_LOCAL: { 205 case OP_DEF_LOCAL: {
201 Object value = array_pop(vm->stack); 206 Object value = array_pop(vm->stack);
202 ssize_t idx = AS_FIXNUM(array_pop(vm->stack)); 207 ssize_t idx = AS_FIXNUM(array_pop(vm->stack));