mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: simplify parsing of type aliases
Change-Id: Ia86841cf84bc17ff6ecc6e5ac4cec86384a0da00 Reviewed-on: https://go-review.googlesource.com/31719 Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
1b0cf430dd
commit
c0e2318f7c
4 changed files with 8 additions and 19 deletions
|
|
@ -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 (
|
||||||
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 {
|
||||||
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
||||||
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
||||||
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 {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue