]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/typecheck: use types.IsMethodApplicable
authorMatthew Dempsky <mdempsky@google.com>
Mon, 21 Aug 2023 01:15:43 +0000 (18:15 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 22 Aug 2023 21:18:01 +0000 (21:18 +0000)
In checking whether a type implements an interface, there's this
complex predicate spanning multiple lines, which is very obtuse.

So let's just use the helper function we already have in package types
instead.

Change-Id: I80f69d41c2bee8d6807601cf913840fa4f042b5e
Reviewed-on: https://go-review.googlesource.com/c/go/+/521435
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Auto-Submit: Matthew Dempsky <mdempsky@google.com>

src/cmd/compile/internal/typecheck/subr.go

index d72807a778f97124e340eab50035bd3819f37280..867eee28e72522e70389a4681e3db555af8eb8cc 100644 (file)
@@ -763,12 +763,10 @@ func implements(t, iface *types.Type, m, samename **types.Field, ptr *int) bool
                        *ptr = 0
                        return false
                }
-               followptr := tm.Embedded == 2
 
                // if pointer receiver in method,
                // the method does not exist for value types.
-               rcvr := tm.Type.Recv().Type
-               if rcvr.IsPtr() && !t0.IsPtr() && !followptr && !types.IsInterfaceMethod(tm.Type) {
+               if !types.IsMethodApplicable(t0, tm) {
                        if false && base.Flag.LowerR != 0 {
                                base.Errorf("interface pointer mismatch")
                        }