cue: fix bug in Default

Change-Id: I5b3ec0c3e99029bdd86d5b70201182159f686953
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2040
Reviewed-by: Marcel van Lohuizen <mpvl@google.com>
diff --git a/cue/types.go b/cue/types.go
index a44aa61..1df3477 100644
--- a/cue/types.go
+++ b/cue/types.go
@@ -526,8 +526,9 @@
 	if v.path == nil {
 		return v, false
 	}
-	x := v.ctx().manifest(v.path.v)
-	if x != v.path.v {
+	u := v.path.v.evalPartial(v.ctx())
+	x := v.ctx().manifest(u)
+	if x != u {
 		return remakeValue(v, x), true
 	}
 	return v, false
diff --git a/cue/types_test.go b/cue/types_test.go
index 36e6acc..dbabb38 100644
--- a/cue/types_test.go
+++ b/cue/types_test.go
@@ -683,31 +683,45 @@
 		value string
 		def   string
 		val   string
-		err   string
+		ok    bool
 	}{{
 		value: `number | *1`,
 		def:   "1",
 		val:   "number",
+		ok:    true,
 	}, {
 		value: `1 | 2 | *3`,
 		def:   "3",
 		val:   "1|2|3",
+		ok:    true,
 	}, {
 		value: `*{a:1,b:2}|{a:1}|{b:2}`,
 		def:   "<0>{a: 1, b: 2}",
 		val:   "<0>{a: 1}|<0>{b: 2}",
+		ok:    true,
+	}, {
+		value: `{a:1}&{b:2}`,
+		def:   `<0>{a: 1, b: 2}`,
+		val:   ``,
+		ok:    false,
 	}}
 	for _, tc := range testCases {
 		t.Run(tc.value, func(t *testing.T) {
 			v := getInstance(t, "a: "+tc.value).Lookup("a")
 
-			_, val := v.Expr()
-			d, _ := v.Default()
+			d, ok := v.Default()
+			if ok != tc.ok {
+				t.Errorf("hasDefault: got %v; want %v", ok, tc.ok)
+			}
 
 			if got := fmt.Sprint(d); got != tc.def {
 				t.Errorf("default: got %v; want %v", got, tc.def)
 			}
 
+			op, val := v.Expr()
+			if op != OrOp {
+				return
+			}
 			vars := []string{}
 			for _, v := range val {
 				vars = append(vars, fmt.Sprint(v))