fix(tvix/eval): catchable-aware builtins

A bunch of operations in Tvix are not aware of catchable values
and does not propagate them.

In the meantime, as we wait for a better solution, we just offer this
commit for moving the needle.

Change-Id: Ic3f0e1550126b0847b597dfc1402c35e0eeef469
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10473
Tested-by: BuildkiteCI
Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
Ryan Lahfa 2023-12-30 03:21:45 +01:00 committed by raitobezarius
parent 37cc88897e
commit 2750e1e640
6 changed files with 328 additions and 41 deletions

View file

@ -589,16 +589,19 @@ impl Value {
.context("comparing derivations")?
.clone();
let result = out1
.clone()
.force(co, span.clone())
.await?
.to_contextful_str()?
== out2
.clone()
.force(co, span.clone())
.await?
.to_contextful_str()?;
let out1 = out1.clone().force(co, span.clone()).await?;
let out2 = out2.clone().force(co, span.clone()).await?;
if out1.is_catchable() {
return Ok(out1);
}
if out2.is_catchable() {
return Ok(out2);
}
let result =
out1.to_contextful_str()? == out2.to_contextful_str()?;
if !result {
return Ok(Value::Bool(false));
} else {