aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder/expr.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/compile/internal/noder/expr.go')
-rw-r--r--src/cmd/compile/internal/noder/expr.go15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/noder/expr.go b/src/cmd/compile/internal/noder/expr.go
index 3fded144dc..b99f5a4cdd 100644
--- a/src/cmd/compile/internal/noder/expr.go
+++ b/src/cmd/compile/internal/noder/expr.go
@@ -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: