feat(tvix/eval): implement correct toString behavior
Implement C++ Nix's `EvalState::coerceToString` minus some of the Path / store handling. This is currently only used for `toString` which does all possible coercions, but we've already prepared the weaker coercion variant which is e.g. used for builtins that expect string arguments. `EvalState::coerceToPath` is still missing for builtins that need a path, but it'll be easy to build on top of this. Change-Id: I78d15576b18921791d04b6b1e964b951fdef22c6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6571 Autosubmit: sterni <sternenseemann@systemli.org> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
This commit is contained in:
parent
16da548f93
commit
da1d71a4e8
6 changed files with 196 additions and 14 deletions
|
|
@ -10,7 +10,7 @@ use std::{
|
|||
|
||||
use crate::{
|
||||
errors::ErrorKind,
|
||||
value::{Builtin, NixAttrs, NixList, NixString, Value},
|
||||
value::{Builtin, CoercionKind, NixAttrs, NixList, NixString, Value},
|
||||
};
|
||||
|
||||
use crate::arithmetic_op;
|
||||
|
|
@ -121,9 +121,9 @@ fn pure_builtins() -> Vec<Builtin> {
|
|||
));
|
||||
}),
|
||||
Builtin::new("toString", 1, |args, vm| {
|
||||
force!(vm, &args[0], value, {
|
||||
Ok(Value::String(format!("{}", value).into()))
|
||||
})
|
||||
args[0]
|
||||
.coerce_to_string(CoercionKind::Strong, vm)
|
||||
.map(|s| Value::String(s))
|
||||
}),
|
||||
Builtin::new("typeOf", 1, |args, vm| {
|
||||
force!(vm, &args[0], value, {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue