]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile: use new converter functions rather than methods (fix...
authorRobert Griesemer <gri@golang.org>
Thu, 18 Feb 2021 23:09:38 +0000 (15:09 -0800)
committerRobert Griesemer <gri@golang.org>
Thu, 18 Feb 2021 23:28:36 +0000 (23:28 +0000)
Change-Id: I4dcaca1f2e67ee32f70c22b2efa586232ca519bb
Reviewed-on: https://go-review.googlesource.com/c/go/+/293958
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/compile/internal/noder/expr.go
src/cmd/compile/internal/types2/selection.go
src/cmd/compile/internal/types2/type.go

index 2819c8252d046ab233e0b373fdca1f98b7de779e..b166d34eadc9f00b69bb960011ca5e9ce69b7792 100644 (file)
@@ -237,15 +237,15 @@ func (g *irgen) selectorExpr(pos src.XPos, typ types2.Type, expr *syntax.Selecto
                        }
                        recvType2Base := recvType2
                        if wantPtr {
-                               recvType2Base = recvType2.Pointer().Elem()
+                               recvType2Base = types2.AsPointer(recvType2).Elem()
                        }
-                       if len(recvType2Base.Named().TParams()) > 0 {
+                       if len(types2.AsNamed(recvType2Base).TParams()) > 0 {
                                // recvType2 is the original generic type that is
                                // instantiated for this method call.
                                // selinfo.Recv() is the instantiated type
                                recvType2 = recvType2Base
                                // method is the generic method associated with the gen type
-                               method := g.obj(recvType2.Named().Method(last))
+                               method := g.obj(types2.AsNamed(recvType2).Method(last))
                                n = ir.NewSelectorExpr(pos, ir.OCALLPART, x, method.Sym())
                                n.(*ir.SelectorExpr).Selection = types.NewField(pos, method.Sym(), method.Type())
                                n.(*ir.SelectorExpr).Selection.Nname = method
index 4358458b8881489b1dc56d74509fb3eb3af5b8a1..67d1aa7e1df6147ce8a035568bf2252a39593918 100644 (file)
@@ -55,11 +55,11 @@ func (s *Selection) Recv() Type { return s.recv }
 // TODO(gri):  fix this bug.
 func (s *Selection) TArgs() []Type {
        r := s.recv
-       if r.Pointer() != nil {
-               r = r.Pointer().Elem()
+       if p := asPointer(r); p != nil {
+               r = p.Elem()
        }
-       if r.Named() != nil {
-               return r.Named().TArgs()
+       if n := asNamed(r); n != nil {
+               return n.TArgs()
        }
        // The base type (after skipping any pointer) must be a Named type. The
        // bug is that sometimes it can be an instance type (which is supposed to
index a9ac90246d4d5d7c96f5e31db7b1d8882a5f3b48..1025c18b23bf0db7dc52909eeec0c47894d351a0 100644 (file)
@@ -971,3 +971,8 @@ func asTypeParam(t Type) *TypeParam {
        u, _ := under(t).(*TypeParam)
        return u
 }
+
+// Exported for the compiler.
+
+func AsPointer(t Type) *Pointer { return asPointer(t) }
+func AsNamed(t Type) *Named     { return asNamed(t) }