// Copyright 2024 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package reflect import ( "internal/abi" "unsafe" _ "unsafe" ) // Widely used packages access these symbols using linkname, // most notably: // - github.com/goccy/go-json // - github.com/goccy/go-reflect // - github.com/sohaha/zlsgo // - github.com/undefinedlabs/go-mpatch // // Do not remove or change the type signature. // See go.dev/issue/67401 // and go.dev/issue/67279. // ifaceIndir reports whether t is stored indirectly in an interface value. // It is no longer used by this package and is here entirely for the // linkname uses. // //go:linkname unusedIfaceIndir reflect.ifaceIndir func unusedIfaceIndir(t *abi.Type) bool { return t.Kind_&abi.KindDirectIface == 0 } //go:linkname valueInterface // The compiler doesn't allow linknames on methods, for good reasons. // We use this trick to push linknames of the methods. // Do not call them in this package. //go:linkname badlinkname_rtype_Align reflect.(*rtype).Align func badlinkname_rtype_Align(*rtype) int //go:linkname badlinkname_rtype_AssignableTo reflect.(*rtype).AssignableTo func badlinkname_rtype_AssignableTo(*rtype, Type) bool //go:linkname badlinkname_rtype_Bits reflect.(*rtype).Bits func badlinkname_rtype_Bits(*rtype) int //go:linkname badlinkname_rtype_ChanDir reflect.(*rtype).ChanDir func badlinkname_rtype_ChanDir(*rtype) ChanDir //go:linkname badlinkname_rtype_Comparable reflect.(*rtype).Comparable func badlinkname_rtype_Comparable(*rtype) bool //go:linkname badlinkname_rtype_ConvertibleTo reflect.(*rtype).ConvertibleTo func badlinkname_rtype_ConvertibleTo(*rtype, Type) bool //go:linkname badlinkname_rtype_Elem reflect.(*rtype).Elem func badlinkname_rtype_Elem(*rtype) Type //go:linkname badlinkname_rtype_Field reflect.(*rtype).Field func badlinkname_rtype_Field(*rtype, int) StructField //go:linkname badlinkname_rtype_FieldAlign reflect.(*rtype).FieldAlign func badlinkname_rtype_FieldAlign(*rtype) int //go:linkname badlinkname_rtype_FieldByIndex reflect.(*rtype).FieldByIndex func badlinkname_rtype_FieldByIndex(*rtype, []int) StructField //go:linkname badlinkname_rtype_FieldByName reflect.(*rtype).FieldByName func badlinkname_rtype_FieldByName(*rtype, string) (StructField, bool) //go:linkname badlinkname_rtype_FieldByNameFunc reflect.(*rtype).FieldByNameFunc func badlinkname_rtype_FieldByNameFunc(*rtype, func(string) bool) (StructField, bool) //go:linkname badlinkname_rtype_Implements reflect.(*rtype).Implements func badlinkname_rtype_Implements(*rtype, Type) bool //go:linkname badlinkname_rtype_In reflect.(*rtype).In func badlinkname_rtype_In(*rtype, int) Type //go:linkname badlinkname_rtype_IsVariadic reflect.(*rtype).IsVariadic func badlinkname_rtype_IsVariadic(*rtype) bool //go:linkname badlinkname_rtype_Key reflect.(*rtype).Key func badlinkname_rtype_Key(*rtype) Type //go:linkname badlinkname_rtype_Kind reflect.(*rtype).Kind func badlinkname_rtype_Kind(*rtype) Kind //go:linkname badlinkname_rtype_Len reflect.(*rtype).Len func badlinkname_rtype_Len(*rtype) int //go:linkname badlinkname_rtype_Method reflect.(*rtype).Method func badlinkname_rtype_Method(*rtype, int) Method //go:linkname badlinkname_rtype_MethodByName reflect.(*rtype).MethodByName func badlinkname_rtype_MethodByName(*rtype, string) (Method, bool) //go:linkname badlinkname_rtype_Name reflect.(*rtype).Name func badlinkname_rtype_Name(*rtype) string //go:linkname badlinkname_rtype_NumField reflect.(*rtype).NumField func badlinkname_rtype_NumField(*rtype) int //go:linkname badlinkname_rtype_NumIn reflect.(*rtype).NumIn func badlinkname_rtype_NumIn(*rtype) int //go:linkname badlinkname_rtype_NumMethod reflect.(*rtype).NumMethod func badlinkname_rtype_NumMethod(*rtype) int //go:linkname badlinkname_rtype_NumOut reflect.(*rtype).NumOut func badlinkname_rtype_NumOut(*rtype) int //go:linkname badlinkname_rtype_Out reflect.(*rtype).Out func badlinkname_rtype_Out(*rtype, int) Type //go:linkname badlinkname_rtype_PkgPath reflect.(*rtype).PkgPath func badlinkname_rtype_PkgPath(*rtype) string //go:linkname badlinkname_rtype_Size reflect.(*rtype).Size func badlinkname_rtype_Size(*rtype) uintptr //go:linkname badlinkname_rtype_String reflect.(*rtype).String func badlinkname_rtype_String(*rtype) string //go:linkname badlinkname_rtype_ptrTo reflect.(*rtype).ptrTo func badlinkname_rtype_ptrTo(*rtype) *abi.Type //go:linkname badlinkname_Value_pointer reflect.(*Value).pointer func badlinkname_Value_pointer(Value) unsafe.Pointer