diff options
Diffstat (limited to 'src/bytecode')
-rwxr-xr-x | src/bytecode/compiler.h | 1 | ||||
-rwxr-xr-x | src/bytecode/vm.h | 3 |
2 files changed, 3 insertions, 1 deletions
diff --git a/src/bytecode/compiler.h b/src/bytecode/compiler.h index bc39d47..867d194 100755 --- a/src/bytecode/compiler.h +++ b/src/bytecode/compiler.h | |||
@@ -481,7 +481,6 @@ compile_lambda(Chunk *chunk, Compiler *compiler, Token start, StringView name) { | |||
481 | compiler->scope_depth--; | 481 | compiler->scope_depth--; |
482 | for (size_t i = 0; i < n_captured; i++) { | 482 | for (size_t i = 0; i < n_captured; i++) { |
483 | Token tok = scope->captured[i]; | 483 | Token tok = scope->captured[i]; |
484 | print_token(tok); | ||
485 | parse_symbol(chunk, compiler, tok); | 484 | parse_symbol(chunk, compiler, tok); |
486 | } | 485 | } |
487 | // Number of captured values. | 486 | // Number of captured values. |
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); |