fix(tvix/eval): add operation to assert boolean type

This operation is required because both sides of the logical operators
are strictly evaluated by Nix, even if the resulting value is not used
further.

For example, in our implementation of `&&`, if the left-hand side is
`true`, then the result of the expression is simply the right-hand
side value. This value must be asserted to be a boolean for the
semantics of the language to work correctly.

Change-Id: I34f5364f2a444753fa1d8b0a1a2b2d9cdf7c6700
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6157
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
Vincent Ambo 2022-08-11 14:56:27 +03:00 committed by tazjin
parent aaa994137a
commit 671915837a
4 changed files with 24 additions and 0 deletions

View file

@ -91,6 +91,10 @@ impl Value {
}),
}
}
pub fn is_bool(&self) -> bool {
matches!(self, Value::Bool(_))
}
}
impl Display for Value {