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}