refactor(tvix/eval): Don't double-box Path values

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
This commit is contained in:
Aspen Smith 2024-01-31 10:19:13 -05:00 committed by aspen
parent 201173afac
commit d3d41552cf
6 changed files with 23 additions and 20 deletions

View file

@ -2,7 +2,7 @@
use imbl::proptest::{ord_map, vector};
use proptest::{prelude::*, strategy::BoxedStrategy};
use std::ffi::OsString;
use std::{ffi::OsString, path::PathBuf};
use super::{attrs::AttrsRep, NixAttrs, NixList, NixString, Value};
@ -92,7 +92,7 @@ fn leaf_value() -> impl Strategy<Value = Value> {
any::<i64>().prop_map(Integer),
any::<f64>().prop_map(Float),
any::<NixString>().prop_map(String),
any::<OsString>().prop_map(|s| Path(Box::new(s.into()))),
any::<OsString>().prop_map(|s| Path(PathBuf::from(s).into_boxed_path())),
]
}