]> Cypherpunks repositories - gostls13.git/commitdiff
Revert "go/types, types2: don't register interface methods in Info.Types map"
authorRobert Findley <rfindley@google.com>
Mon, 23 Jun 2025 14:04:06 +0000 (07:04 -0700)
committerGopher Robot <gobot@golang.org>
Mon, 23 Jun 2025 15:16:05 +0000 (08:16 -0700)
This reverts commit 4ac729283c807cdbe0f6c7041f21606019b722cf.

Reason for revert: changes semantics of types.Info.TypeOf; introduces new inconsistency around FieldList types.

For #74303

Change-Id: Ib99558c95f1b615fa9a02b028500ed230c8bb185
Reviewed-on: https://go-review.googlesource.com/c/go/+/683297
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Robert Findley <rfindley@google.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
src/cmd/compile/internal/types2/interface.go
src/go/types/interface.go

index b32e5c21fe250c20d02fb58c468adb0df5b39475..522f1dd3fe382fe2095807ad5089c08f78761b4a 100644 (file)
@@ -137,19 +137,17 @@ func (check *Checker) interfaceType(ityp *Interface, iface *syntax.InterfaceType
                name := f.Name.Value
                if name == "_" {
                        check.error(f.Name, BlankIfaceMethod, "methods must have a unique non-blank name")
-                       continue // ignore method
+                       continue // ignore
                }
 
-               // Type-check method declaration.
-               // Note: Don't call check.typ(f.Type) as that would record
-               // the method incorrectly as a type expression in Info.Types.
-               ftyp, _ := f.Type.(*syntax.FuncType)
-               if ftyp == nil {
-                       check.errorf(f.Type, InvalidSyntaxTree, "%s is not a method signature", f.Type)
-                       continue // ignore method
+               typ := check.typ(f.Type)
+               sig, _ := typ.(*Signature)
+               if sig == nil {
+                       if isValid(typ) {
+                               check.errorf(f.Type, InvalidSyntaxTree, "%s is not a method signature", typ)
+                       }
+                       continue // ignore
                }
-               sig := new(Signature)
-               check.funcType(sig, nil, nil, ftyp)
 
                // use named receiver type if available (for better error messages)
                var recvTyp Type = ityp
index 6bcae7aef0e02f0f4b9350761d4c197cca86d59f..5f9c88d8f5c833d3a162c40c11bf4f3c9643bf99 100644 (file)
@@ -176,19 +176,17 @@ func (check *Checker) interfaceType(ityp *Interface, iface *ast.InterfaceType, d
                name := f.Names[0]
                if name.Name == "_" {
                        check.error(name, BlankIfaceMethod, "methods must have a unique non-blank name")
-                       continue // ignore method
+                       continue // ignore
                }
 
-               // Type-check method declaration.
-               // Note: Don't call check.typ(f.Type) as that would record
-               // the method incorrectly as a type expression in Info.Types.
-               ftyp, _ := f.Type.(*ast.FuncType)
-               if ftyp == nil {
-                       check.errorf(f.Type, InvalidSyntaxTree, "%s is not a method signature", f.Type)
-                       continue // ignore method
+               typ := check.typ(f.Type)
+               sig, _ := typ.(*Signature)
+               if sig == nil {
+                       if isValid(typ) {
+                               check.errorf(f.Type, InvalidSyntaxTree, "%s is not a method signature", typ)
+                       }
+                       continue // ignore
                }
-               sig := new(Signature)
-               check.funcType(sig, nil, ftyp)
 
                // The go/parser doesn't accept method type parameters but an ast.FuncType may have them.
                if sig.tparams != nil {