diff options
| author | Dan Scales <danscales@google.com> | 2021-01-30 08:43:58 -0800 |
|---|---|---|
| committer | Dan Scales <danscales@google.com> | 2021-02-01 22:05:52 +0000 |
| commit | 13a741298377d30fc2b3fc51fa9aa52eed6d56e4 (patch) | |
| tree | 15fdb1b080662df49d9b67d5bf884cbe871ee465 /src/cmd/compile/internal/noder/expr.go | |
| parent | 0aafd6912422570625414da6e5ed5ba2c371fcec (diff) | |
| download | go-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.go | 11 |
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: |
