aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2009-08-14 09:39:14 -0700
committerRobert Griesemer <gri@golang.org>2009-08-14 09:39:14 -0700
commitce1dd6cce375c65ecbdd11276e69f0e6de9d424b (patch)
tree6340eb1e36b2983f796cfbc55ed9c3665eb3ee19 /src
parent137c2204dbc25eeed61c92d04fbfb66586ecd77f (diff)
downloadgo-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.go76
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};