mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: remove types2.(*Selection).TArgs(), now that instance bug seems fixed
Previously, we would sometimes see an internal (*instance) type for a receiver of a types2 method, which was a bug. To deal with that, we put in an extra (*Selection).TArgs() method. However, that (*instance) type is no longer showing up for receivers, so we can remove the types2 method we added and do the work with existing types2 API methods. Change-Id: I03e68f5bbaaf82fe706b6efecbb02e951bbd3cd4 Reviewed-on: https://go-review.googlesource.com/c/go/+/298869 Run-TryBot: Dan Scales <danscales@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org> Trust: Dan Scales <danscales@google.com>
This commit is contained in:
parent
d891ebdce1
commit
96a96a9058
2 changed files with 14 additions and 17 deletions
|
|
@ -253,7 +253,7 @@ func (g *irgen) selectorExpr(pos src.XPos, typ types2.Type, expr *syntax.Selecto
|
|||
|
||||
// selinfo.Targs() are the types used to
|
||||
// instantiate the type of receiver
|
||||
targs2 := selinfo.TArgs()
|
||||
targs2 := getTargs(selinfo)
|
||||
targs := make([]ir.Node, len(targs2))
|
||||
for i, targ2 := range targs2 {
|
||||
targs[i] = ir.TypeNode(g.typ(targ2))
|
||||
|
|
@ -279,6 +279,19 @@ func (g *irgen) selectorExpr(pos src.XPos, typ types2.Type, expr *syntax.Selecto
|
|||
return n
|
||||
}
|
||||
|
||||
// getTargs gets the targs associated with the receiver of a selected method
|
||||
func getTargs(selinfo *types2.Selection) []types2.Type {
|
||||
r := selinfo.Recv()
|
||||
if p := types2.AsPointer(r); p != nil {
|
||||
r = p.Elem()
|
||||
}
|
||||
n := types2.AsNamed(r)
|
||||
if n == nil {
|
||||
base.Fatalf("Incorrect type for selinfo %v", selinfo)
|
||||
}
|
||||
return n.TArgs()
|
||||
}
|
||||
|
||||
func (g *irgen) exprList(expr syntax.Expr) []ir.Node {
|
||||
switch expr := expr.(type) {
|
||||
case nil:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue