gitee.com/quant1x/gox@v1.21.2/util/reflect2/go_above_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, 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  }