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.rs16
1 files changed, 6 insertions, 10 deletions
diff --git a/tvix/eval/src/compiler.rs b/tvix/eval/src/compiler.rs
index 63a02f68c0..c840056b48 100644
--- a/tvix/eval/src/compiler.rs
+++ b/tvix/eval/src/compiler.rs
@@ -13,6 +13,9 @@
 //! the code in this module, `debug_assert!` has been used to catch
 //! mistakes early during development.
 
+use path_clean::PathClean;
+use rnix;
+use rnix::types::{BinOpKind, EntryHolder, TokenWrapper, TypedNode, Wrapper};
 use std::path::{Path, PathBuf};
 
 use crate::chunk::Chunk;
@@ -21,9 +24,6 @@ use crate::opcode::{CodeIdx, OpCode};
 use crate::value::Value;
 use crate::warnings::{EvalWarning, WarningKind};
 
-use rnix;
-use rnix::types::{BinOpKind, EntryHolder, TokenWrapper, TypedNode, Wrapper};
-
 /// Represents the result of compiling a piece of Nix code. If
 /// compilation was successful, the resulting bytecode can be passed
 /// to the VM.
@@ -162,8 +162,6 @@ impl Compiler {
     }
 
     fn compile_path(&mut self, anchor: rnix::value::Anchor, path: String) -> EvalResult<()> {
-        // TODO(tazjin): C++ Nix does not resolve symlinks, but `fs::canonicalize` does.
-
         let path = match anchor {
             rnix::value::Anchor::Absolute => Path::new(&path).to_owned(),
 
@@ -189,11 +187,9 @@ impl Compiler {
             rnix::value::Anchor::Store => todo!("resolve <...> lookups at runtime"),
         };
 
-        let value =
-            Value::Path(path.canonicalize().map_err(|e| {
-                Error::PathResolution(format!("failed to canonicalise path: {}", e))
-            })?);
-
+        // TODO: Use https://github.com/rust-lang/rfcs/issues/2208
+        // once it is available
+        let value = Value::Path(path.clean());
         let idx = self.chunk.push_constant(value);
         self.chunk.push_op(OpCode::OpConstant(idx));