diff --git a/src/pkg/go/types/gcimporter.go b/src/pkg/go/types/gcimporter.go index 0e20d5c9a99..38b94676bfc 100644 --- a/src/pkg/go/types/gcimporter.go +++ b/src/pkg/go/types/gcimporter.go @@ -408,18 +408,13 @@ func (p *gcParser) parseField() *Field { func (p *gcParser) parseStructType() Type { var fields []*Field - parseField := func() { - fields = append(fields, p.parseField()) - } - p.expectKeyword("struct") p.expect('{') - if p.tok != '}' { - parseField() - for p.tok == ';' { - p.next() - parseField() + for p.tok != '}' { + if len(fields) > 0 { + p.expect(';') } + fields = append(fields, p.parseField()) } p.expect('}') @@ -450,7 +445,11 @@ func (p *gcParser) parseParameter() (par *Var, isVariadic bool) { // ParameterList = { Parameter "," } Parameter . // func (p *gcParser) parseParameters() (list []*Var, isVariadic bool) { - parseParameter := func() { + p.expect('(') + for p.tok != ')' { + if len(list) > 0 { + p.expect(',') + } par, variadic := p.parseParameter() list = append(list, par) if variadic { @@ -460,15 +459,6 @@ func (p *gcParser) parseParameters() (list []*Var, isVariadic bool) { isVariadic = true } } - - p.expect('(') - if p.tok != ')' { - parseParameter() - for p.tok == ',' { - p.next() - parseParameter() - } - } p.expect(')') return @@ -509,21 +499,16 @@ func (p *gcParser) parseSignature() *Signature { func (p *gcParser) parseInterfaceType() Type { var methods []*Method - parseMethod := func() { + p.expectKeyword("interface") + p.expect('{') + for p.tok != '}' { + if len(methods) > 0 { + p.expect(';') + } name := p.parseName() typ := p.parseSignature() methods = append(methods, &Method{name, typ}) } - - p.expectKeyword("interface") - p.expect('{') - if p.tok != '}' { - parseMethod() - for p.tok == ';' { - p.next() - parseMethod() - } - } p.expect('}') return &Interface{Methods: methods}