1package runtime 2 3import ( 4 "reflect" 5 "unsafe" 6) 7 8// Type representing reflect.rtype for noescape trick 9type Type struct{} 10 11//go:linkname rtype_Align reflect.(*rtype).Align 12//go:noescape 13func rtype_Align(*Type) int 14 15func (t *Type) Align() int { 16 return rtype_Align(t) 17} 18 19//go:linkname rtype_FieldAlign reflect.(*rtype).FieldAlign 20//go:noescape 21func rtype_FieldAlign(*Type) int 22 23func (t *Type) FieldAlign() int { 24 return rtype_FieldAlign(t) 25} 26 27//go:linkname rtype_Method reflect.(*rtype).Method 28//go:noescape 29func rtype_Method(*Type, int) reflect.Method 30 31func (t *Type) Method(a0 int) reflect.Method { 32 return rtype_Method(t, a0) 33} 34 35//go:linkname rtype_MethodByName reflect.(*rtype).MethodByName 36//go:noescape 37func rtype_MethodByName(*Type, string) (reflect.Method, bool) 38 39func (t *Type) MethodByName(a0 string) (reflect.Method, bool) { 40 return rtype_MethodByName(t, a0) 41} 42 43//go:linkname rtype_NumMethod reflect.(*rtype).NumMethod 44//go:noescape 45func rtype_NumMethod(*Type) int 46 47func (t *Type) NumMethod() int { 48 return rtype_NumMethod(t) 49} 50 51//go:linkname rtype_Name reflect.(*rtype).Name 52//go:noescape 53func rtype_Name(*Type) string 54 55func (t *Type) Name() string { 56 return rtype_Name(t) 57} 58 59//go:linkname rtype_PkgPath reflect.(*rtype).PkgPath 60//go:noescape 61func rtype_PkgPath(*Type) string 62 63func (t *Type) PkgPath() string { 64 return rtype_PkgPath(t) 65} 66 67//go:linkname rtype_Size reflect.(*rtype).Size 68//go:noescape 69func rtype_Size(*Type) uintptr 70 71func (t *Type) Size() uintptr { 72 return rtype_Size(t) 73} 74 75//go:linkname rtype_String reflect.(*rtype).String 76//go:noescape 77func rtype_String(*Type) string 78 79func (t *Type) String() string { 80 return rtype_String(t) 81} 82 83//go:linkname rtype_Kind reflect.(*rtype).Kind 84//go:noescape 85func rtype_Kind(*Type) reflect.Kind 86 87func (t *Type) Kind() reflect.Kind { 88 return rtype_Kind(t) 89} 90 91//go:linkname rtype_Implements reflect.(*rtype).Implements 92//go:noescape 93func rtype_Implements(*Type, reflect.Type) bool 94 95func (t *Type) Implements(u reflect.Type) bool { 96 return rtype_Implements(t, u) 97} 98 99//go:linkname rtype_AssignableTo reflect.(*rtype).AssignableTo 100//go:noescape 101func rtype_AssignableTo(*Type, reflect.Type) bool 102 103func (t *Type) AssignableTo(u reflect.Type) bool { 104 return rtype_AssignableTo(t, u) 105} 106 107//go:linkname rtype_ConvertibleTo reflect.(*rtype).ConvertibleTo 108//go:noescape 109func rtype_ConvertibleTo(*Type, reflect.Type) bool 110 111func (t *Type) ConvertibleTo(u reflect.Type) bool { 112 return rtype_ConvertibleTo(t, u) 113} 114 115//go:linkname rtype_Comparable reflect.(*rtype).Comparable 116//go:noescape 117func rtype_Comparable(*Type) bool 118 119func (t *Type) Comparable() bool { 120 return rtype_Comparable(t) 121} 122 123//go:linkname rtype_Bits reflect.(*rtype).Bits 124//go:noescape 125func rtype_Bits(*Type) int 126 127func (t *Type) Bits() int { 128 return rtype_Bits(t) 129} 130 131//go:linkname rtype_ChanDir reflect.(*rtype).ChanDir 132//go:noescape 133func rtype_ChanDir(*Type) reflect.ChanDir 134 135func (t *Type) ChanDir() reflect.ChanDir { 136 return rtype_ChanDir(t) 137} 138 139//go:linkname rtype_IsVariadic reflect.(*rtype).IsVariadic 140//go:noescape 141func rtype_IsVariadic(*Type) bool 142 143func (t *Type) IsVariadic() bool { 144 return rtype_IsVariadic(t) 145} 146 147//go:linkname rtype_Elem reflect.(*rtype).Elem 148//go:noescape 149func rtype_Elem(*Type) reflect.Type 150 151func (t *Type) Elem() *Type { 152 return Type2RType(rtype_Elem(t)) 153} 154 155//go:linkname rtype_Field reflect.(*rtype).Field 156//go:noescape 157func rtype_Field(*Type, int) reflect.StructField 158 159func (t *Type) Field(i int) reflect.StructField { 160 return rtype_Field(t, i) 161} 162 163//go:linkname rtype_FieldByIndex reflect.(*rtype).FieldByIndex 164//go:noescape 165func rtype_FieldByIndex(*Type, []int) reflect.StructField 166 167func (t *Type) FieldByIndex(index []int) reflect.StructField { 168 return rtype_FieldByIndex(t, index) 169} 170 171//go:linkname rtype_FieldByName reflect.(*rtype).FieldByName 172//go:noescape 173func rtype_FieldByName(*Type, string) (reflect.StructField, bool) 174 175func (t *Type) FieldByName(name string) (reflect.StructField, bool) { 176 return rtype_FieldByName(t, name) 177} 178 179//go:linkname rtype_FieldByNameFunc reflect.(*rtype).FieldByNameFunc 180//go:noescape 181func rtype_FieldByNameFunc(*Type, func(string) bool) (reflect.StructField, bool) 182 183func (t *Type) FieldByNameFunc(match func(string) bool) (reflect.StructField, bool) { 184 return rtype_FieldByNameFunc(t, match) 185} 186 187//go:linkname rtype_In reflect.(*rtype).In 188//go:noescape 189func rtype_In(*Type, int) reflect.Type 190 191func (t *Type) In(i int) reflect.Type { 192 return rtype_In(t, i) 193} 194 195//go:linkname rtype_Key reflect.(*rtype).Key 196//go:noescape 197func rtype_Key(*Type) reflect.Type 198 199func (t *Type) Key() *Type { 200 return Type2RType(rtype_Key(t)) 201} 202 203//go:linkname rtype_Len reflect.(*rtype).Len 204//go:noescape 205func rtype_Len(*Type) int 206 207func (t *Type) Len() int { 208 return rtype_Len(t) 209} 210 211//go:linkname rtype_NumField reflect.(*rtype).NumField 212//go:noescape 213func rtype_NumField(*Type) int 214 215func (t *Type) NumField() int { 216 return rtype_NumField(t) 217} 218 219//go:linkname rtype_NumIn reflect.(*rtype).NumIn 220//go:noescape 221func rtype_NumIn(*Type) int 222 223func (t *Type) NumIn() int { 224 return rtype_NumIn(t) 225} 226 227//go:linkname rtype_NumOut reflect.(*rtype).NumOut 228//go:noescape 229func rtype_NumOut(*Type) int 230 231func (t *Type) NumOut() int { 232 return rtype_NumOut(t) 233} 234 235//go:linkname rtype_Out reflect.(*rtype).Out 236//go:noescape 237func rtype_Out(*Type, int) reflect.Type 238 239//go:linkname PtrTo reflect.(*rtype).ptrTo 240//go:noescape 241func PtrTo(*Type) *Type 242 243func (t *Type) Out(i int) reflect.Type { 244 return rtype_Out(t, i) 245} 246 247//go:linkname IfaceIndir reflect.ifaceIndir 248//go:noescape 249func IfaceIndir(*Type) bool 250 251//go:linkname RType2Type reflect.toType 252//go:noescape 253func RType2Type(t *Type) reflect.Type 254 255//go:nolint structcheck 256type emptyInterface struct { 257 _ *Type 258 ptr unsafe.Pointer 259} 260 261func Type2RType(t reflect.Type) *Type { 262 return (*Type)(((*emptyInterface)(unsafe.Pointer(&t))).ptr) 263} 264