]> Cypherpunks.ru repositories - gostls13.git/commitdiff
go/types: match types2 errors for incorrect method receiver count
authorRobert Griesemer <gri@golang.org>
Fri, 19 Aug 2022 03:16:15 +0000 (20:16 -0700)
committerRobert Griesemer <gri@golang.org>
Fri, 19 Aug 2022 19:39:53 +0000 (19:39 +0000)
Use "method has no receiver" and "method has multiple receivers"
in error messages for invalid receiver counts, matching the
corresponding types2 errors.

For #54511.

Change-Id: I96fc99440d6206c74e9416069db052234baa8248
Reviewed-on: https://go-review.googlesource.com/c/go/+/424934
Reviewed-by: Alan Donovan <adonovan@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
src/go/types/resolver.go
src/go/types/signature.go
src/go/types/testdata/check/decls2/decls2a.go

index ae21c6d927726d506b2120c74b85f5b62e4d8faf..ae0289ad830d190e9966a6096b2fd289cb1b617b 100644 (file)
@@ -394,7 +394,7 @@ func (check *Checker) collectObjects() {
                                if d.decl.Recv.NumFields() == 0 {
                                        // regular function
                                        if d.decl.Recv != nil {
-                                               check.error(d.decl.Recv, _BadRecv, "method is missing receiver")
+                                               check.error(d.decl.Recv, _BadRecv, "method has no receiver")
                                                // treat as function
                                        }
                                        if name == "init" || (name == "main" && check.pkg.name == "main") {
index 82177a1c58d5a12767cbb2fdfb779f117bd4d6a6..f44d257d8f53b6b2aecff9459176f9d726b9be88 100644 (file)
@@ -196,7 +196,7 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast
                        recv = NewParam(token.NoPos, nil, "", Typ[Invalid]) // ignore recv below
                default:
                        // more than one receiver
-                       check.error(recvList[len(recvList)-1], _InvalidRecv, "method must have exactly one receiver")
+                       check.error(recvList[len(recvList)-1], _InvalidRecv, "method has multiple receivers")
                        fallthrough // continue with first receiver
                case 1:
                        recv = recvList[0]
index 9dff17349c0d0e5a20ec742a37e81b5e8f578f13..cccbf29793d8e31488b6b53816578cb4d3afb977 100644 (file)
@@ -86,11 +86,11 @@ func (ptr /* ERROR "invalid receiver" */ ) _() {}
 func (* /* ERROR "invalid receiver" */ ptr) _() {}
 
 // Methods with zero or multiple receivers.
-func ( /* ERROR "missing receiver" */ ) _() {}
-func (T3, * /* ERROR "exactly one receiver" */ T3) _() {}
-func (T3, T3, T3 /* ERROR "exactly one receiver" */ ) _() {}
-func (a, b /* ERROR "exactly one receiver" */ T3) _() {}
-func (a, b, c /* ERROR "exactly one receiver" */ T3) _() {}
+func ( /* ERROR "method has no receiver" */ ) _() {}
+func (T3, * /* ERROR "method has multiple receivers" */ T3) _() {}
+func (T3, T3, T3 /* ERROR "method has multiple receivers" */ ) _() {}
+func (a, b /* ERROR "method has multiple receivers" */ T3) _() {}
+func (a, b, c /* ERROR "method has multiple receivers" */ T3) _() {}
 
 // Methods associated with non-local or unnamed types.
 func (int /* ERROR "cannot define new methods on non-local type int" */ ) m() {}