mirror of
https://github.com/golang/go
synced 2024-11-24 01:30:10 -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()
|
||||
}
|
||||
|
||||
// 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 a type parameter, structuralType returns the single underlying
|
||||
// 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
|
||||
}
|
||||
|
||||
// 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