diff --git a/src/reflect/type.go b/src/reflect/type.go index 237a5a6a..453fa0d1 100644 --- a/src/reflect/type.go +++ b/src/reflect/type.go @@ -133,6 +133,14 @@ func TypeOf(i interface{}) Type { return ValueOf(i).typecode } +func PtrTo(t Type) Type { + ptrType := t<<5 | 5 // 0b0101 == 5 + if ptrType>>5 != t { + panic("reflect: PtrTo type does not fit") + } + return ptrType +} + func (t Type) String() string { return "T" } diff --git a/testdata/reflect.go b/testdata/reflect.go index c4df8460..dcd64a5d 100644 --- a/testdata/reflect.go +++ b/testdata/reflect.go @@ -265,6 +265,13 @@ func main() { println("type assertion failed (but should succeed)") } + if reflect.TypeOf(new(myint)) != reflect.PtrTo(reflect.TypeOf(myint(0))) { + println("PtrTo failed for type myint") + } + if reflect.TypeOf(new(myslice)) != reflect.PtrTo(reflect.TypeOf(make(myslice, 0))) { + println("PtrTo failed for type myslice") + } + println("\nstruct tags") TestStructTag() }