diff options
| author | Matthew Dempsky <mdempsky@google.com> | 2022-06-24 14:19:06 -0700 |
|---|---|---|
| committer | Matthew Dempsky <mdempsky@google.com> | 2022-06-30 18:42:06 +0000 |
| commit | e7219cc093aca07bdb7179fa1a42d44e56eaf9d4 (patch) | |
| tree | f6e255cce505b979e91914abec65ee7bb9725f9f /src/cmd/compile/internal/noder/reader.go | |
| parent | 2f3ef73e18ba9e2433248ca2f5d9c2fb3647a07d (diff) | |
| download | go-e7219cc093aca07bdb7179fa1a42d44e56eaf9d4.tar.xz | |
[dev.unified] cmd/compile/internal/noder: refactor N:1 expression handling
Pull all multi-value expression handling logic into a new multiExpr
helper method.
Change-Id: I78ec2dfc523abcfa3368a1064df7045aade8e468
Reviewed-on: https://go-review.googlesource.com/c/go/+/415243
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd/compile/internal/noder/reader.go')
| -rw-r--r-- | src/cmd/compile/internal/noder/reader.go | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index c8ed8552cd..ea1465693c 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -1240,7 +1240,7 @@ func (r *reader) stmt1(tag codeStmt, out *ir.Nodes) ir.Node { pos := r.pos() names, lhs := r.assignList() - rhs := r.exprList() + rhs := r.multiExpr() if len(rhs) == 0 { for _, name := range names { @@ -1308,7 +1308,7 @@ func (r *reader) stmt1(tag codeStmt, out *ir.Nodes) ir.Node { case stmtReturn: pos := r.pos() - results := r.exprList() + results := r.multiExpr() return ir.NewReturnStmt(pos, results) case stmtSelect: @@ -1734,15 +1734,8 @@ func (r *reader) expr() (res ir.Node) { fun = typecheck.Callee(ir.NewSelectorExpr(pos, ir.OXDOT, fun, sym)) } pos := r.pos() - 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() - } + args := r.multiExpr() + dots := r.Bool() n := typecheck.Call(pos, fun, args, dots) switch n.Op() { case ir.OAPPEND: @@ -1814,6 +1807,20 @@ func (r *reader) optExpr() ir.Node { return nil } +func (r *reader) multiExpr() []ir.Node { + r.Sync(pkgbits.SyncMultiExpr) + + exprs := make([]ir.Node, r.Len()) + if len(exprs) == 0 { + return nil + } + + for i := range exprs { + exprs[i] = r.expr() + } + return exprs +} + func (r *reader) compLit() ir.Node { r.Sync(pkgbits.SyncCompLit) pos := r.pos() |
