about summary refs log tree commit diff
path: root/tvix/eval/src/compiler.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tvix/eval/src/compiler.rs')
-rw-r--r--tvix/eval/src/compiler.rs13
1 files changed, 7 insertions, 6 deletions
diff --git a/tvix/eval/src/compiler.rs b/tvix/eval/src/compiler.rs
index 7ccb00432782..167ac731d68c 100644
--- a/tvix/eval/src/compiler.rs
+++ b/tvix/eval/src/compiler.rs
@@ -21,14 +21,14 @@ use std::path::{Path, PathBuf};
 use crate::chunk::Chunk;
 use crate::errors::{Error, ErrorKind, EvalResult};
 use crate::opcode::{CodeIdx, OpCode};
-use crate::value::Value;
+use crate::value::{Lambda, Value};
 use crate::warnings::{EvalWarning, WarningKind};
 
 /// Represents the result of compiling a piece of Nix code. If
 /// compilation was successful, the resulting bytecode can be passed
 /// to the VM.
 pub struct CompilationResult {
-    pub chunk: Chunk,
+    pub lambda: Lambda,
     pub warnings: Vec<EvalWarning>,
     pub errors: Vec<Error>,
 }
@@ -90,7 +90,7 @@ struct Scope {
 }
 
 struct Compiler {
-    chunk: Chunk,
+    lambda: Lambda,
     scope: Scope,
 
     warnings: Vec<EvalWarning>,
@@ -102,7 +102,8 @@ struct Compiler {
 // structures of the compiler.
 impl Compiler {
     fn chunk(&mut self) -> &mut Chunk {
-        &mut self.chunk
+        std::rc::Rc::<Chunk>::get_mut(self.lambda.chunk())
+            .expect("compiler flaw: long-lived chunk reference")
     }
 
     fn emit_constant(&mut self, value: Value) {
@@ -910,7 +911,7 @@ pub fn compile(expr: ast::Expr, location: Option<PathBuf>) -> EvalResult<Compila
 
     let mut c = Compiler {
         root_dir,
-        chunk: Chunk::default(),
+        lambda: Lambda::new_anonymous(),
         warnings: vec![],
         errors: vec![],
         scope: Default::default(),
@@ -919,7 +920,7 @@ pub fn compile(expr: ast::Expr, location: Option<PathBuf>) -> EvalResult<Compila
     c.compile(expr);
 
     Ok(CompilationResult {
-        chunk: c.chunk,
+        lambda: c.lambda,
         warnings: c.warnings,
         errors: c.errors,
     })