mirror of
https://github.com/golang/go
synced 2024-11-23 09:20:05 -07:00
reflect: set dir when creating a channel via ChanOf
Fixes #9135 Change-Id: I4d0e4eb52a3d64262f107eb7eae4096a6e47ac08 Reviewed-on: https://go-review.googlesource.com/2238 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
1ebfb082a7
commit
48d63035ce
@ -3487,6 +3487,26 @@ func TestChanOf(t *testing.T) {
|
|||||||
checkSameType(t, Zero(ChanOf(BothDir, TypeOf(T1(1)))).Interface(), (chan T1)(nil))
|
checkSameType(t, Zero(ChanOf(BothDir, TypeOf(T1(1)))).Interface(), (chan T1)(nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestChanOfDir(t *testing.T) {
|
||||||
|
// check construction and use of type not in binary
|
||||||
|
type T string
|
||||||
|
crt := ChanOf(RecvDir, TypeOf(T("")))
|
||||||
|
cst := ChanOf(SendDir, TypeOf(T("")))
|
||||||
|
|
||||||
|
// check that type already in binary is found
|
||||||
|
type T1 int
|
||||||
|
checkSameType(t, Zero(ChanOf(RecvDir, TypeOf(T1(1)))).Interface(), (<-chan T1)(nil))
|
||||||
|
checkSameType(t, Zero(ChanOf(SendDir, TypeOf(T1(1)))).Interface(), (chan<- T1)(nil))
|
||||||
|
|
||||||
|
// check String form of ChanDir
|
||||||
|
if crt.ChanDir().String() != "<-chan" {
|
||||||
|
t.Errorf("chan dir: have %q, want %q", crt.ChanDir().String(), "<-chan")
|
||||||
|
}
|
||||||
|
if cst.ChanDir().String() != "chan<-" {
|
||||||
|
t.Errorf("chan dir: have %q, want %q", cst.ChanDir().String(), "chan<-")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestChanOfGC(t *testing.T) {
|
func TestChanOfGC(t *testing.T) {
|
||||||
done := make(chan bool, 1)
|
done := make(chan bool, 1)
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -1425,6 +1425,7 @@ func ChanOf(dir ChanDir, t Type) Type {
|
|||||||
prototype := *(**chanType)(unsafe.Pointer(&ichan))
|
prototype := *(**chanType)(unsafe.Pointer(&ichan))
|
||||||
ch := new(chanType)
|
ch := new(chanType)
|
||||||
*ch = *prototype
|
*ch = *prototype
|
||||||
|
ch.dir = uintptr(dir)
|
||||||
ch.string = &s
|
ch.string = &s
|
||||||
ch.hash = fnv1(typ.hash, 'c', byte(dir))
|
ch.hash = fnv1(typ.hash, 'c', byte(dir))
|
||||||
ch.elem = typ
|
ch.elem = typ
|
||||||
|
Loading…
Reference in New Issue
Block a user