mirror of
https://github.com/golang/go
synced 2024-11-23 05:50: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))
|
||||
}
|
||||
|
||||
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) {
|
||||
done := make(chan bool, 1)
|
||||
go func() {
|
||||
|
@ -1425,6 +1425,7 @@ func ChanOf(dir ChanDir, t Type) Type {
|
||||
prototype := *(**chanType)(unsafe.Pointer(&ichan))
|
||||
ch := new(chanType)
|
||||
*ch = *prototype
|
||||
ch.dir = uintptr(dir)
|
||||
ch.string = &s
|
||||
ch.hash = fnv1(typ.hash, 'c', byte(dir))
|
||||
ch.elem = typ
|
||||
|
Loading…
Reference in New Issue
Block a user