about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tvix/eval/src/builtins/impure.rs10
-rw-r--r--tvix/eval/src/lib.rs5
2 files changed, 5 insertions, 10 deletions
diff --git a/tvix/eval/src/builtins/impure.rs b/tvix/eval/src/builtins/impure.rs
index afc85d4c1b40..80736708118c 100644
--- a/tvix/eval/src/builtins/impure.rs
+++ b/tvix/eval/src/builtins/impure.rs
@@ -66,16 +66,6 @@ mod impure_builtins {
 pub fn impure_builtins() -> Vec<(&'static str, Value)> {
     let mut result = impure_builtins::builtins();
 
-    result.push((
-        "storeDir",
-        Value::Thunk(Thunk::new_suspended_native(Box::new(
-            |vm: &mut VM| match vm.io().store_dir() {
-                None => Ok(Value::Null),
-                Some(dir) => Ok(Value::String(dir.into())),
-            },
-        ))),
-    ));
-
     // currentTime pins the time at which evaluation was started
     {
         let seconds = match SystemTime::now().duration_since(UNIX_EPOCH) {
diff --git a/tvix/eval/src/lib.rs b/tvix/eval/src/lib.rs
index 98440975646b..a8e3d70f2e30 100644
--- a/tvix/eval/src/lib.rs
+++ b/tvix/eval/src/lib.rs
@@ -219,6 +219,11 @@ impl<'code, 'co, 'ro> Evaluation<'code, 'co, 'ro> {
         let mut noop_observer = observer::NoOpObserver::default();
         let compiler_observer = self.compiler_observer.take().unwrap_or(&mut noop_observer);
 
+        // Insert a storeDir builtin *iff* a store directory is present.
+        if let Some(store_dir) = self.io_handle.store_dir() {
+            self.builtins.push(("storeDir", store_dir.into()));
+        }
+
         let (lambda, globals) = match parse_compile_internal(
             &mut result,
             self.code,