cue/parser: allow ... anywhere in struct
This fixes a current deviation from the spec.
Change-Id: I1c070cf969c5023573a7f5778665beb42c21c4cb
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/7221
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cue/parser/parser.go b/cue/parser/parser.go
index 2e24158..92143f1 100644
--- a/cue/parser/parser.go
+++ b/cue/parser/parser.go
@@ -709,12 +709,19 @@
p.openList()
defer p.closeList()
- for p.tok != token.RBRACE && p.tok != token.ELLIPSIS && p.tok != token.EOF {
+ for p.tok != token.RBRACE && p.tok != token.EOF {
switch p.tok {
case token.ATTRIBUTE:
list = append(list, p.parseAttribute())
p.consumeDeclComma()
+ case token.ELLIPSIS:
+ c := p.openComments()
+ ellipsis := &ast.Ellipsis{Ellipsis: p.pos}
+ p.next()
+ c.closeNode(p, ellipsis)
+ list = append(list, ellipsis)
+
default:
list = append(list, p.parseField())
}
@@ -732,13 +739,6 @@
}
}
- if p.tok == token.ELLIPSIS {
- c := p.openComments()
- ellipsis := &ast.Ellipsis{Ellipsis: p.pos}
- p.next()
- c.closeNode(p, ellipsis)
- list = append(list, ellipsis)
- }
return
}
diff --git a/cue/parser/parser_test.go b/cue/parser/parser_test.go
index 6ec737d..15b1646 100644
--- a/cue/parser/parser_test.go
+++ b/cue/parser/parser_test.go
@@ -118,22 +118,27 @@
`{V1, V2}`,
}, {
"expression embedding",
- `Def :: {
+ `#Def: {
a.b.c
a > b < c
-1<2
foo: 2
}`,
- `Def :: {a.b.c, a>b<c, -1<2, foo: 2}`,
+ `#Def: {a.b.c, a>b<c, -1<2, foo: 2}`,
}, {
"ellipsis in structs",
- `Def :: {
+ `#Def: {
b: "2"
...
}
+
+ #Def2: {
+ ...
+ b: "2"
+ }
`,
- `Def :: {b: "2", ...}`,
+ `#Def: {b: "2", ...}, #Def2: {..., b: "2"}`,
}, {
"emitted referencing non-emitted",
`a: 1