about summary refs log tree commit diff
path: root/tvix/eval/src/value
diff options
context:
space:
mode:
authorAdam Joseph <adam@westernsemico.com>2022-10-31T10·35-0700
committerclbot <clbot@tvl.fyi>2022-10-31T12·36+0000
commit9ada456260c0fff256f08a6aa87c436a0027f318 (patch)
tree311ccff4540eb29a254023ddd120437ae512d766 /tvix/eval/src/value
parent98a981a73718d4d1ed190796c862863514c1b102 (diff)
fix(tvix/eval): nix_eq() must recurse r/5226
The current implementation of nix_eq will force one level of thunks
and then switch to the (non-forcing) rust Eq::eq() method.  This
gives incorrect results for lists-of-thunks.

This commit changes nix_eq() to be recursive.

A regression test (which fails prior to this commit) is included.

This fix also causes nix_tests/eval-okay-fromjson.nix to pass, so it
is moved out of notyetpassing.

Change-Id: I655fd7a5294208a7b39df8e2c3c12a8b9768292f
Signed-off-by: Adam Joseph <adam@westernsemico.com>
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7142
Tested-by: BuildkiteCI
Reviewed-by: tazjin <tazjin@tvl.su>
Diffstat (limited to 'tvix/eval/src/value')
-rw-r--r--tvix/eval/src/value/mod.rs6
1 files changed, 3 insertions, 3 deletions
diff --git a/tvix/eval/src/value/mod.rs b/tvix/eval/src/value/mod.rs
index c590495b5344..ff9dccb0b3c2 100644
--- a/tvix/eval/src/value/mod.rs
+++ b/tvix/eval/src/value/mod.rs
@@ -332,15 +332,15 @@ impl Value {
                 lhs.force(vm)?;
                 rhs.force(vm)?;
 
-                Ok(*lhs.value() == *rhs.value())
+                lhs.value().nix_eq(&*rhs.value(), vm)
             }
             (Value::Thunk(lhs), rhs) => {
                 lhs.force(vm)?;
-                Ok(&*lhs.value() == rhs)
+                lhs.value().nix_eq(rhs, vm)
             }
             (lhs, Value::Thunk(rhs)) => {
                 rhs.force(vm)?;
-                Ok(lhs == &*rhs.value())
+                lhs.nix_eq(&*rhs.value(), vm)
             }
 
             // Everything else is either incomparable (e.g. internal