1// Copyright 2024 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package reflect
6
7import (
8	"internal/abi"
9	"unsafe"
10	_ "unsafe"
11)
12
13// Widely used packages access these symbols using linkname,
14// most notably:
15//  - github.com/goccy/go-json
16//  - github.com/goccy/go-reflect
17//  - github.com/sohaha/zlsgo
18//  - github.com/undefinedlabs/go-mpatch
19//
20// Do not remove or change the type signature.
21// See go.dev/issue/67401
22// and go.dev/issue/67279.
23
24// ifaceIndir reports whether t is stored indirectly in an interface value.
25// It is no longer used by this package and is here entirely for the
26// linkname uses.
27//
28//go:linkname unusedIfaceIndir reflect.ifaceIndir
29func unusedIfaceIndir(t *abi.Type) bool {
30	return t.Kind_&abi.KindDirectIface == 0
31}
32
33//go:linkname valueInterface
34
35// The compiler doesn't allow linknames on methods, for good reasons.
36// We use this trick to push linknames of the methods.
37// Do not call them in this package.
38
39//go:linkname badlinkname_rtype_Align reflect.(*rtype).Align
40func badlinkname_rtype_Align(*rtype) int
41
42//go:linkname badlinkname_rtype_AssignableTo reflect.(*rtype).AssignableTo
43func badlinkname_rtype_AssignableTo(*rtype, Type) bool
44
45//go:linkname badlinkname_rtype_Bits reflect.(*rtype).Bits
46func badlinkname_rtype_Bits(*rtype) int
47
48//go:linkname badlinkname_rtype_ChanDir reflect.(*rtype).ChanDir
49func badlinkname_rtype_ChanDir(*rtype) ChanDir
50
51//go:linkname badlinkname_rtype_Comparable reflect.(*rtype).Comparable
52func badlinkname_rtype_Comparable(*rtype) bool
53
54//go:linkname badlinkname_rtype_ConvertibleTo reflect.(*rtype).ConvertibleTo
55func badlinkname_rtype_ConvertibleTo(*rtype, Type) bool
56
57//go:linkname badlinkname_rtype_Elem reflect.(*rtype).Elem
58func badlinkname_rtype_Elem(*rtype) Type
59
60//go:linkname badlinkname_rtype_Field reflect.(*rtype).Field
61func badlinkname_rtype_Field(*rtype, int) StructField
62
63//go:linkname badlinkname_rtype_FieldAlign reflect.(*rtype).FieldAlign
64func badlinkname_rtype_FieldAlign(*rtype) int
65
66//go:linkname badlinkname_rtype_FieldByIndex reflect.(*rtype).FieldByIndex
67func badlinkname_rtype_FieldByIndex(*rtype, []int) StructField
68
69//go:linkname badlinkname_rtype_FieldByName reflect.(*rtype).FieldByName
70func badlinkname_rtype_FieldByName(*rtype, string) (StructField, bool)
71
72//go:linkname badlinkname_rtype_FieldByNameFunc reflect.(*rtype).FieldByNameFunc
73func badlinkname_rtype_FieldByNameFunc(*rtype, func(string) bool) (StructField, bool)
74
75//go:linkname badlinkname_rtype_Implements reflect.(*rtype).Implements
76func badlinkname_rtype_Implements(*rtype, Type) bool
77
78//go:linkname badlinkname_rtype_In reflect.(*rtype).In
79func badlinkname_rtype_In(*rtype, int) Type
80
81//go:linkname badlinkname_rtype_IsVariadic reflect.(*rtype).IsVariadic
82func badlinkname_rtype_IsVariadic(*rtype) bool
83
84//go:linkname badlinkname_rtype_Key reflect.(*rtype).Key
85func badlinkname_rtype_Key(*rtype) Type
86
87//go:linkname badlinkname_rtype_Kind reflect.(*rtype).Kind
88func badlinkname_rtype_Kind(*rtype) Kind
89
90//go:linkname badlinkname_rtype_Len reflect.(*rtype).Len
91func badlinkname_rtype_Len(*rtype) int
92
93//go:linkname badlinkname_rtype_Method reflect.(*rtype).Method
94func badlinkname_rtype_Method(*rtype, int) Method
95
96//go:linkname badlinkname_rtype_MethodByName reflect.(*rtype).MethodByName
97func badlinkname_rtype_MethodByName(*rtype, string) (Method, bool)
98
99//go:linkname badlinkname_rtype_Name reflect.(*rtype).Name
100func badlinkname_rtype_Name(*rtype) string
101
102//go:linkname badlinkname_rtype_NumField reflect.(*rtype).NumField
103func badlinkname_rtype_NumField(*rtype) int
104
105//go:linkname badlinkname_rtype_NumIn reflect.(*rtype).NumIn
106func badlinkname_rtype_NumIn(*rtype) int
107
108//go:linkname badlinkname_rtype_NumMethod reflect.(*rtype).NumMethod
109func badlinkname_rtype_NumMethod(*rtype) int
110
111//go:linkname badlinkname_rtype_NumOut reflect.(*rtype).NumOut
112func badlinkname_rtype_NumOut(*rtype) int
113
114//go:linkname badlinkname_rtype_Out reflect.(*rtype).Out
115func badlinkname_rtype_Out(*rtype, int) Type
116
117//go:linkname badlinkname_rtype_PkgPath reflect.(*rtype).PkgPath
118func badlinkname_rtype_PkgPath(*rtype) string
119
120//go:linkname badlinkname_rtype_Size reflect.(*rtype).Size
121func badlinkname_rtype_Size(*rtype) uintptr
122
123//go:linkname badlinkname_rtype_String reflect.(*rtype).String
124func badlinkname_rtype_String(*rtype) string
125
126//go:linkname badlinkname_rtype_ptrTo reflect.(*rtype).ptrTo
127func badlinkname_rtype_ptrTo(*rtype) *abi.Type
128
129//go:linkname badlinkname_Value_pointer reflect.(*Value).pointer
130func badlinkname_Value_pointer(Value) unsafe.Pointer
131