aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder/reader.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2022-06-24 14:19:06 -0700
committerMatthew Dempsky <mdempsky@google.com>2022-06-30 18:42:06 +0000
commite7219cc093aca07bdb7179fa1a42d44e56eaf9d4 (patch)
treef6e255cce505b979e91914abec65ee7bb9725f9f /src/cmd/compile/internal/noder/reader.go
parent2f3ef73e18ba9e2433248ca2f5d9c2fb3647a07d (diff)
downloadgo-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.go29
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()