internal/core/adt: apply Default also to list

A closed list with current elements is the default
of an open list.

Change-Id: I2ea041c979219267d486c0c6fbec5ec9b192f771
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/6653
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
diff --git a/internal/core/adt/context.go b/internal/core/adt/context.go
index f54fd72..29ffed5 100644
--- a/internal/core/adt/context.go
+++ b/internal/core/adt/context.go
@@ -558,7 +558,8 @@
 		}
 		// TODO: if the struct was a literal struct, we can also treat it as
 		// closed and make this a permanent error.
-		c.addErrf(code, pos, "undefined field %s", l.SelectorString(c.Runtime))
+		label := l.SelectorString(c.Runtime)
+		c.addErrf(code, pos, "undefined field %s", label)
 	}
 	return a
 }
diff --git a/internal/core/adt/default.go b/internal/core/adt/default.go
index ae7ca8e..2dd1ff7 100644
--- a/internal/core/adt/default.go
+++ b/internal/core/adt/default.go
@@ -43,35 +43,45 @@
 
 // Default returns the default value or itself if there is no default.
 func (v *Vertex) Default() *Vertex {
-	d, ok := v.Value.(*Disjunction)
-	if !ok {
-		return v
-	}
-
-	var w *Vertex
-
-	switch d.NumDefaults {
-	case 0:
-		return v
-	case 1:
-		w = d.Values[0]
+	switch d := v.Value.(type) {
 	default:
-		x := *v
-		x.Value = &Disjunction{
-			Src:         d.Src,
-			Values:      d.Values[:d.NumDefaults],
-			NumDefaults: 0,
-		}
-		w = &x
-	}
+		return v
 
-	w.Conjuncts = nil
-	for _, c := range v.Conjuncts {
-		// TODO: preserve field information.
-		expr, _ := stripNonDefaults(c.Expr())
-		w.AddConjunct(MakeConjunct(c.Env, expr))
+	case *Disjunction:
+		var w *Vertex
+
+		switch d.NumDefaults {
+		case 0:
+			return v
+		case 1:
+			w = d.Values[0]
+		default:
+			x := *v
+			x.Value = &Disjunction{
+				Src:         d.Src,
+				Values:      d.Values[:d.NumDefaults],
+				NumDefaults: 0,
+			}
+			w = &x
+		}
+
+		w.Conjuncts = nil
+		for _, c := range v.Conjuncts {
+			// TODO: preserve field information.
+			expr, _ := stripNonDefaults(c.Expr())
+			w.Conjuncts = append(w.Conjuncts, MakeConjunct(c.Env, expr))
+		}
+		return w
+
+	case *ListMarker:
+		m := *d
+		m.IsOpen = false
+
+		w := *v
+		w.Closed = nil
+		w.Value = &m
+		return &w
 	}
-	return w
 }
 
 // TODO: this should go: record preexpanded disjunctions in Vertex.