internal/core/eval: fully evaluate nested unification
Fixes #549
Change-Id: Id455f319d0f09b6b279d80780d549a635259a26e
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/7341
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cue/testdata/basicrewrite/000_errors.txtar b/cue/testdata/basicrewrite/000_errors.txtar
index 94d0545..54a0b02 100644
--- a/cue/testdata/basicrewrite/000_errors.txtar
+++ b/cue/testdata/basicrewrite/000_errors.txtar
@@ -8,6 +8,8 @@
c: b.a == _|_
d: _|_ != b.a
e: _|_ == _|_
+f: ({} & false) == _|_
+g: _|_ != ({} & false)
-- out/def --
a: _|_ // explicit error (_|_ literal) in source
b: _|_ // explicit error (_|_ literal) in source
@@ -24,6 +26,8 @@
c: (ă0;bă.a == _|_(explicit error (_|_ literal) in source))
d: (_|_(explicit error (_|_ literal) in source) != ă0;bă.a)
e: (_|_(explicit error (_|_ literal) in source) == _|_(explicit error (_|_ literal) in source))
+ f: (({} & false) == _|_(explicit error (_|_ literal) in source))
+ g: (_|_(explicit error (_|_ literal) in source) != ({} & false))
}
-- out/eval --
Errors:
@@ -46,4 +50,6 @@
c: (bool){ true }
d: (bool){ false }
e: (bool){ true }
+ f: (bool){ true }
+ g: (bool){ false }
}
diff --git a/internal/core/adt/expr.go b/internal/core/adt/expr.go
index ff1b2de..5ad3380 100644
--- a/internal/core/adt/expr.go
+++ b/internal/core/adt/expr.go
@@ -830,8 +830,9 @@
env := c.Env(0)
if x.Op == AndOp {
// Anonymous Arc
- v := Vertex{Conjuncts: []Conjunct{{env, x, 0}}}
- return c.Unifier.Evaluate(c, &v)
+ v := &Vertex{Conjuncts: []Conjunct{{env, x, 0}}}
+ c.Unifier.Unify(c, v, Finalized)
+ return v
}
if !c.concreteIsPossible(x.X) || !c.concreteIsPossible(x.Y) {