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:
Keith Randall 2023-12-13 12:46:39 -08:00
parent e4ebd13f7a
commit f2db96cd6c
1 changed files with 3 additions and 10 deletions

View File

@ -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()