about summary refs log tree commit diff
path: root/tvix/eval/src/value/mod.rs
diff options
context:
space:
mode:
authorGriffin Smith <root@gws.fyi>2022-10-08T18·48-0400
committergrfn <grfn@gws.fyi>2022-10-08T19·02+0000
commitf6bcd11cad1e370deb0580ae1a7f4d050cd75bab (patch)
tree795a5f3a57916147cd4916ce0749ae431375511f /tvix/eval/src/value/mod.rs
parent167718614429322655fa352d20c754612da8d1a8 (diff)
fix(tvix/eval): Force thunks when comparing against ground vals r/5066
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
Diffstat (limited to 'tvix/eval/src/value/mod.rs')
-rw-r--r--tvix/eval/src/value/mod.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/tvix/eval/src/value/mod.rs b/tvix/eval/src/value/mod.rs
index de59691f278f..e6a6052c21dd 100644
--- a/tvix/eval/src/value/mod.rs
+++ b/tvix/eval/src/value/mod.rs
@@ -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.