mirror of
https://github.com/golang/go
synced 2024-10-04 15:09:59 +00:00
cmd/compile/internal/types2: optimize common case in structuralType
Most of the time we don't have a type parameter. Avoid using a closure in that case. While at it, rename argument from typ to t (to match style in that file), and clarify the doc string. Change-Id: Ie62821073f60f353526263f8b380bad9f72d842e Reviewed-on: https://go-review.googlesource.com/c/go/+/363668 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
parent
184ca3cf99
commit
0a39e4a89d
|
@ -56,15 +56,20 @@ func match(x, y Type) Type {
|
|||
return nil
|
||||
}
|
||||
|
||||
// If typ is a type parameter, structuralType returns the single underlying
|
||||
// type of all types in the corresponding type constraint if it exists, or
|
||||
// nil otherwise. If the type set contains only unrestricted and restricted
|
||||
// channel types (with identical element types), the single underlying type
|
||||
// is the restricted channel type if the restrictions are always the same.
|
||||
// If typ is not a type parameter, structuralType returns the underlying type.
|
||||
func structuralType(typ Type) Type {
|
||||
// If t is not a type parameter, structuralType returns the underlying type.
|
||||
// If t is a type parameter, structuralType returns the single underlying
|
||||
// type of all types in its type set if it exists, or nil otherwise. If the
|
||||
// type set contains only unrestricted and restricted channel types (with
|
||||
// identical element types), the single underlying type is the restricted
|
||||
// channel type if the restrictions are always the same, or nil otherwise.
|
||||
func structuralType(t Type) Type {
|
||||
tpar, _ := t.(*TypeParam)
|
||||
if tpar == nil {
|
||||
return under(t)
|
||||
}
|
||||
|
||||
var su Type
|
||||
if underIs(typ, func(u Type) bool {
|
||||
if tpar.underIs(func(u Type) bool {
|
||||
if u == nil {
|
||||
return false
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue