From e7219cc093aca07bdb7179fa1a42d44e56eaf9d4 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Fri, 24 Jun 2022 14:19:06 -0700 Subject: [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 Run-TryBot: Matthew Dempsky TryBot-Result: Gopher Robot Reviewed-by: David Chase --- src/cmd/compile/internal/noder/reader.go | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'src/cmd/compile/internal/noder/reader.go') 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() -- cgit v1.3-5-g9baa