diff options
Diffstat (limited to 'tvix/eval/src/compiler')
-rw-r--r-- | tvix/eval/src/compiler/mod.rs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/tvix/eval/src/compiler/mod.rs b/tvix/eval/src/compiler/mod.rs index 78fe76ca01a9..0d2ed66f5bf5 100644 --- a/tvix/eval/src/compiler/mod.rs +++ b/tvix/eval/src/compiler/mod.rs @@ -805,16 +805,17 @@ impl Compiler { // If the function is not a closure, just emit it directly and // move on. if compiled.lambda.upvalue_count == 0 { - self.emit_constant(Value::Closure(Closure::new(compiled.lambda))); + self.emit_constant(Value::Closure(Closure::new(Rc::new(compiled.lambda)))); return; } // If the function is a closure, we need to emit the variable // number of operands that allow the runtime to close over the - // upvalues. + // upvalues and leave a blueprint in the constant index from + // which the runtime closure can be constructed. let closure_idx = self .chunk() - .push_constant(Value::Closure(Closure::new(compiled.lambda))); + .push_constant(Value::Blueprint(Rc::new(compiled.lambda))); self.chunk().push_op(OpCode::OpClosure(closure_idx)); for upvalue in compiled.scope.upvalues { |