From 9e5c96802164c17df6667047932142eb6894e6d3 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Sun, 22 May 2022 02:14:46 +0700 Subject: [PATCH] [dev.unified] cmd/compile: visit LHS before RHS/X in assign/for statement Unified IR used to visit RHS/X before LHS in assign/for statements for satisfying toolstash in quirksmode. After CL 385998, unified IR quirks mode was gone, the constraint to visit RHS/X first is no longer necessary. Change-Id: I1c3825168b67fb094928f5aa21748a3c81b118ce Reviewed-on: https://go-review.googlesource.com/c/go/+/410343 Run-TryBot: Cuong Manh Le Reviewed-by: Cherry Mui Reviewed-by: Matthew Dempsky TryBot-Result: Gopher Robot --- src/cmd/compile/internal/noder/reader.go | 8 ++------ src/cmd/compile/internal/noder/writer.go | 6 +++--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index 635f02630f..7c35172f12 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -1224,10 +1224,8 @@ func (r *reader) stmt1(tag codeStmt, out *ir.Nodes) ir.Node { case stmtAssign: pos := r.pos() - // TODO(mdempsky): After quirks mode is gone, swap these - // statements so we visit LHS before RHS again. - rhs := r.exprList() names, lhs := r.assignList() + rhs := r.exprList() if len(rhs) == 0 { for _, name := range names { @@ -1368,10 +1366,8 @@ func (r *reader) forStmt(label *types.Sym) ir.Node { if r.Bool() { pos := r.pos() - // TODO(mdempsky): After quirks mode is gone, swap these - // statements so we read LHS before X again. - x := r.expr() names, lhs := r.assignList() + x := r.expr() body := r.blockStmt() r.closeAnotherScope() diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index 2fb1583437..c3955c2cb6 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -954,8 +954,8 @@ func (w *writer) stmt1(stmt syntax.Stmt) { default: w.Code(stmtAssign) w.pos(stmt) - w.exprList(stmt.Rhs) w.assignList(stmt.Lhs) + w.exprList(stmt.Rhs) } case *syntax.BlockStmt: @@ -1065,8 +1065,8 @@ func (w *writer) declStmt(decl syntax.Decl) { case *syntax.VarDecl: w.Code(stmtAssign) w.pos(decl) - w.exprList(decl.Values) w.assignList(namesAsExpr(decl.NameList)) + w.exprList(decl.Values) } } @@ -1083,8 +1083,8 @@ func (w *writer) forStmt(stmt *syntax.ForStmt) { if rang, ok := stmt.Init.(*syntax.RangeClause); w.Bool(ok) { w.pos(rang) - w.expr(rang.X) w.assignList(rang.Lhs) + w.expr(rang.X) } else { w.pos(stmt) w.stmt(stmt.Init)