]> Cypherpunks repositories - gostls13.git/commit
[dev.typeparams] cmd/compile: simplify type alias handling for export
authorMatthew Dempsky <mdempsky@google.com>
Mon, 17 May 2021 18:40:02 +0000 (11:40 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 18 May 2021 21:18:56 +0000 (21:18 +0000)
commitf3fc8b5779314bae827b868deb916c7a8e748907
treee4d398c9ab03ca12048d54129bf5008de8ada049
parent140cd7c1d3f1f37ae332d504897a98800a80e0e6
[dev.typeparams] cmd/compile: simplify type alias handling for export

Currently the exporter uses types.IsDotAlias(n.Sym()) to recognize
that n is a type alias, but IsDotAlias is actually meant for
recognizing aliases introduced by dot imports. Translated to go/types,
the current logic amounts recognizing type aliases as if by:

var n *types.TypeName
typ, ok := n.Pkg().Scope().Lookup(n.Name()).Type().(*types.Named)
isAlias := !ok || typ.Obj().Pkg() != n.Pkg() || typ.Obj().Name() != n.Name()

But we can instead just check n.Alias() (eqv. n.IsAlias() in
go/types). In addition to being much simpler, this is also actually
correct for recognizing function-scoped type declarations (though we
don't currently support those anyway, nor would they go through this
exact code path).

To avoid possible future misuse of IsDotAlias, this CL also inlines
its trivial definition into its only call site.

Passes toolstash -cmp, also w/ -gcflags=all=-G=3.

Change-Id: I7c6283f4b58d5311aa683f8229bbf62f8bab2ff9
Reviewed-on: https://go-review.googlesource.com/c/go/+/320613
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Matthew Dempsky <mdempsky@google.com>
Trust: Dan Scales <danscales@google.com>
Reviewed-by: Dan Scales <danscales@google.com>
src/cmd/compile/internal/noder/decl.go
src/cmd/compile/internal/noder/import.go
src/cmd/compile/internal/noder/object.go
src/cmd/compile/internal/typecheck/iexport.go
src/cmd/compile/internal/typecheck/typecheck.go
src/cmd/compile/internal/types/pkg.go