aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2016-11-04 16:27:31 -0700
committerRobert Griesemer <gri@golang.org>2016-11-05 00:46:39 +0000
commit429edcff1049899cef4e3c5cb4b473e13a31d85c (patch)
treeeff2794211af0f7ad00182030f3d5edf8e9acfbf /src
parenta1a688fa0012f7ce3a37e9ac0070461fe8e3f28e (diff)
downloadgo-429edcff1049899cef4e3c5cb4b473e13a31d85c.tar.xz
Revert "cmd/compile/internal/syntax: support for alias declarations"
This reverts commit 32db3f2756324616b7c856ac9501deccc2491239. Reason: Decision to back out current alias implementation. For #16339. Change-Id: Ib05e3d96041d8347e49cae292f66bec791a1fdc8 Reviewed-on: https://go-review.googlesource.com/32825 Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/compile/internal/syntax/nodes.go31
-rw-r--r--src/cmd/compile/internal/syntax/parser.go98
-rw-r--r--src/cmd/compile/internal/syntax/printer.go14
-rw-r--r--src/cmd/compile/internal/syntax/scanner.go9
-rw-r--r--src/cmd/compile/internal/syntax/scanner_test.go3
-rw-r--r--src/cmd/compile/internal/syntax/tokens.go12
6 files changed, 38 insertions, 129 deletions
diff --git a/src/cmd/compile/internal/syntax/nodes.go b/src/cmd/compile/internal/syntax/nodes.go
index b88d16e113..bb56df33b1 100644
--- a/src/cmd/compile/internal/syntax/nodes.go
+++ b/src/cmd/compile/internal/syntax/nodes.go
@@ -25,21 +25,14 @@ func (n *node) Line() uint32 {
return n.line
}
-// TODO(gri) clean up init/initFrom once we have a good file pos story
func (n *node) init(p *parser) {
n.pos = uint32(p.pos)
n.line = uint32(p.line)
}
-func (n *node) initFrom(a *node) {
- n.pos = a.pos
- n.line = a.line
-}
-
// ----------------------------------------------------------------------------
// Files
-// package PkgName; DeclList[0], DeclList[1], ...
type File struct {
PkgName *Name
DeclList []Decl
@@ -56,8 +49,6 @@ type (
aDecl()
}
- // Path
- // LocalPkgName Path
ImportDecl struct {
LocalPkgName *Name // including "."; nil means no rename present
Path *BasicLit
@@ -65,18 +56,6 @@ type (
decl
}
- // Name => Orig
- AliasDecl struct {
- Tok token // Const, Type, Var, or Func
- Name *Name
- Orig Expr
- Group *Group // nil means not part of a group
- decl
- }
-
- // NameList
- // NameList = Values
- // NameList Type = Values
ConstDecl struct {
NameList []*Name
Type Expr // nil means no type
@@ -85,7 +64,6 @@ type (
decl
}
- // Name Type
TypeDecl struct {
Name *Name
Type Expr
@@ -94,9 +72,6 @@ type (
decl
}
- // NameList Type
- // NameList Type = Values
- // NameList = Values
VarDecl struct {
NameList []*Name
Type Expr // nil means no type
@@ -105,10 +80,6 @@ type (
decl
}
- // func Name Type { Body }
- // func Name Type
- // func Receiver Name Type { Body }
- // func Receiver Name Type
FuncDecl struct {
Attr map[string]bool // go:attr map
Recv *Field // nil means regular function
@@ -448,8 +419,6 @@ func (simpleStmt) aSimpleStmt() {}
// ----------------------------------------------------------------------------
// Comments
-// TODO(gri) Consider renaming to CommentPos, CommentPlacement, etc.
-// Kind = Above doesn't make much sense.
type CommentKind uint
const (
diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go
index 1ed20651b1..a959c6cd25 100644
--- a/src/cmd/compile/internal/syntax/parser.go
+++ b/src/cmd/compile/internal/syntax/parser.go
@@ -317,38 +317,16 @@ func (p *parser) importDecl(group *Group) Decl {
return d
}
-// AliasSpec = identifier "=>" [ PackageName "." ] identifier .
-func (p *parser) aliasDecl(tok token, name *Name, group *Group) Decl {
- // no tracing since this is already called from a const/type/var/funcDecl
-
- d := new(AliasDecl)
- d.initFrom(&name.node)
-
- // lhs identifier and "=>" have been consumed already
-
- d.Tok = tok
- d.Name = name
- d.Orig = p.dotname(p.name())
- d.Group = group
-
- return d
-}
-
-// ConstSpec = IdentifierList [ [ Type ] "=" ExpressionList ] | AliasSpec .
+// ConstSpec = IdentifierList [ [ Type ] "=" ExpressionList ] .
func (p *parser) constDecl(group *Group) Decl {
if trace {
defer p.trace("constDecl")()
}
- name := p.name()
- if p.got(_Rarrow) {
- return p.aliasDecl(Const, name, group)
- }
-
d := new(ConstDecl)
- d.initFrom(&name.node)
+ d.init(p)
- d.NameList = p.nameList(name)
+ d.NameList = p.nameList(p.name())
if p.tok != _EOF && p.tok != _Semi && p.tok != _Rparen {
d.Type = p.tryType()
if p.got(_Assign) {
@@ -360,21 +338,16 @@ func (p *parser) constDecl(group *Group) Decl {
return d
}
-// TypeSpec = identifier Type | AliasSpec .
+// TypeSpec = identifier Type .
func (p *parser) typeDecl(group *Group) Decl {
if trace {
defer p.trace("typeDecl")()
}
- name := p.name()
- if p.got(_Rarrow) {
- return p.aliasDecl(Type, name, group)
- }
-
d := new(TypeDecl)
- d.initFrom(&name.node)
+ d.init(p)
- d.Name = name
+ d.Name = p.name()
d.Type = p.tryType()
if d.Type == nil {
p.syntax_error("in type declaration")
@@ -386,21 +359,16 @@ func (p *parser) typeDecl(group *Group) Decl {
return d
}
-// VarSpec = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) | AliasSpec .
+// VarSpec = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .
func (p *parser) varDecl(group *Group) Decl {
if trace {
defer p.trace("varDecl")()
}
- name := p.name()
- if p.got(_Rarrow) {
- return p.aliasDecl(Var, name, group)
- }
-
d := new(VarDecl)
- d.initFrom(&name.node)
+ d.init(p)
- d.NameList = p.nameList(name)
+ d.NameList = p.nameList(p.name())
if p.got(_Assign) {
d.Values = p.exprList()
} else {
@@ -417,28 +385,31 @@ func (p *parser) varDecl(group *Group) Decl {
return d
}
-var badRecv = new(Field) // to signal invalid receiver in funcDecl
-
-// FunctionDecl = "func" FunctionName ( Function | Signature ) | "func" AliasSpec .
+// FunctionDecl = "func" FunctionName ( Function | Signature ) .
// FunctionName = identifier .
// Function = Signature FunctionBody .
// MethodDecl = "func" Receiver MethodName ( Function | Signature ) .
// Receiver = Parameters .
-func (p *parser) funcDecl() Decl {
+func (p *parser) funcDecl() *FuncDecl {
if trace {
defer p.trace("funcDecl")()
}
- var recv *Field
+ f := new(FuncDecl)
+ f.init(p)
+
+ badRecv := false
if p.tok == _Lparen {
- recv = badRecv
- switch list := p.paramList(); len(list) {
+ rcvr := p.paramList()
+ switch len(rcvr) {
case 0:
p.error("method has no receiver")
+ badRecv = true
case 1:
- recv = list[0]
+ f.Recv = rcvr[0]
default:
p.error("method has multiple receivers")
+ badRecv = true
}
}
@@ -448,11 +419,6 @@ func (p *parser) funcDecl() Decl {
return nil
}
- name := p.name()
- if recv == nil && p.got(_Rarrow) {
- return p.aliasDecl(Func, name, nil)
- }
-
// TODO(gri) check for regular functions only
// if name.Sym.Name == "init" {
// name = renameinit()
@@ -467,11 +433,7 @@ func (p *parser) funcDecl() Decl {
// }
// }
- f := new(FuncDecl)
- f.initFrom(&name.node) // TODO(gri) is this the correct position for methods?
-
- f.Recv = recv
- f.Name = name
+ f.Name = p.name()
f.Type = p.funcType()
if gcCompat {
f.node = f.Type.node
@@ -486,7 +448,7 @@ func (p *parser) funcDecl() Decl {
// p.error("can only use //go:noescape with external func implementations")
// }
- if recv == badRecv {
+ if badRecv {
return nil // TODO(gri) better solution
}
return f
@@ -555,7 +517,7 @@ func (p *parser) unaryExpr() Expr {
return x
}
- case _Larrow:
+ case _Arrow:
// receive op (<-x) or receive-only channel (<-chan E)
p.next()
@@ -969,7 +931,7 @@ func (p *parser) tryType() Expr {
p.next()
return indirect(p.type_())
- case _Larrow:
+ case _Arrow:
// recvchantype
p.next()
p.want(_Chan)
@@ -1015,7 +977,7 @@ func (p *parser) tryType() Expr {
p.next()
t := new(ChanType)
t.init(p)
- if p.got(_Larrow) {
+ if p.got(_Arrow) {
t.Dir = SendOnly
}
t.Elem = p.chanElem()
@@ -1358,7 +1320,7 @@ func (p *parser) paramDecl() *Field {
case _Name:
f.Name = p.name()
switch p.tok {
- case _Name, _Star, _Larrow, _Func, _Lbrack, _Chan, _Map, _Struct, _Interface, _Lparen:
+ case _Name, _Star, _Arrow, _Func, _Lbrack, _Chan, _Map, _Struct, _Interface, _Lparen:
// sym name_or_type
f.Type = p.type_()
@@ -1373,7 +1335,7 @@ func (p *parser) paramDecl() *Field {
f.Name = nil
}
- case _Larrow, _Star, _Func, _Lbrack, _Chan, _Map, _Struct, _Interface, _Lparen:
+ case _Arrow, _Star, _Func, _Lbrack, _Chan, _Map, _Struct, _Interface, _Lparen:
// name_or_type
f.Type = p.type_()
@@ -1507,7 +1469,7 @@ func (p *parser) simpleStmt(lhs Expr, rangeOk bool) SimpleStmt {
p.next()
return p.newAssignStmt(op, lhs, ImplicitOne)
- case _Larrow:
+ case _Arrow:
// lhs <- rhs
p.next()
s := new(SendStmt)
@@ -1860,7 +1822,7 @@ func (p *parser) commClause() *CommClause {
p.next()
lhs := p.exprList()
- if _, ok := lhs.(*ListExpr); !ok && p.tok == _Larrow {
+ if _, ok := lhs.(*ListExpr); !ok && p.tok == _Arrow {
// lhs <- x
} else {
// lhs
@@ -1940,7 +1902,7 @@ func (p *parser) stmt() Stmt {
case _Literal, _Func, _Lparen, // operands
_Lbrack, _Struct, _Map, _Chan, _Interface, // composite types
- _Larrow: // receive operator
+ _Arrow: // receive operator
return p.simpleStmt(nil, false)
case _For:
diff --git a/src/cmd/compile/internal/syntax/printer.go b/src/cmd/compile/internal/syntax/printer.go
index 8f12707304..0cacf1e5d4 100644
--- a/src/cmd/compile/internal/syntax/printer.go
+++ b/src/cmd/compile/internal/syntax/printer.go
@@ -473,11 +473,11 @@ func (p *printer) printRawNode(n Node) {
case *ChanType:
if n.Dir == RecvOnly {
- p.print(_Larrow)
+ p.print(_Arrow)
}
p.print(_Chan)
if n.Dir == SendOnly {
- p.print(_Larrow)
+ p.print(_Arrow)
}
p.print(blank, n.Elem)
@@ -495,7 +495,7 @@ func (p *printer) printRawNode(n Node) {
p.print(n.X)
case *SendStmt:
- p.print(n.Chan, blank, _Larrow, blank, n.Value)
+ p.print(n.Chan, blank, _Arrow, blank, n.Value)
case *AssignStmt:
p.print(n.Lhs)
@@ -603,12 +603,6 @@ func (p *printer) printRawNode(n Node) {
}
p.print(n.Path)
- case *AliasDecl:
- if n.Group == nil {
- p.print(n.Tok, blank)
- }
- p.print(n.Name, blank, _Rarrow, blank, n.Orig)
-
case *ConstDecl:
if n.Group == nil {
p.print(_Const, blank)
@@ -763,8 +757,6 @@ func groupFor(d Decl) (token, *Group) {
switch d := d.(type) {
case *ImportDecl:
return _Import, d.Group
- case *AliasDecl:
- return d.Tok, d.Group
case *ConstDecl:
return _Const, d.Group
case *TypeDecl:
diff --git a/src/cmd/compile/internal/syntax/scanner.go b/src/cmd/compile/internal/syntax/scanner.go
index bd38943c30..b84fcc5fd1 100644
--- a/src/cmd/compile/internal/syntax/scanner.go
+++ b/src/cmd/compile/internal/syntax/scanner.go
@@ -229,7 +229,7 @@ redo:
goto assignop
}
if c == '-' {
- s.tok = _Larrow
+ s.tok = _Arrow
break
}
s.ungetr()
@@ -253,16 +253,11 @@ redo:
s.tok = _Operator
case '=':
- c = s.getr()
- if c == '=' {
+ if s.getr() == '=' {
s.op, s.prec = Eql, precCmp
s.tok = _Operator
break
}
- if c == '>' {
- s.tok = _Rarrow
- break
- }
s.ungetr()
s.tok = _Assign
diff --git a/src/cmd/compile/internal/syntax/scanner_test.go b/src/cmd/compile/internal/syntax/scanner_test.go
index 0e0ff1b172..38a7e0da4c 100644
--- a/src/cmd/compile/internal/syntax/scanner_test.go
+++ b/src/cmd/compile/internal/syntax/scanner_test.go
@@ -210,8 +210,7 @@ var sampleTokens = [...]struct {
{_IncOp, "--", Sub, precAdd},
{_Assign, "=", 0, 0},
{_Define, ":=", 0, 0},
- {_Larrow, "<-", 0, 0},
- {_Rarrow, "=>", 0, 0},
+ {_Arrow, "<-", 0, 0},
// delimiters
{_Lparen, "(", 0, 0},
diff --git a/src/cmd/compile/internal/syntax/tokens.go b/src/cmd/compile/internal/syntax/tokens.go
index 4a02c0ce3b..bd0118a141 100644
--- a/src/cmd/compile/internal/syntax/tokens.go
+++ b/src/cmd/compile/internal/syntax/tokens.go
@@ -22,8 +22,7 @@ const (
_IncOp
_Assign
_Define
- _Larrow
- _Rarrow
+ _Arrow
_Star
// delimitors
@@ -70,12 +69,6 @@ const (
)
const (
- // for AliasDecl
- Const = _Const
- Type = _Type
- Var = _Var
- Func = _Func
-
// for BranchStmt
Break = _Break
Continue = _Continue
@@ -101,8 +94,7 @@ var tokstrings = [...]string{
_IncOp: "opop",
_Assign: "=",
_Define: ":=",
- _Larrow: "<-",
- _Rarrow: "=>",
+ _Arrow: "<-",
_Star: "*",
// delimitors