diff options
author | Robert Griesemer <gri@golang.org> | 2014-09-04 15:18:32 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2014-09-04 15:18:32 -0700 |
commit | 29e150bf336b34c1db98cf77d7ba2be3e3342411 (patch) | |
tree | 253d0fe9967087b9f601dbd08b174b68daf69bcf /src/pkg | |
parent | 00f7f64438d3a0d4c3a0ac3475eeee2ae37977b4 (diff) | |
download | go-29e150bf336b34c1db98cf77d7ba2be3e3342411.tar.gz |
go/parser: fix "zero day" parse error
(a b string, ok bool) is not a valid signature
Fixes issue 8656.
LGTM=adonovan
R=adonovan
CC=golang-codereviews
https://codereview.appspot.com/137140043
Diffstat (limited to 'src/pkg')
-rw-r--r-- | src/pkg/go/parser/parser.go | 19 | ||||
-rw-r--r-- | src/pkg/go/parser/short_test.go | 1 |
2 files changed, 11 insertions, 9 deletions
diff --git a/src/pkg/go/parser/parser.go b/src/pkg/go/parser/parser.go index 4d6f36258..9c62076f2 100644 --- a/src/pkg/go/parser/parser.go +++ b/src/pkg/go/parser/parser.go @@ -823,9 +823,10 @@ func (p *parser) parseParameterList(scope *ast.Scope, ellipsisOk bool) (params [ // parameter or result variable is the function body. p.declare(field, nil, scope, ast.Var, idents...) p.resolve(typ) - if p.tok == token.COMMA { - p.next() + if !p.atComma("parameter list") { + return } + p.next() for p.tok != token.RPAREN && p.tok != token.EOF { idents := p.parseIdentList() typ := p.parseVarType(ellipsisOk) @@ -840,15 +841,15 @@ func (p *parser) parseParameterList(scope *ast.Scope, ellipsisOk bool) (params [ } p.next() } - } else { - // Type { "," Type } (anonymous parameters) - params = make([]*ast.Field, len(list)) - for i, typ := range list { - p.resolve(typ) - params[i] = &ast.Field{Type: typ} - } + return } + // Type { "," Type } (anonymous parameters) + params = make([]*ast.Field, len(list)) + for i, typ := range list { + p.resolve(typ) + params[i] = &ast.Field{Type: typ} + } return } diff --git a/src/pkg/go/parser/short_test.go b/src/pkg/go/parser/short_test.go index 8a3c33868..f861086dd 100644 --- a/src/pkg/go/parser/short_test.go +++ b/src/pkg/go/parser/short_test.go @@ -93,6 +93,7 @@ var invalids = []string{ `package p; func f() { go f /* ERROR HERE "function must be invoked" */ }`, `package p; func f() { defer func() {} /* ERROR HERE "function must be invoked" */ }`, `package p; func f() { go func() { func() { f(x func /* ERROR "expected '\)'" */ (){}) } } }`, + `package p; func f() (a b string /* ERROR "expected '\)'" */ , ok bool) // issue 8656`, } func TestInvalid(t *testing.T) { |