diff options
author | Robert Griesemer <gri@golang.org> | 2009-05-13 15:18:05 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2009-05-13 15:18:05 -0700 |
commit | 3529f5218e659cab4e95862e6ef1b71efcdeffe9 (patch) | |
tree | fa2bb84b28616d5f295c3a0f649f72cd53e3cd7c /src/lib/go/parser/parser.go | |
parent | 0375b8b84082ae7c5d0c0cd5a0ba7ebee96ba9d0 (diff) | |
download | golang-3529f5218e659cab4e95862e6ef1b71efcdeffe9.tar.gz |
Simplified AST:
- one node for array and slice types
- one node for index and slice expressions
- simplified parser, astprinter, and ast.txt
R=r
DELTA=71 (0 added, 43 deleted, 28 changed)
OCL=28768
CL=28768
Diffstat (limited to 'src/lib/go/parser/parser.go')
-rw-r--r-- | src/lib/go/parser/parser.go | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/src/lib/go/parser/parser.go b/src/lib/go/parser/parser.go index 7d18605e4..4b733d7b1 100644 --- a/src/lib/go/parser/parser.go +++ b/src/lib/go/parser/parser.go @@ -330,9 +330,9 @@ func (p *parser) parseTypeName() ast.Expr { } -func (p *parser) parseArrayOrSliceType(ellipsis_ok bool) ast.Expr { +func (p *parser) parseArrayType(ellipsis_ok bool) ast.Expr { if p.trace { - defer un(trace(p, "ArrayOrSliceType")); + defer un(trace(p, "ArrayType")); } lbrack := p.expect(token.LBRACK); @@ -346,11 +346,7 @@ func (p *parser) parseArrayOrSliceType(ellipsis_ok bool) ast.Expr { p.expect(token.RBRACK); elt := p.parseType(); - if len != nil { - return &ast.ArrayType{lbrack, len, elt}; - } - - return &ast.SliceType{lbrack, elt}; + return &ast.ArrayType{lbrack, len, elt}; } @@ -713,7 +709,7 @@ func (p *parser) parseChanType() *ast.ChanType { func (p *parser) tryRawType(ellipsis_ok bool) ast.Expr { switch p.tok { case token.IDENT: return p.parseTypeName(); - case token.LBRACK: return p.parseArrayOrSliceType(ellipsis_ok); + case token.LBRACK: return p.parseArrayType(ellipsis_ok); case token.STRUCT: return p.parseStructType(); case token.MUL: return p.parsePointerType(); case token.FUNC: return p.parseFuncType(); @@ -921,9 +917,9 @@ func (p *parser) parseSelectorOrTypeAssertion(x ast.Expr) ast.Expr { } -func (p *parser) parseIndexOrSlice(x ast.Expr) ast.Expr { +func (p *parser) parseIndex(x ast.Expr) ast.Expr { if p.trace { - defer un(trace(p, "IndexOrSlice")); + defer un(trace(p, "Index")); } p.expect(token.LBRACK); @@ -937,11 +933,7 @@ func (p *parser) parseIndexOrSlice(x ast.Expr) ast.Expr { p.expr_lev--; p.expect(token.RBRACK); - if end != nil { - return &ast.SliceExpr{x, begin, end}; - } - - return &ast.IndexExpr{x, begin}; + return &ast.IndexExpr{x, begin, end}; } @@ -1059,7 +1051,6 @@ func (p *parser) checkExpr(x ast.Expr) ast.Expr { case *ast.ParenExpr: case *ast.SelectorExpr: case *ast.IndexExpr: - case *ast.SliceExpr: case *ast.TypeAssertExpr: case *ast.CallExpr: case *ast.StarExpr: @@ -1105,7 +1096,6 @@ func (p *parser) checkCompositeLitType(x ast.Expr) ast.Expr { case *ast.ParenExpr: p.checkCompositeLitType(t.X); case *ast.SelectorExpr: p.checkTypeName(t.X); case *ast.ArrayType: return x; - case *ast.SliceType: return x; case *ast.StructType: return x; case *ast.MapType: return x; default: @@ -1150,7 +1140,7 @@ func (p *parser) parsePrimaryExpr() ast.Expr { for { switch p.tok { case token.PERIOD: x = p.parseSelectorOrTypeAssertion(p.checkExpr(x)); - case token.LBRACK: x = p.parseIndexOrSlice(p.checkExpr(x)); + case token.LBRACK: x = p.parseIndex(p.checkExpr(x)); case token.LPAREN: x = p.parseCallOrConversion(p.checkExprOrType(x)); case token.LBRACE: if p.expr_lev >= 0 { |