summaryrefslogtreecommitdiff
path: root/src/lib/go/parser/parser.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2009-05-13 15:18:05 -0700
committerRobert Griesemer <gri@golang.org>2009-05-13 15:18:05 -0700
commit3529f5218e659cab4e95862e6ef1b71efcdeffe9 (patch)
treefa2bb84b28616d5f295c3a0f649f72cd53e3cd7c /src/lib/go/parser/parser.go
parent0375b8b84082ae7c5d0c0cd5a0ba7ebee96ba9d0 (diff)
downloadgolang-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.go26
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 {