mirror of https://github.com/golang/go.git
reflect: use internal/abi itab type
Change-Id: I4a40d9cda41d3601169ef0daf0f25fb1509bdcb7 Reviewed-on: https://go-review.googlesource.com/c/go/+/549458 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
e4ebd13f7a
commit
f2db96cd6c
|
|
@ -208,14 +208,7 @@ type emptyInterface struct {
|
|||
|
||||
// nonEmptyInterface is the header for an interface value with methods.
|
||||
type nonEmptyInterface struct {
|
||||
// see ../runtime/iface.go:/Itab
|
||||
itab *struct {
|
||||
ityp *abi.Type // static interface type
|
||||
typ *abi.Type // dynamic concrete type
|
||||
hash uint32 // copy of typ.hash
|
||||
_ [4]byte
|
||||
fun [100000]unsafe.Pointer // method table
|
||||
}
|
||||
itab *abi.ITab
|
||||
word unsafe.Pointer
|
||||
}
|
||||
|
||||
|
|
@ -897,8 +890,8 @@ func methodReceiver(op string, v Value, methodIndex int) (rcvrtype *abi.Type, t
|
|||
if iface.itab == nil {
|
||||
panic("reflect: " + op + " of method on nil interface value")
|
||||
}
|
||||
rcvrtype = iface.itab.typ
|
||||
fn = unsafe.Pointer(&iface.itab.fun[i])
|
||||
rcvrtype = iface.itab.Type
|
||||
fn = unsafe.Pointer(&unsafe.Slice(&iface.itab.Fun[0], i+1)[i])
|
||||
t = (*funcType)(unsafe.Pointer(tt.typeOff(m.Typ)))
|
||||
} else {
|
||||
rcvrtype = v.typ()
|
||||
|
|
|
|||
Loading…
Reference in New Issue