go/types: allow embedding overlapping interfaces
Quietly drop duplicate methods from embedded interfaces if they have an identical signature to existing methods. Instead of adjusting the prior syntax-based only method set computation where methods don't have signature information (and thus where de-duplication according to the new rules would have been somewhat tricky to get right), this change completely rewrites interface method set computation, taking a page from the cmd/compiler's implementation. In a first pass, when type-checking interfaces, explicit methods and embedded interfaces are collected, but the interfaces are not "expanded", that is the final method set computation is done lazily, either when needed for method lookup, or at the end of type-checking. While this is a substantial rewrite, it allows us to get rid of the separate (duplicate and delicate) syntactical method set computation and generally simplifies checking of interface types significantly. A few (esoteric) test cases now have slightly different error messages but all tests that are accepted by cmd/compile are also accepted by go/types. (This is a replacement for golang.org/cl/190258.) Updates #6977. Change-Id: Ic8b9321374ab4f617498d97c12871b69d1119735 Reviewed-on: https://go-review.googlesource.com/c/go/+/191257Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Showing
This diff is collapsed.
Please register or sign in to comment