Commit c0e2318f authored by Robert Griesemer's avatar Robert Griesemer

cmd/compile: simplify parsing of type aliases

Change-Id: Ia86841cf84bc17ff6ecc6e5ac4cec86384a0da00
Reviewed-on: https://go-review.googlesource.com/31719Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
parent 1b0cf430
...@@ -90,11 +90,6 @@ func (p *noder) decls(decls []syntax.Decl) (l []*Node) { ...@@ -90,11 +90,6 @@ func (p *noder) decls(decls []syntax.Decl) (l []*Node) {
lastConstGroup = decl.Group lastConstGroup = decl.Group
case *syntax.TypeDecl: case *syntax.TypeDecl:
// TODO(gri) remove this notation - we're not going to use it after all
if decl.Alias {
yyerror("type aliases using = not supported")
break
}
l = append(l, p.typeDecl(decl)) l = append(l, p.typeDecl(decl))
case *syntax.FuncDecl: case *syntax.FuncDecl:
......
...@@ -89,7 +89,6 @@ type ( ...@@ -89,7 +89,6 @@ type (
TypeDecl struct { TypeDecl struct {
Name *Name Name *Name
Type Expr Type Expr
Alias bool
Group *Group // nil means not part of a group Group *Group // nil means not part of a group
Pragma Pragma Pragma Pragma
decl decl
......
...@@ -322,7 +322,8 @@ func (p *parser) aliasDecl(tok token, name *Name, group *Group) Decl { ...@@ -322,7 +322,8 @@ func (p *parser) aliasDecl(tok token, name *Name, group *Group) Decl {
d := new(AliasDecl) d := new(AliasDecl)
d.initFrom(&name.node) d.initFrom(&name.node)
p.want(_Rarrow) // lhs identifier and "=>" have been consumed already
d.Tok = tok d.Tok = tok
d.Name = name d.Name = name
d.Orig = p.dotname(p.name()) d.Orig = p.dotname(p.name())
...@@ -338,7 +339,7 @@ func (p *parser) constDecl(group *Group) Decl { ...@@ -338,7 +339,7 @@ func (p *parser) constDecl(group *Group) Decl {
} }
name := p.name() name := p.name()
if p.tok == _Rarrow { if p.got(_Rarrow) {
return p.aliasDecl(Const, name, group) return p.aliasDecl(Const, name, group)
} }
...@@ -364,7 +365,8 @@ func (p *parser) typeDecl(group *Group) Decl { ...@@ -364,7 +365,8 @@ func (p *parser) typeDecl(group *Group) Decl {
} }
name := p.name() name := p.name()
if p.tok == _Rarrow { // permit both: type T => p.T and: type T = p.T for now
if p.got(_Rarrow) || p.got(_Assign) {
return p.aliasDecl(Type, name, group) return p.aliasDecl(Type, name, group)
} }
...@@ -372,9 +374,6 @@ func (p *parser) typeDecl(group *Group) Decl { ...@@ -372,9 +374,6 @@ func (p *parser) typeDecl(group *Group) Decl {
d.initFrom(&name.node) d.initFrom(&name.node)
d.Name = name d.Name = name
// accept "type T = p.T" for now so we can experiment
// with a type-alias only approach as well
d.Alias = p.got(_Assign)
d.Type = p.tryType() d.Type = p.tryType()
if d.Type == nil { if d.Type == nil {
p.syntax_error("in type declaration") p.syntax_error("in type declaration")
...@@ -393,7 +392,7 @@ func (p *parser) varDecl(group *Group) Decl { ...@@ -393,7 +392,7 @@ func (p *parser) varDecl(group *Group) Decl {
} }
name := p.name() name := p.name()
if p.tok == _Rarrow { if p.got(_Rarrow) {
return p.aliasDecl(Var, name, group) return p.aliasDecl(Var, name, group)
} }
...@@ -449,7 +448,7 @@ func (p *parser) funcDecl() Decl { ...@@ -449,7 +448,7 @@ func (p *parser) funcDecl() Decl {
} }
name := p.name() name := p.name()
if recv == nil && p.tok == _Rarrow { if recv == nil && p.got(_Rarrow) {
return p.aliasDecl(Func, name, nil) return p.aliasDecl(Func, name, nil)
} }
......
...@@ -625,11 +625,7 @@ func (p *printer) printRawNode(n Node) { ...@@ -625,11 +625,7 @@ func (p *printer) printRawNode(n Node) {
if n.Group == nil { if n.Group == nil {
p.print(_Type, blank) p.print(_Type, blank)
} }
p.print(n.Name, blank) p.print(n.Name, blank, n.Type)
if n.Alias {
p.print(_Assign, blank)
}
p.print(n.Type)
case *VarDecl: case *VarDecl:
if n.Group == nil { if n.Group == nil {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment