]> Cypherpunks.ru repositories - gostls13.git/commit
go/types: allow embedding overlapping interfaces
authorRobert Griesemer <gri@golang.org>
Thu, 22 Aug 2019 00:13:45 +0000 (17:13 -0700)
committerRobert Griesemer <gri@golang.org>
Mon, 26 Aug 2019 16:36:15 +0000 (16:36 +0000)
commita80c5f0588e3835ff37c45a15d179571d9e403e0
tree4fdc8427aa3c37587f6198378f02be31efcdfec2
parent89f02eb8370e31907d33e88f3e25de5176fe84f0
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/+/191257
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
15 files changed:
src/go/types/builtins.go
src/go/types/call.go
src/go/types/check.go
src/go/types/check_test.go
src/go/types/errors.go
src/go/types/interfaces.go [deleted file]
src/go/types/lookup.go
src/go/types/methodset.go
src/go/types/testdata/cycles2.src
src/go/types/testdata/decls0.src
src/go/types/testdata/issue6977.src [new file with mode: 0644]
src/go/types/testdata/issues.src
src/go/types/type.go
src/go/types/typexpr.go
test/fixedbugs/bug211.go [deleted file]