diff options
Diffstat (limited to 'src/bytecode/vm.h')
-rwxr-xr-x | src/bytecode/vm.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/bytecode/vm.h b/src/bytecode/vm.h index 4ff9743..a02bdd1 100755 --- a/src/bytecode/vm.h +++ b/src/bytecode/vm.h | |||
@@ -189,7 +189,10 @@ vm_interpret(VM *vm) { | |||
189 | array_push(vm->stack, frame->closure->values[idx]); | 189 | array_push(vm->stack, frame->closure->values[idx]); |
190 | } break; | 190 | } break; |
191 | case OP_CAPTURE_LOCAL: { | 191 | case OP_CAPTURE_LOCAL: { |
192 | // This is a closure with captured variables. We need a copy | ||
193 | // of it that lives on the heap. | ||
192 | Object proc = array_pop(vm->stack); | 194 | Object proc = array_pop(vm->stack); |
195 | proc = make_lambda(proc.closure->chunk); | ||
193 | ssize_t n_captured = AS_FIXNUM(array_pop(vm->stack)); | 196 | ssize_t n_captured = AS_FIXNUM(array_pop(vm->stack)); |
194 | for (ssize_t i = 0; i < n_captured; i++) { | 197 | for (ssize_t i = 0; i < n_captured; i++) { |
195 | Object value = array_pop(vm->stack); | 198 | Object value = array_pop(vm->stack); |