Files
sample-controller/vendor/github.com/modern-go/reflect2/unsafe_iface.go
T
Kubernetes Publisher e52f649fe5 Merge pull request #65157 from caesarxuchao/cherrypick-65034-1.10
Automatic merge from submit-queue.

Manually cherrypick #65034 to 1.10

Manually cherrypicking #65034. Using hack/cherry_pick_pull.sh to cherrypick is difficult because that requires cherrypicking #63059 first.

This PR imported the latest jsoniterator library so that case sensitivity during unmarhsaling is optional. The PR also set Kubernetes json serializer to be case sensitive.

Fix #64612.

```release-notes
Kubernetes json deserializer is now case-sensitive to restore compatibility with pre-1.8 servers.
If your config files contains fields with wrong case, the config files will be now invalid.
```

Kubernetes-commit: 32ac1c9073b132b8ba18aa830f46b77dcceb0723
2018-06-20 00:43:12 +00:00

65 lines
1.3 KiB
Go

package reflect2
import (
"reflect"
"unsafe"
)
type iface struct {
itab *itab
data unsafe.Pointer
}
type itab struct {
ignore unsafe.Pointer
rtype unsafe.Pointer
}
func IFaceToEFace(ptr unsafe.Pointer) interface{} {
iface := (*iface)(ptr)
if iface.itab == nil {
return nil
}
return packEFace(iface.itab.rtype, iface.data)
}
type UnsafeIFaceType struct {
unsafeType
}
func newUnsafeIFaceType(cfg *frozenConfig, type1 reflect.Type) *UnsafeIFaceType {
return &UnsafeIFaceType{
unsafeType: *newUnsafeType(cfg, type1),
}
}
func (type2 *UnsafeIFaceType) Indirect(obj interface{}) interface{} {
objEFace := unpackEFace(obj)
assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype)
return type2.UnsafeIndirect(objEFace.data)
}
func (type2 *UnsafeIFaceType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
return IFaceToEFace(ptr)
}
func (type2 *UnsafeIFaceType) IsNil(obj interface{}) bool {
if obj == nil {
return true
}
objEFace := unpackEFace(obj)
assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype)
return type2.UnsafeIsNil(objEFace.data)
}
func (type2 *UnsafeIFaceType) UnsafeIsNil(ptr unsafe.Pointer) bool {
if ptr == nil {
return true
}
iface := (*iface)(ptr)
if iface.itab == nil {
return true
}
return false
}