feat(tvix/eval): implement Value::coerce_to_path()

This function is necessary for all builtins that expect some form of
path as an argument. It is merely a wrapper around coerce_to_string that
can shortcut if we already have a path. The absolute path check is done
in the same way as in C++ Nix for compatibility, although it should
probably be revised in the long term (think about Windows, for example).

Since coercing to a path is not an operation possible in the language
directly, this function can live in the builtins module as the only
place it is required.

Change-Id: I69ed5455c00d193fea88b8fa83e28907a761cab5
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6574
Autosubmit: sterni <sternenseemann@systemli.org>
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
This commit is contained in:
sterni 2022-09-13 20:11:07 +02:00 committed by clbot
parent e834a2cbc4
commit 067f2b16f6
4 changed files with 48 additions and 1 deletions

View file

@ -101,6 +101,8 @@ impl Value {
kind: CoercionKind,
vm: &mut VM,
) -> Result<NixString, ErrorKind> {
// TODO: eventually, this will need to handle string context and importing
// files into the Nix store depending on what context the coercion happens in
if let Value::Thunk(t) = self {
t.force(vm)?;
}