aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder/expr.go
diff options
context:
space:
mode:
authorDan Scales <danscales@google.com>2021-01-30 08:43:58 -0800
committerDan Scales <danscales@google.com>2021-02-01 22:05:52 +0000
commit13a741298377d30fc2b3fc51fa9aa52eed6d56e4 (patch)
tree15fdb1b080662df49d9b67d5bf884cbe871ee465 /src/cmd/compile/internal/noder/expr.go
parent0aafd6912422570625414da6e5ed5ba2c371fcec (diff)
downloadgo-13a741298377d30fc2b3fc51fa9aa52eed6d56e4.tar.xz
[dev.typeparams] Parse a generic type arg for generic function call
Will now run "go tool compile -G=2 -W=2" on a simple generic function with one type parameter and a call to that function with one explicit type argument. Next change will handle multiple type arguments. Change-Id: Ia7d17ea2a02bf99bd50e673ac80ae4aad4c48440 Reviewed-on: https://go-review.googlesource.com/c/go/+/288432 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>
Diffstat (limited to 'src/cmd/compile/internal/noder/expr.go')
-rw-r--r--src/cmd/compile/internal/noder/expr.go11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/noder/expr.go b/src/cmd/compile/internal/noder/expr.go
index 9212c67213..79b94638e8 100644
--- a/src/cmd/compile/internal/noder/expr.go
+++ b/src/cmd/compile/internal/noder/expr.go
@@ -93,9 +93,16 @@ func (g *irgen) expr0(typ types2.Type, expr syntax.Expr) ir.Node {
case *syntax.AssertExpr:
return Assert(pos, g.expr(expr.X), g.typeExpr(expr.Type))
case *syntax.CallExpr:
- return Call(pos, g.expr(expr.Fun), g.exprs(expr.ArgList), expr.HasDots)
+ def := g.info.Inferred[expr]
+ if len(def.Targs) > 0 {
+ panic("Inferred type arguments not handled yet")
+ }
+ return Call(pos, g.typ(typ), g.expr(expr.Fun), g.exprs(expr.ArgList), expr.HasDots)
case *syntax.IndexExpr:
- return Index(pos, g.expr(expr.X), g.expr(expr.Index))
+ if _, ok := expr.Index.(*syntax.ListExpr); ok {
+ panic("more than one type argument")
+ }
+ return Index(pos, g.typ(typ), g.expr(expr.X), g.expr(expr.Index))
case *syntax.ParenExpr:
return g.expr(expr.X) // skip parens; unneeded after parse+typecheck
case *syntax.SelectorExpr: