diff --git a/cue/ast/ast.go b/cue/ast/ast.go
index 91c9dcb..a468a8a 100644
--- a/cue/ast/ast.go
+++ b/cue/ast/ast.go
@@ -57,7 +57,6 @@
 
 func (*BadExpr) exprNode()       {}
 func (*Ident) exprNode()         {}
-func (*Ellipsis) exprNode()      {}
 func (*BasicLit) exprNode()      {}
 func (*Interpolation) exprNode() {}
 func (*StructLit) exprNode()     {}
@@ -349,14 +348,6 @@
 	Rangle token.Pos
 }
 
-// An Ellipsis node stands for the "..." type in a
-// parameter list or the "..." length in an array type.
-type Ellipsis struct {
-	comments
-	Ellipsis token.Pos // position of "..."
-	Elt      Expr      // ellipsis element type (parameter lists only); or nil
-}
-
 // A BasicLit node represents a literal of basic type.
 type BasicLit struct {
 	comments
@@ -481,7 +472,6 @@
 func (x *BadExpr) Pos() token.Pos       { return x.From }
 func (x *Ident) Pos() token.Pos         { return x.NamePos }
 func (x *TemplateLabel) Pos() token.Pos { return x.Langle }
-func (x *Ellipsis) Pos() token.Pos      { return x.Ellipsis }
 func (x *BasicLit) Pos() token.Pos      { return x.ValuePos }
 func (x *Interpolation) Pos() token.Pos { return x.Elts[0].Pos() }
 func (x *StructLit) Pos() token.Pos {
@@ -509,12 +499,6 @@
 	return x.NamePos.Add(len(x.Name))
 }
 func (x *TemplateLabel) End() token.Pos { return x.Rangle }
-func (x *Ellipsis) End() token.Pos {
-	if x.Elt != nil {
-		return x.Elt.End()
-	}
-	return x.Ellipsis + 3 // len("...")
-}
 func (x *BasicLit) End() token.Pos      { return token.Pos(int(x.ValuePos) + len(x.Value)) }
 func (x *Interpolation) End() token.Pos { return x.Elts[len(x.Elts)-1].Pos() }
 func (x *StructLit) End() token.Pos {
diff --git a/cue/ast/walk.go b/cue/ast/walk.go
index 9869e5d..4e53391 100644
--- a/cue/ast/walk.go
+++ b/cue/ast/walk.go
@@ -110,11 +110,6 @@
 			walk(v, e)
 		}
 
-	case *Ellipsis:
-		if n.Elt != nil {
-			walk(v, n.Elt)
-		}
-
 	case *ListLit:
 		walkExprList(v, n.Elts)
 		if n.Type != nil {
diff --git a/cue/format/node.go b/cue/format/node.go
index 85035a5..2a1464f 100644
--- a/cue/format/node.go
+++ b/cue/format/node.go
@@ -387,12 +387,6 @@
 			f.print(unindent)
 		}
 
-	case *ast.Ellipsis:
-		f.print(x.Ellipsis, token.ELLIPSIS)
-		if x.Elt != nil {
-			f.expr(x.Elt) // TODO
-		}
-
 	case *ast.StructLit:
 		f.print(x.Lbrace, token.LBRACE, noblank, f.formfeed(), indent)
 		f.walkDeclList(x.Elts)
diff --git a/cue/parser/parser.go b/cue/parser/parser.go
index 77f483b..30b6114 100644
--- a/cue/parser/parser.go
+++ b/cue/parser/parser.go
@@ -1011,12 +1011,7 @@
 	c := p.openComments()
 	defer func() { c.closeNode(p, expr) }()
 
-	e := p.parseRHS()
-	switch p.tok {
-	case token.ELLIPSIS:
-		return &ast.Ellipsis{Ellipsis: p.expect(token.ELLIPSIS), Elt: e}
-	}
-	return e
+	return p.parseRHS()
 }
 
 // checkExpr checks that x is an expression (and not a type).
diff --git a/cue/parser/parser_test.go b/cue/parser/parser_test.go
index 77e7cb3..2d3d587 100644
--- a/cue/parser/parser_test.go
+++ b/cue/parser/parser_test.go
@@ -170,7 +170,7 @@
 	}, {
 		"lists",
 		`{
-			a: [ 1, 2, 3, b..., c... ]
+			a: [ 1, 2, 3, b, c, ... ]
 			b: [ 1, 2, 3, ],
 			c: [ 1,
 			 2,
@@ -178,7 +178,7 @@
 			 ],
 			d: [ 1+2, 2, 4,]
 		}`,
-		`{a: [1, 2, 3, b..., c...], b: [1, 2, 3], c: [1, 2, 3], d: [1+2, 2, 4]}`,
+		`{a: [1, 2, 3, b, c, ...], b: [1, 2, 3], c: [1, 2, 3], d: [1+2, 2, 4]}`,
 	}, {
 		"list types",
 		`{
diff --git a/cue/parser/print.go b/cue/parser/print.go
index bf9ca8d..01d5d1c 100644
--- a/cue/parser/print.go
+++ b/cue/parser/print.go
@@ -162,9 +162,6 @@
 		out += ")"
 		return out
 
-	case *ast.Ellipsis:
-		return debugStr(v.Elt) + "..."
-
 	case *ast.ParenExpr:
 		out := "("
 		out += debugStr(v.X)
diff --git a/cue/parser/walk.go b/cue/parser/walk.go
index 29adad7..8589b09 100644
--- a/cue/parser/walk.go
+++ b/cue/parser/walk.go
@@ -104,11 +104,6 @@
 			walk(v, e)
 		}
 
-	case *ast.Ellipsis:
-		if n.Elt != nil {
-			walk(v, n.Elt)
-		}
-
 	case *ast.ListLit:
 		walkExprList(v, n.Elts)
 		if n.Type != nil {
