fix(tvix/eval): Force thunks when comparing against ground vals

Thunks correctly force when comparing for equality against other thunks,
but weren't being forced correctly when comparing against non-thunk
values, in either direction.

Change-Id: Ia03702895ec4d70aed3445c1b0a9a7a641d1a300
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6897
Autosubmit: grfn <grfn@gws.fyi>
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
This commit is contained in:
Griffin Smith 2022-10-08 14:48:48 -04:00 committed by grfn
parent 1677186144
commit f6bcd11cad
3 changed files with 13 additions and 3 deletions

View file

@ -1 +1 @@
[ true true false ]
[ true true false true true ]

View file

@ -4,8 +4,12 @@ let
list1 = [ (1 + 2) ];
list2 = [ (2 + 1) ];
list3 = [ (2 + 2) ];
list4 = [ (2 + 2) ];
list5 = [ (2 + 2) ];
in [
(attrs1 == attrs2)
(list1 == list2)
(list3 == list2)
(list4 == [ 4 ])
([ 4 ] == list5)
]

View file

@ -288,8 +288,14 @@ impl Value {
Ok(*lhs.value() == *rhs.value())
}
(Value::Thunk(lhs), rhs) => Ok(&*lhs.value() == rhs),
(lhs, Value::Thunk(rhs)) => Ok(lhs == &*rhs.value()),
(Value::Thunk(lhs), rhs) => {
lhs.force(vm)?;
Ok(&*lhs.value() == rhs)
}
(lhs, Value::Thunk(rhs)) => {
rhs.force(vm)?;
Ok(lhs == &*rhs.value())
}
// Everything else is either incomparable (e.g. internal
// types) or false.