aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/type.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/type.go')
-rw-r--r--src/runtime/type.go26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/runtime/type.go b/src/runtime/type.go
index 81455f3532..36492619e1 100644
--- a/src/runtime/type.go
+++ b/src/runtime/type.go
@@ -366,7 +366,19 @@ type imethod struct {
type interfacetype struct {
typ _type
pkgpath name
- mhdr []imethod
+ // expMethods contains all interface methods.
+ //
+ // - len(expMethods) returns number of exported methods.
+ // - cap(expMethods) returns all interface methods, including both exported/non-exported methods.
+ expMethods []imethod
+}
+
+func (it *interfacetype) methods() []imethod {
+ return it.expMethods[:cap(it.expMethods)]
+}
+
+func (it *interfacetype) isEmpty() bool {
+ return cap(it.expMethods) == 0
}
type maptype struct {
@@ -664,13 +676,15 @@ func typesEqual(t, v *_type, seen map[_typePair]struct{}) bool {
if it.pkgpath.name() != iv.pkgpath.name() {
return false
}
- if len(it.mhdr) != len(iv.mhdr) {
+ itmethods := it.methods()
+ ivmethods := iv.methods()
+ if len(itmethods) != len(ivmethods) {
return false
}
- for i := range it.mhdr {
- tm := &it.mhdr[i]
- vm := &iv.mhdr[i]
- // Note the mhdr array can be relocated from
+ for i := range itmethods {
+ tm := &itmethods[i]
+ vm := &ivmethods[i]
+ // Note the expMethods array can be relocated from
// another module. See #17724.
tname := resolveNameOff(unsafe.Pointer(tm), tm.name)
vname := resolveNameOff(unsafe.Pointer(vm), vm.name)