go_above_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, it *hiter)
14
15 func (type2 *UnsafeMapType) UnsafeIterate(obj unsafe.Pointer) MapIterator {
16 var it hiter
17 mapiterinit(type2.rtype, *(*unsafe.Pointer)(obj), &it)
18 return &UnsafeMapIterator{
19 hiter: &it,
20 pKeyRType: type2.pKeyRType,
21 pElemRType: type2.pElemRType,
22 }
23 }