From: griesemer Date: Tue, 15 Aug 2017 11:46:16 +0000 (+0200) Subject: go/types: document that Signature.Recv() is ignored for type identity X-Git-Tag: go1.10beta1~1522 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f6f125dd072ed16efdede5a28defe7d8c552a02c;p=gostls13.git go/types: document that Signature.Recv() is ignored for type identity Fixes #21367. Change-Id: I50704c5a613abcce57b340db8992c7bcb1cb728f Reviewed-on: https://go-review.googlesource.com/55710 Reviewed-by: Alan Donovan --- diff --git a/src/go/types/predicates.go b/src/go/types/predicates.go index c3b87dd9cd..3aa4878cce 100644 --- a/src/go/types/predicates.go +++ b/src/go/types/predicates.go @@ -110,12 +110,14 @@ func hasNil(typ Type) bool { return false } -// Identical reports whether x and y are identical. +// Identical reports whether x and y are identical types. +// Receivers of Signature types are ignored. func Identical(x, y Type) bool { return identical(x, y, true, nil) } -// IdenticalIgnoreTags reports whether x and y are identical if tags are ignored. +// IdenticalIgnoreTags reports whether x and y are identical types if tags are ignored. +// Receivers of Signature types are ignored. func IdenticalIgnoreTags(x, y Type) bool { return identical(x, y, false, nil) } diff --git a/src/go/types/type.go b/src/go/types/type.go index a0a1238395..065c79c505 100644 --- a/src/go/types/type.go +++ b/src/go/types/type.go @@ -191,6 +191,7 @@ func (t *Tuple) Len() int { func (t *Tuple) At(i int) *Var { return t.vars[i] } // A Signature represents a (non-builtin) function or method type. +// The receiver is ignored when comparing signatures for identity. type Signature struct { // We need to keep the scope in Signature (rather than passing it around // and store it in the Func Object) because when type-checking a function @@ -221,7 +222,7 @@ func NewSignature(recv *Var, params, results *Tuple, variadic bool) *Signature { } // Recv returns the receiver of signature s (if a method), or nil if a -// function. +// function. It is ignored when comparing signatures for identity. // // For an abstract method, Recv returns the enclosing interface either // as a *Named or an *Interface. Due to embedding, an interface may