mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[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>
This commit is contained in:
parent
2f3ef73e18
commit
e7219cc093
3 changed files with 78 additions and 75 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue