mirror of
https://github.com/golang/go
synced 2024-11-24 04:10:14 -07:00
cmd/compile/internal/types2: move match function to end of file (cleanup)
Change-Id: Ia09f7b1af0e84858fb73ab7e2592c5c3e983dc0e Reviewed-on: https://go-review.googlesource.com/c/go/+/363669 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
cfcd71790f
commit
0a54a6826e
@ -27,35 +27,6 @@ func under(t Type) Type {
|
|||||||
return t.Underlying()
|
return t.Underlying()
|
||||||
}
|
}
|
||||||
|
|
||||||
// If x and y are identical, match returns x.
|
|
||||||
// If x and y are identical channels but for their direction
|
|
||||||
// and one of them is unrestricted, match returns the channel
|
|
||||||
// with the restricted direction.
|
|
||||||
// In all other cases, match returns nil.
|
|
||||||
func match(x, y Type) Type {
|
|
||||||
// Common case: we don't have channels.
|
|
||||||
if Identical(x, y) {
|
|
||||||
return x
|
|
||||||
}
|
|
||||||
|
|
||||||
// We may have channels that differ in direction only.
|
|
||||||
if x, _ := x.(*Chan); x != nil {
|
|
||||||
if y, _ := y.(*Chan); y != nil && Identical(x.elem, y.elem) {
|
|
||||||
// We have channels that differ in direction only.
|
|
||||||
// If there's an unrestricted channel, select the restricted one.
|
|
||||||
switch {
|
|
||||||
case x.dir == SendRecv:
|
|
||||||
return y
|
|
||||||
case y.dir == SendRecv:
|
|
||||||
return x
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// types are different
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// If t is not a type parameter, structuralType returns the underlying type.
|
// If t is not a type parameter, structuralType returns the underlying type.
|
||||||
// If t is a type parameter, structuralType returns the single underlying
|
// 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 of all types in its type set if it exists, or nil otherwise. If the
|
||||||
@ -124,3 +95,32 @@ func structuralString(t Type) Type {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If x and y are identical, match returns x.
|
||||||
|
// If x and y are identical channels but for their direction
|
||||||
|
// and one of them is unrestricted, match returns the channel
|
||||||
|
// with the restricted direction.
|
||||||
|
// In all other cases, match returns nil.
|
||||||
|
func match(x, y Type) Type {
|
||||||
|
// Common case: we don't have channels.
|
||||||
|
if Identical(x, y) {
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
// We may have channels that differ in direction only.
|
||||||
|
if x, _ := x.(*Chan); x != nil {
|
||||||
|
if y, _ := y.(*Chan); y != nil && Identical(x.elem, y.elem) {
|
||||||
|
// We have channels that differ in direction only.
|
||||||
|
// If there's an unrestricted channel, select the restricted one.
|
||||||
|
switch {
|
||||||
|
case x.dir == SendRecv:
|
||||||
|
return y
|
||||||
|
case y.dir == SendRecv:
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// types are different
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user