about summary refs log tree commit diff
path: root/tvix/eval/src/compiler
diff options
context:
space:
mode:
authorAspen Smith <root@gws.fyi>2024-01-31T15·19-0500
committeraspen <root@gws.fyi>2024-02-01T17·25+0000
commitd3d41552cf1f6485f8ebc597a2128a0d15b030a5 (patch)
treebc264d6e18f61768fcde06f53a1c8d558e1bea67 /tvix/eval/src/compiler
parent201173afaca7d70aa039a1e37a91c49af3a99b0b (diff)
refactor(tvix/eval): Don't double-box Path values r/7461
PathBuf internally contains a heap pointer (an OsString), so we were in
effect double-boxing here. Removing the extra layer by making
Tvix::Value represented by a Box<Path> rather than a Box<PathBuf> saves
us an indirection, while still avoiding the extra memory overhead of the
capacity which was the reason we were boxing PathBuf in the first place.

Change-Id: I8c185b9d4646161d1921917f83e87421496a3e24
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10725
Reviewed-by: sterni <sternenseemann@systemli.org>
Autosubmit: aspen <root@gws.fyi>
Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/eval/src/compiler')
-rw-r--r--tvix/eval/src/compiler/mod.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/tvix/eval/src/compiler/mod.rs b/tvix/eval/src/compiler/mod.rs
index b4ef7973c7..60f5666ea9 100644
--- a/tvix/eval/src/compiler/mod.rs
+++ b/tvix/eval/src/compiler/mod.rs
@@ -390,7 +390,7 @@ impl Compiler<'_> {
 
             let home_relative_path = &raw_path[2..(raw_path.len())];
             self.emit_constant(
-                Value::UnresolvedPath(Box::new(home_relative_path.into())),
+                Value::UnresolvedPath(PathBuf::from(home_relative_path).into_boxed_path()),
                 node,
             );
             self.push_op(OpCode::OpResolveHomePath, node);
@@ -408,7 +408,10 @@ impl Compiler<'_> {
             let path = &raw_path[1..(raw_path.len() - 1)];
             // Make a thunk to resolve the path (without using `findFile`, at least for now?)
             return self.thunk(slot, node, move |c, _| {
-                c.emit_constant(Value::UnresolvedPath(Box::new(path.into())), node);
+                c.emit_constant(
+                    Value::UnresolvedPath(PathBuf::from(path).into_boxed_path()),
+                    node,
+                );
                 c.push_op(OpCode::OpFindFile, node);
             });
         } else {
@@ -419,7 +422,7 @@ impl Compiler<'_> {
 
         // TODO: Use https://github.com/rust-lang/rfcs/issues/2208
         // once it is available
-        let value = Value::Path(Box::new(crate::value::canon_path(path)));
+        let value = Value::Path(crate::value::canon_path(path).into_boxed_path());
         self.emit_constant(value, node);
     }