diff options
| author | Matthew Dempsky <mdempsky@google.com> | 2022-06-21 04:41:38 -0700 |
|---|---|---|
| committer | Matthew Dempsky <mdempsky@google.com> | 2022-06-23 21:53:38 +0000 |
| commit | 20e1d5ac8cc269c8fc40d08e0b9e14ffe99d19d3 (patch) | |
| tree | d77ad61c2c6a765ad229bdc027b562c86b9f0609 /src/cmd/compile/internal/noder/reader.go | |
| parent | 61ae2b734cdbc0db342036a2a026fe1fccdccde3 (diff) | |
| download | go-20e1d5ac8cc269c8fc40d08e0b9e14ffe99d19d3.tar.xz | |
[dev.unified] cmd/compile: special case f(g()) calls in Unified IR
For f(g()) calls where g() is multi-valued, we may need to insert
implicit conversions to convert g()'s result values to f()'s parameter
types. This CL refactors code slightly so this will be easier to
handle.
Change-Id: I3a432220dcb62daecf9a66030e8fa1f097e95f95
Reviewed-on: https://go-review.googlesource.com/c/go/+/413362
Reviewed-by: David Chase <drchase@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/cmd/compile/internal/noder/reader.go')
| -rw-r--r-- | src/cmd/compile/internal/noder/reader.go | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index aa2cccf86b..bed56d1be7 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -1735,8 +1735,15 @@ func (r *reader) expr() (res ir.Node) { fun = typecheck.Callee(ir.NewSelectorExpr(pos, ir.OXDOT, fun, sym)) } pos := r.pos() - args := r.exprs() - dots := r.Bool() + var args ir.Nodes + var dots bool + if r.Bool() { // f(g()) + call := r.expr() + args = []ir.Node{call} + } else { + args = r.exprs() + dots = r.Bool() + } n := typecheck.Call(pos, fun, args, dots) switch n.Op() { case ir.OAPPEND: |
