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