go_below_118.go raw
1 //+build !go1.18
2
3 package reflect2
4
5 import (
6 "unsafe"
7 )
8
9 // m escapes into the return value, but the caller of mapiterinit
10 // doesn't let the return value escape.
11 //go:noescape
12 //go:linkname mapiterinit reflect.mapiterinit
13 func mapiterinit(rtype unsafe.Pointer, m unsafe.Pointer) (val *hiter)
14
15 func (type2 *UnsafeMapType) UnsafeIterate(obj unsafe.Pointer) MapIterator {
16 return &UnsafeMapIterator{
17 hiter: mapiterinit(type2.rtype, *(*unsafe.Pointer)(obj)),
18 pKeyRType: type2.pKeyRType,
19 pElemRType: type2.pElemRType,
20 }
21 }