github.com/modern-go/reflect2@v1.0.2/go_below_118.go (about)

     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  }