diff options
| author | Robert Griesemer <gri@golang.org> | 2009-08-14 09:39:14 -0700 |
|---|---|---|
| committer | Robert Griesemer <gri@golang.org> | 2009-08-14 09:39:14 -0700 |
| commit | ce1dd6cce375c65ecbdd11276e69f0e6de9d424b (patch) | |
| tree | 6340eb1e36b2983f796cfbc55ed9c3665eb3ee19 /src | |
| parent | 137c2204dbc25eeed61c92d04fbfb66586ecd77f (diff) | |
| download | go-ce1dd6cce375c65ecbdd11276e69f0e6de9d424b.tar.xz | |
- do not accept forward-declarations for structs and interfaces anymore
R=r
DELTA=49 (0 added, 14 deleted, 35 changed)
OCL=33272
CL=33272
Diffstat (limited to 'src')
| -rw-r--r-- | src/pkg/go/parser/parser.go | 76 |
1 files changed, 31 insertions, 45 deletions
diff --git a/src/pkg/go/parser/parser.go b/src/pkg/go/parser/parser.go index 537832209b..132f07e19e 100644 --- a/src/pkg/go/parser/parser.go +++ b/src/pkg/go/parser/parser.go @@ -457,33 +457,26 @@ func (p *parser) parseStructType() *ast.StructType { } pos := p.expect(token.STRUCT); - var lbrace, rbrace token.Position; - var fields []*ast.Field; - if p.tok == token.LBRACE { - lbrace = p.pos; - p.next(); - - list := vector.New(0); - for p.tok != token.RBRACE && p.tok != token.EOF { - f := p.parseFieldDecl(); - list.Push(f); - if p.tok == token.SEMICOLON { - p.next(); - f.Comment = p.lineComment; - } else { - f.Comment = p.lineComment; - break; - } + lbrace := p.expect(token.LBRACE); + list := vector.New(0); + for p.tok != token.RBRACE && p.tok != token.EOF { + f := p.parseFieldDecl(); + list.Push(f); + if p.tok == token.SEMICOLON { + p.next(); + f.Comment = p.lineComment; + } else { + f.Comment = p.lineComment; + break; } + } + rbrace := p.expect(token.RBRACE); + p.optSemi = true; - rbrace = p.expect(token.RBRACE); - p.optSemi = true; - - // convert vector - fields = make([]*ast.Field, list.Len()); - for i := list.Len() - 1; i >= 0; i-- { - fields[i] = list.At(i).(*ast.Field); - } + // convert vector + fields := make([]*ast.Field, list.Len()); + for i := list.Len() - 1; i >= 0; i-- { + fields[i] = list.At(i).(*ast.Field); } return &ast.StructType{pos, lbrace, fields, rbrace}; @@ -677,28 +670,21 @@ func (p *parser) parseInterfaceType() *ast.InterfaceType { } pos := p.expect(token.INTERFACE); - var lbrace, rbrace token.Position; - var methods []*ast.Field; - if p.tok == token.LBRACE { - lbrace = p.pos; - p.next(); - - list := vector.New(0); - for p.tok == token.IDENT { - list.Push(p.parseMethodSpec()); - if p.tok != token.RBRACE { - p.expect(token.SEMICOLON); - } + lbrace := p.expect(token.LBRACE); + list := vector.New(0); + for p.tok == token.IDENT { + list.Push(p.parseMethodSpec()); + if p.tok != token.RBRACE { + p.expect(token.SEMICOLON); } + } + rbrace := p.expect(token.RBRACE); + p.optSemi = true; - rbrace = p.expect(token.RBRACE); - p.optSemi = true; - - // convert vector - methods = make([]*ast.Field, list.Len()); - for i := list.Len() - 1; i >= 0; i-- { - methods[i] = list.At(i).(*ast.Field); - } + // convert vector + methods := make([]*ast.Field, list.Len()); + for i := list.Len() - 1; i >= 0; i-- { + methods[i] = list.At(i).(*ast.Field); } return &ast.InterfaceType{pos, lbrace, methods, rbrace}; |
