From: Keith Randall Date: Wed, 13 Dec 2023 20:46:39 +0000 (-0800) Subject: reflect: use internal/abi itab type X-Git-Tag: go1.23rc1~1213 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f2db96cd6ca96adf7717761194811dd07019b78e;p=gostls13.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 Reviewed-by: Keith Randall Reviewed-by: David Chase --- diff --git a/src/reflect/value.go b/src/reflect/value.go index 60ba79a6e6..87e595155b 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -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()