diff options
author | Russ Cox <rsc@golang.org> | 2009-03-11 16:06:17 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-03-11 16:06:17 -0700 |
commit | 532bb647046fe186d60ba3f891baab101e5a7e10 (patch) | |
tree | 60ff937825cccca59cef7cf0f324062237fabeb7 /usr/gri/pretty/parser.go | |
parent | 48089339c4723bbfc4909a476d122d9fb5c2faa1 (diff) | |
download | golang-532bb647046fe186d60ba3f891baab101e5a7e10.tar.gz |
complain when trying to put T into an interface
if T has pointer methods. this is just a heuristic
but it catches the problem robert ran into and
lets me put the larger interface issues aside for
now. found one bug in pretty.
R=ken
OCL=26141
CL=26141
Diffstat (limited to 'usr/gri/pretty/parser.go')
-rw-r--r-- | usr/gri/pretty/parser.go | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/usr/gri/pretty/parser.go b/usr/gri/pretty/parser.go index e80fb7e7b..21075beae 100644 --- a/usr/gri/pretty/parser.go +++ b/usr/gri/pretty/parser.go @@ -363,7 +363,7 @@ func (P *Parser) parseParameterDecl(ellipsis_ok bool) (*vector.Vector, ast.Expr) // if we had a list of identifiers, it must be followed by a type typ := P.tryParameterType(); - + return list, typ; } @@ -383,7 +383,7 @@ func (P *Parser) parseParameterList(ellipsis_ok bool) []*ast.Field { } list.Init(0); list.Push(&ast.Field{idents, typ, nil}); - + for P.tok == token.COMMA { P.next(); idents := P.parseIdentList2(nil); @@ -473,7 +473,7 @@ func (P *Parser) parseFunctionType() *ast.FunctionType { loc := P.loc; P.expect(token.FUNC); sig := P.parseSignature(); - + return &ast.FunctionType{loc, sig}; } @@ -494,7 +494,7 @@ func (P *Parser) parseMethodSpec() *ast.Field { // embedded interface typ = x; } - + return &ast.Field{idents, typ, nil}; } @@ -523,7 +523,7 @@ func (P *Parser) parseInterfaceType() *ast.InterfaceType { end = P.loc; P.expect(token.RBRACE); P.opt_semi = true; - + // convert vector methods = make([]*ast.Field, list.Len()); for i := list.Len() - 1; i >= 0; i-- { @@ -600,7 +600,7 @@ func (P *Parser) parseFieldDecl() *ast.Field { P.error(P.loc, "anonymous field expected"); } } - + return &ast.Field{idents, typ, tag}; } @@ -613,7 +613,7 @@ func (P *Parser) parseStructType() ast.Expr { loc := P.loc; var end scanner.Location; var fields []*ast.Field; - + P.expect(token.STRUCT); if P.tok == token.LBRACE { P.next(); @@ -642,7 +642,7 @@ func (P *Parser) parseStructType() ast.Expr { } } - return ast.StructType{loc, fields, end}; + return &ast.StructType{loc, fields, end}; } @@ -722,7 +722,7 @@ func (P *Parser) parseBlock(tok int) *ast.Block { P.expect(tok); P.parseStatementList(b.List); - + if tok == token.LBRACE { b.End = P.loc; P.expect(token.RBRACE); @@ -781,7 +781,7 @@ func (P *Parser) parseStringLit() ast.Expr { var x ast.Expr = &ast.BasicLit{P.loc, P.tok, P.val}; P.expect(token.STRING); // always satisfied - + for P.tok == token.STRING { y := &ast.BasicLit{P.loc, P.tok, P.val}; P.next(); @@ -805,7 +805,7 @@ func (P *Parser) parseOperand() ast.Expr { x := &ast.BasicLit{P.loc, P.tok, P.val}; P.next(); return x; - + case token.STRING: return P.parseStringLit(); @@ -1150,7 +1150,7 @@ func (P *Parser) parseControlClause(isForStat bool) (init ast.Stat, expr ast.Exp if P.tok != token.LBRACE { prev_lev := P.expr_lev; - P.expr_lev = -1; + P.expr_lev = -1; if P.tok != token.SEMICOLON { init = P.parseSimpleStat(isForStat); // TODO check for range clause and exit if found @@ -1372,7 +1372,7 @@ func (P *Parser) parseImportSpec(loc scanner.Location) *ast.ImportDecl { } else { P.expect(token.STRING); // use expect() error handling } - + return &ast.ImportDecl{loc, ident, path}; } @@ -1389,7 +1389,7 @@ func (P *Parser) parseConstSpec(loc scanner.Location) *ast.ConstDecl { P.next(); vals = P.parseExpressionList(); } - + return &ast.ConstDecl{loc, idents, typ, vals}; } @@ -1401,7 +1401,7 @@ func (P *Parser) parseTypeSpec(loc scanner.Location) *ast.TypeDecl { ident := P.parseIdent(); typ := P.parseType(); - + return &ast.TypeDecl{loc, ident, typ}; } @@ -1424,7 +1424,7 @@ func (P *Parser) parseVarSpec(loc scanner.Location) *ast.VarDecl { vals = P.parseExpressionList(); } } - + return &ast.VarDecl{loc, idents, typ, vals}; } @@ -1436,7 +1436,7 @@ func (P *Parser) parseSpec(loc scanner.Location, keyword int) ast.Decl { case token.TYPE: return P.parseTypeSpec(loc); case token.VAR: return P.parseVarSpec(loc); } - + unreachable(); return nil; } @@ -1463,13 +1463,13 @@ func (P *Parser) parseDecl(keyword int) ast.Decl { end := P.loc; P.expect(token.RPAREN); P.opt_semi = true; - + // convert vector decls := make([]ast.Decl, list.Len()); for i := 0; i < list.Len(); i++ { decls[i] = list.At(i).(ast.Decl); } - + return &ast.DeclList{loc, keyword, decls, end}; } @@ -1528,7 +1528,7 @@ func (P *Parser) parseDeclaration() ast.Decl { case token.FUNC: return P.parseFunctionDecl(); } - + loc := P.loc; P.error(loc, "declaration expected"); P.next(); // make progress @@ -1588,7 +1588,7 @@ func (P *Parser) ParseImportDecls() []ast.Decl { for i := 0; i < list.Len(); i++ { imports[i] = list.At(i).(ast.Decl); } - + return imports; } |