mirror of
https://github.com/golang/go.git
synced 2025-11-11 22:21:06 +00:00
cmd/compile/internal/gc: cleanup walkselectcases slightly
Remove some unnecessary code. Most significantly, we can skip testing
"if ch == nil { block() }", because this is already the semantics
implied by normal send/receive operations.
Updates #40410.
Change-Id: I4acd33383cc876719fc3b998d85244d4ac1ff9d9
Reviewed-on: https://go-review.googlesource.com/c/go/+/245126
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This commit is contained in:
parent
fe23ba4a14
commit
a401718575
1 changed files with 2 additions and 18 deletions
|
|
@ -123,17 +123,14 @@ func walkselectcases(cases *Nodes) []*Node {
|
|||
n := cas.Left
|
||||
l = append(l, n.Ninit.Slice()...)
|
||||
n.Ninit.Set(nil)
|
||||
var ch *Node
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatalf("select %v", n.Op)
|
||||
|
||||
// ok already
|
||||
case OSEND:
|
||||
ch = n.Left
|
||||
// already ok
|
||||
|
||||
case OSELRECV, OSELRECV2:
|
||||
ch = n.Right.Left
|
||||
if n.Op == OSELRECV || n.List.Len() == 0 {
|
||||
if n.Left == nil {
|
||||
n = n.Right
|
||||
|
|
@ -157,16 +154,7 @@ func walkselectcases(cases *Nodes) []*Node {
|
|||
n = typecheck(n, ctxStmt)
|
||||
}
|
||||
|
||||
// if ch == nil { block() }; n;
|
||||
a := nod(OIF, nil, nil)
|
||||
|
||||
a.Left = nod(OEQ, ch, nodnil())
|
||||
var ln Nodes
|
||||
ln.Set(l)
|
||||
a.Nbody.Set1(mkcall("block", nil, &ln))
|
||||
l = ln.Slice()
|
||||
a = typecheck(a, ctxStmt)
|
||||
l = append(l, a, n)
|
||||
l = append(l, n)
|
||||
}
|
||||
|
||||
l = append(l, cas.Nbody.Slice()...)
|
||||
|
|
@ -223,8 +211,6 @@ func walkselectcases(cases *Nodes) []*Node {
|
|||
|
||||
case OSELRECV:
|
||||
// if selectnbrecv(&v, c) { body } else { default body }
|
||||
r = nod(OIF, nil, nil)
|
||||
r.Ninit.Set(cas.Ninit.Slice())
|
||||
ch := n.Right.Left
|
||||
elem := n.Left
|
||||
if elem == nil {
|
||||
|
|
@ -234,8 +220,6 @@ func walkselectcases(cases *Nodes) []*Node {
|
|||
|
||||
case OSELRECV2:
|
||||
// if selectnbrecv2(&v, &received, c) { body } else { default body }
|
||||
r = nod(OIF, nil, nil)
|
||||
r.Ninit.Set(cas.Ninit.Slice())
|
||||
ch := n.Right.Left
|
||||
elem := n.Left
|
||||
if elem == nil {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue