1
0
mirror of https://github.com/golang/go synced 2024-11-24 06:50:17 -07:00

cmd/compile, go/parser: disallow "type T = p.T" - must use "=>"

I had added this originally so we can play with different notations
but it doesn't make sense to keep it around since gofmt will convert
a type alias declaration using "=" into one using "=>" anyhow. More
importantly, the spec doesn't permit it.

Change-Id: Icb010b5a9976aebf877e48b3ce9d7245559ca494
Reviewed-on: https://go-review.googlesource.com/32105
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
Robert Griesemer 2016-10-27 11:20:20 -07:00
parent 8b07ec20f7
commit 89632aa183
6 changed files with 4 additions and 10 deletions

View File

@ -11,7 +11,7 @@
The export data is a serialized description of the graph of exported
"objects": constants, types, variables, and functions. Aliases may be
directly reexported, and unaliased types may be indirectly reexported
(as part of the type of a directly exorted object). More generally,
(as part of the type of a directly exported object). More generally,
objects referred to from inlined function bodies can be reexported.
We need to know which package declares these reexported objects, and
therefore packages are also part of the export graph.

View File

@ -365,8 +365,7 @@ func (p *parser) typeDecl(group *Group) Decl {
}
name := p.name()
// permit both: type T => p.T and: type T = p.T for now
if p.got(_Rarrow) || p.got(_Assign) {
if p.got(_Rarrow) {
return p.aliasDecl(Type, name, group)
}

View File

@ -2343,8 +2343,7 @@ func (p *parser) parseTypeSpec(doc *ast.CommentGroup, _ token.Token, _ int) ast.
}
ident := p.parseIdent()
// permit both: type T => p.T and: type T = p.T for now
if p.tok == token.ALIAS || p.tok == token.ASSIGN {
if p.tok == token.ALIAS {
p.next()
return p.parseAliasSpec(doc, ast.Typ, ident)
}

View File

@ -47,7 +47,7 @@ var valids = []string{
`package p; var _ = map[P]int{P{}:0, {}:1}`,
`package p; var _ = map[*P]int{&P{}:0, {}:1}`,
`package p; const c => p.C; var x => X; type T => p.T; func F => p.F`,
`package p; var (_ int; x => p.X; y => Y); type (t => T; t1 = p.T1)`,
`package p; var (_ int; x => p.X; y => Y); type (t => T; t1 => p.T1)`,
}
func TestValid(t *testing.T) {

View File

@ -1015,8 +1015,6 @@ type c => p.C
type (
s struct{}
a => A
b => A
c => foo
ddd => p.Foo
)

View File

@ -1029,8 +1029,6 @@ type c => p.C
type (
s struct{}
a => A
b = A
c = foo
ddd => p.Foo
)