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) {