mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: improve single blank variable handling in walkrange
Refactor walkrange to treat "for _ = range a" as "for range a". This avoids generating some later discarded nodes in the compiler. Passes toolstash -cmp. Change-Id: Ifb2e1ca3b8519cbb67e8ad5aad514af9d18f1ec4 Reviewed-on: https://go-review.googlesource.com/61017 Run-TryBot: Martin Möhrmann <moehrmann@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
78c4dc3709
commit
137e4a6c63
2 changed files with 65 additions and 9 deletions
|
|
@ -155,27 +155,36 @@ func walkrange(n *Node) *Node {
|
|||
lno := setlineno(a)
|
||||
n.Right = nil
|
||||
|
||||
var v1 *Node
|
||||
if n.List.Len() != 0 {
|
||||
var v1, v2 *Node
|
||||
l := n.List.Len()
|
||||
if l > 0 {
|
||||
v1 = n.List.First()
|
||||
}
|
||||
var v2 *Node
|
||||
if n.List.Len() > 1 && !isblank(n.List.Second()) {
|
||||
|
||||
if l > 1 {
|
||||
v2 = n.List.Second()
|
||||
}
|
||||
|
||||
if isblank(v2) {
|
||||
v2 = nil
|
||||
}
|
||||
|
||||
if isblank(v1) && v2 == nil {
|
||||
v1 = nil
|
||||
}
|
||||
|
||||
if v1 == nil && v2 != nil {
|
||||
Fatalf("walkrange: v2 != nil while v1 == nil")
|
||||
}
|
||||
|
||||
var ifGuard *Node
|
||||
|
||||
translatedLoopOp := OFOR
|
||||
|
||||
// n.List has no meaning anymore, clear it
|
||||
// to avoid erroneous processing by racewalk.
|
||||
n.List.Set(nil)
|
||||
|
||||
var ifGuard *Node
|
||||
|
||||
translatedLoopOp := OFOR
|
||||
|
||||
var body []*Node
|
||||
var init []*Node
|
||||
switch t.Etype {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue