diff options
author | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2021-02-17 11:36:58 +0700 |
---|---|---|
committer | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2021-02-23 05:02:26 +0000 |
commit | 4048491234203e1ee803d489d11a02c90b14596a (patch) | |
tree | 39a9f23ff4b0158b098305e810cc63c7e9de7a2e /src/runtime/chan.go | |
parent | 5e804ba17da12f53c0d66c1ce1e0e7845feb7f69 (diff) | |
download | go-4048491234203e1ee803d489d11a02c90b14596a.tar.gz go-4048491234203e1ee803d489d11a02c90b14596a.zip |
cmd/compile,runtime: make selectnbrecv return two values
The only different between selectnbrecv and selectnbrecv2 is the later
set the input pointer value by second return value from chanrecv.
So by making selectnbrecv return two values from chanrecv, we can get
rid of selectnbrecv2, the compiler can now call only selectnbrecv and
generate simpler code.
Change-Id: Ifaf6cf1314c4f47b06ed9606b1578319be808507
Reviewed-on: https://go-review.googlesource.com/c/go/+/292890
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/runtime/chan.go')
-rw-r--r-- | src/runtime/chan.go | 30 |
1 files changed, 3 insertions, 27 deletions
diff --git a/src/runtime/chan.go b/src/runtime/chan.go index ba56e2cc40..f2a75b30f4 100644 --- a/src/runtime/chan.go +++ b/src/runtime/chan.go @@ -690,28 +690,6 @@ func selectnbsend(c *hchan, elem unsafe.Pointer) (selected bool) { // compiler implements // // select { -// case v = <-c: -// ... foo -// default: -// ... bar -// } -// -// as -// -// if selectnbrecv(&v, c) { -// ... foo -// } else { -// ... bar -// } -// -func selectnbrecv(elem unsafe.Pointer, c *hchan) (selected bool) { - selected, _ = chanrecv(c, elem, false) - return -} - -// compiler implements -// -// select { // case v, ok = <-c: // ... foo // default: @@ -720,16 +698,14 @@ func selectnbrecv(elem unsafe.Pointer, c *hchan) (selected bool) { // // as // -// if c != nil && selectnbrecv2(&v, &ok, c) { +// if selected, ok = selectnbrecv(&v, c); selected { // ... foo // } else { // ... bar // } // -func selectnbrecv2(elem unsafe.Pointer, received *bool, c *hchan) (selected bool) { - // TODO(khr): just return 2 values from this function, now that it is in Go. - selected, *received = chanrecv(c, elem, false) - return +func selectnbrecv(elem unsafe.Pointer, c *hchan) (selected, received bool) { + return chanrecv(c, elem, false) } //go:linkname reflect_chansend reflect.chansend |