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  }