github.com/zhangdapeng520/zdpgo_json@v0.1.5/reflect2/go_below_118.go (about)

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