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
|
|
@ -1 +1 @@
|
|||
[ "1" ]
|
||||
[ "1" "4.200000" "" "" "1" "foo" "/etc" "Hello World" "Hello World" "1" "out" "2" "1 4.200000 1 foo /etc Hello World Hello World 1 out 2" ]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,23 @@
|
|||
# TODO: add some examples for the "weird" types
|
||||
[
|
||||
(toString 1)
|
||||
# TODO: floats must be padded to 6 digits
|
||||
# (toString 4.2)
|
||||
]
|
||||
let
|
||||
toStringableSet = {
|
||||
__toString = self: self.content;
|
||||
content = "Hello World";
|
||||
};
|
||||
|
||||
toStringExamples = [
|
||||
(toString 1)
|
||||
(toString 4.2)
|
||||
(toString null)
|
||||
(toString false)
|
||||
(toString true)
|
||||
(toString "foo")
|
||||
(toString /etc)
|
||||
(toString toStringableSet)
|
||||
(toString { __toString = _: toStringableSet; })
|
||||
(toString { __toString = _: true; })
|
||||
(toString { outPath = "out"; })
|
||||
(toString { outPath = { outPath = { __toString = _: 2; }; }; })
|
||||
];
|
||||
in
|
||||
|
||||
toStringExamples ++ [ (toString toStringExamples) ]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue