]> Cypherpunks repositories - gostls13.git/commitdiff
go/parser: don't require parens around composite literals inside a composite literal
authorRobert Griesemer <gri@golang.org>
Tue, 27 Apr 2010 18:57:17 +0000 (11:57 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 27 Apr 2010 18:57:17 +0000 (11:57 -0700)
   within an if, for, or switch control clause

R=rsc
CC=golang-dev
https://golang.org/cl/943046

src/pkg/go/parser/parser.go
src/pkg/go/parser/parser_test.go

index 6831a53de2e2d726a1d2292bf718c5d26f923251..52504994e65174f5f71ac435b4760649db063c34 100644 (file)
@@ -1105,9 +1105,11 @@ func (p *parser) parseCompositeLit(typ ast.Expr) ast.Expr {
 
        lbrace := p.expect(token.LBRACE)
        var elts []ast.Expr
+       p.exprLev++
        if p.tok != token.RBRACE {
                elts = p.parseElementList()
        }
+       p.exprLev--
        rbrace := p.expect(token.RBRACE)
        return &ast.CompositeLit{typ, lbrace, elts, rbrace}
 }
index 75ebd8cec7200d2b8de86bb9184881c11d3b6425..01327a41d7b5fafd077acd73a96d0996242b9c74 100644 (file)
@@ -38,6 +38,9 @@ var validPrograms = []interface{}{
        `package main; func f(func() func() func())` + "\n",
        `package main; func f(...)` + "\n",
        `package main; func f(float, ...int)` + "\n",
+       `package main; type T []int; var a []bool; func f() { if a[T{42}[0]] {} }` + "\n",
+       `package main; type T []int; func g(int) bool { return true }; func f() { if g(T{42}[0]) {} }` + "\n",
+       `package main; type T []int; func f() { for _ = range []int{T{42}[0]} {} }` + "\n",
 }