diff options
Diffstat (limited to 'src/bytecode/vm.h')
-rwxr-xr-x | src/bytecode/vm.h | 7 |
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)); |