diff options
author | Adam Joseph <adam@westernsemico.com> | 2022-10-31T10·35-0700 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2022-10-31T12·36+0000 |
commit | 9ada456260c0fff256f08a6aa87c436a0027f318 (patch) | |
tree | 311ccff4540eb29a254023ddd120437ae512d766 /tvix/eval/src/value | |
parent | 98a981a73718d4d1ed190796c862863514c1b102 (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.rs | 6 |
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 |