lastConstGroup = decl.Group
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))
case *syntax.FuncDecl:
d := new(AliasDecl)
d.initFrom(&name.node)
- p.want(_Rarrow)
+ // lhs identifier and "=>" have been consumed already
+
d.Tok = tok
d.Name = name
d.Orig = p.dotname(p.name())
}
name := p.name()
- if p.tok == _Rarrow {
+ if p.got(_Rarrow) {
return p.aliasDecl(Const, name, group)
}
}
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)
}
d.initFrom(&name.node)
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()
if d.Type == nil {
p.syntax_error("in type declaration")
}
name := p.name()
- if p.tok == _Rarrow {
+ if p.got(_Rarrow) {
return p.aliasDecl(Var, name, group)
}
}
name := p.name()
- if recv == nil && p.tok == _Rarrow {
+ if recv == nil && p.got(_Rarrow) {
return p.aliasDecl(Func, name, nil)
}