aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/typecheck/subr.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/compile/internal/typecheck/subr.go')
-rw-r--r--src/cmd/compile/internal/typecheck/subr.go34
1 files changed, 26 insertions, 8 deletions
diff --git a/src/cmd/compile/internal/typecheck/subr.go b/src/cmd/compile/internal/typecheck/subr.go
index daf5cd72a2..76c565ebee 100644
--- a/src/cmd/compile/internal/typecheck/subr.go
+++ b/src/cmd/compile/internal/typecheck/subr.go
@@ -221,7 +221,7 @@ func CalcMethods(t *types.Type) {
ms = append(ms, t.Methods().Slice()...)
sort.Sort(types.MethodsByName(ms))
- t.AllMethods().Set(ms)
+ t.SetAllMethods(ms)
}
// adddot1 returns the number of fields or methods named s at depth d in Type t.
@@ -257,7 +257,13 @@ func adddot1(s *types.Sym, t *types.Type, d int, save **types.Field, ignorecase
return c, false
}
- for _, f := range u.Fields().Slice() {
+ var fields *types.Fields
+ if u.IsStruct() {
+ fields = u.Fields()
+ } else {
+ fields = u.AllMethods()
+ }
+ for _, f := range fields.Slice() {
if f.Embedded == 0 || f.Sym == nil {
continue
}
@@ -619,7 +625,7 @@ func expand0(t *types.Type) {
}
if u.IsInterface() {
- for _, f := range u.Fields().Slice() {
+ for _, f := range u.AllMethods().Slice() {
if f.Sym.Uniq() {
continue
}
@@ -658,7 +664,13 @@ func expand1(t *types.Type, top bool) {
}
if u.IsStruct() || u.IsInterface() {
- for _, f := range u.Fields().Slice() {
+ var fields *types.Fields
+ if u.IsStruct() {
+ fields = u.Fields()
+ } else {
+ fields = u.AllMethods()
+ }
+ for _, f := range fields.Slice() {
if f.Embedded == 0 {
continue
}
@@ -708,8 +720,8 @@ func implements(t, iface *types.Type, m, samename **types.Field, ptr *int) bool
if t.IsInterface() {
i := 0
- tms := t.Fields().Slice()
- for _, im := range iface.Fields().Slice() {
+ tms := t.AllMethods().Slice()
+ for _, im := range iface.AllMethods().Slice() {
for i < len(tms) && tms[i].Sym != im.Sym {
i++
}
@@ -738,7 +750,7 @@ func implements(t, iface *types.Type, m, samename **types.Field, ptr *int) bool
tms = t.AllMethods().Slice()
}
i := 0
- for _, im := range iface.Fields().Slice() {
+ for _, im := range iface.AllMethods().Slice() {
if im.Broke() {
continue
}
@@ -806,7 +818,13 @@ func lookdot0(s *types.Sym, t *types.Type, save **types.Field, ignorecase bool)
c := 0
if u.IsStruct() || u.IsInterface() {
- for _, f := range u.Fields().Slice() {
+ var fields *types.Fields
+ if u.IsStruct() {
+ fields = u.Fields()
+ } else {
+ fields = u.AllMethods()
+ }
+ for _, f := range fields.Slice() {
if f.Sym == s || (ignorecase && f.IsMethod() && strings.EqualFold(f.Sym.Name, s.Name)) {
if save != nil {
*save = f