Commit dd1fe82c authored by Robert Griesemer's avatar Robert Griesemer

go/parser: accept optional indices for all parts of an index expression

Instead, leave the error testing to the type checker, eventually.

Fixes #5827.

R=adonovan
CC=golang-dev
https://golang.org/cl/10917043
parent 16c3f82e
...@@ -1187,10 +1187,6 @@ func (p *parser) parseIndexOrSlice(x ast.Expr) ast.Expr { ...@@ -1187,10 +1187,6 @@ func (p *parser) parseIndexOrSlice(x ast.Expr) ast.Expr {
if ncolons > 0 { if ncolons > 0 {
// slice expression // slice expression
if ncolons == 2 && (index[1] == nil || index[2] == nil) {
// only i is optional in a[i:j:k]
p.error(rbrack, "2nd and 3rd index must be present full slice expression")
}
return &ast.SliceExpr{X: x, Lbrack: lbrack, Low: index[0], High: index[1], Max: index[2], Rbrack: rbrack} return &ast.SliceExpr{X: x, Lbrack: lbrack, Low: index[0], High: index[1], Max: index[2], Rbrack: rbrack}
} }
......
...@@ -78,12 +78,6 @@ var invalids = []string{ ...@@ -78,12 +78,6 @@ var invalids = []string{
`package p; func f() { var s []int; _ = s[] /* ERROR "expected operand" */ };`, `package p; func f() { var s []int; _ = s[] /* ERROR "expected operand" */ };`,
`package p; func f() { var s []int; _ = s[::: /* ERROR "expected ']'" */ ] };`, `package p; func f() { var s []int; _ = s[::: /* ERROR "expected ']'" */ ] };`,
`package p; func f() { var s []int; _ = s[i:j:k: /* ERROR "expected ']'" */ l] };`, `package p; func f() { var s []int; _ = s[i:j:k: /* ERROR "expected ']'" */ l] };`,
`package p; func f() { var s []int; g(s[::] /* ERROR "index must be present" */) };`,
`package p; func f() { var s []int; g(s[i::] /* ERROR "index must be present" */) };`,
`package p; func f() { var s []int; g(s[i:j:] /* ERROR "index must be present" */) };`,
`package p; func f() { var s []int; g(s[::k] /* ERROR "index must be present" */) };`,
`package p; func f() { var s []int; g(s[:j:] /* ERROR "index must be present" */) };`,
`package p; func f() { var s []int; g(s[i::k] /* ERROR "index must be present" */) };`,
} }
func TestInvalid(t *testing.T) { func TestInvalid(t *testing.T) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment