cue: fix error message for empty disjunction

There is a lot to be improved regarding error messages,
still, but at least it is better than it was before.

Fixes #23.

Change-Id: I628631caafe291ae516c2f5add0f362c1d8858a8
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/1760
Reviewed-by: Marcel van Lohuizen <mpvl@google.com>
diff --git a/cue/resolve_test.go b/cue/resolve_test.go
index ee120cf..f438981 100644
--- a/cue/resolve_test.go
+++ b/cue/resolve_test.go
@@ -1808,6 +1808,13 @@
 			`fib2: 1, ` +
 			`fib7: 13, ` +
 			`fib12: 144}`,
+	}, {
+		desc: "Issue #23",
+		in: `
+			x: {a:1}|{a:2}
+			y: x & {a:3}
+		`,
+		out: `<3>{x: _|_((<0>{a: 1} | <1>{a: 2}):more than one element remaining (<0>{a: 1} and <1>{a: 2})), y: _|_((<4>.x & <5>{a: 3}):empty disjunction: <2>{a: (1 & 3)})}`,
 	}}
 	rewriteHelper(t, testCases, evalFull)
 }
diff --git a/cue/value.go b/cue/value.go
index 5c432b1..d39a875 100644
--- a/cue/value.go
+++ b/cue/value.go
@@ -1070,8 +1070,11 @@
 	case 0:
 		// Empty disjunction. All elements must be errors.
 		// Take the first error as an example.
-		str := fmt.Sprintf("empty disjunction: %v", x.values[0].val)
-		return mVal{ctx.mkErr(src, str), false}
+		err := x.values[0].val
+		if !isBottom(err) {
+			err = ctx.mkErr(src, debugStr(ctx, err))
+		}
+		return mVal{ctx.mkErr(src, "empty disjunction: %v", err), false}
 	case 1:
 		v := x.values[0]
 		return mVal{v.val.(evaluated), v.marked}