summaryrefslogtreecommitdiff
path: root/src/cmd/gc/select.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-08-05 00:42:44 -0700
committerRuss Cox <rsc@golang.org>2009-08-05 00:42:44 -0700
commit30e73702a2dd55ae8a3db655ea55d3f10ac8a139 (patch)
tree8892ac9dfa9deb1c105e24209e662f966c2bfdef /src/cmd/gc/select.c
parentb87c44de63da4b9c1757ae49ff83b353da9f4a63 (diff)
downloadgo-30e73702a2dd55ae8a3db655ea55d3f10ac8a139.tar.gz
delay := processing
R=ken OCL=32772 CL=32772
Diffstat (limited to 'src/cmd/gc/select.c')
-rw-r--r--src/cmd/gc/select.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/cmd/gc/select.c b/src/cmd/gc/select.c
index 2fd63cc7c..7a90ae2c9 100644
--- a/src/cmd/gc/select.c
+++ b/src/cmd/gc/select.c
@@ -66,6 +66,10 @@ typecheckselect(Node *sel)
ncase->list = nil;
setlineno(n);
switch(n->op) {
+ default:
+ yyerror("select case must be receive, send or assign recv");;
+ break;
+
case OAS:
// convert x = <-c into OSELRECV(x, c)
if(n->right->op != ORECV) {
@@ -123,6 +127,10 @@ walkselect(Node *sel)
r = nod(OIF, N, N);
r->nbody = ncase->ninit;
ncase->ninit = nil;
+ if(n != nil) {
+ r->nbody = concat(r->nbody, n->ninit);
+ n->ninit = nil;
+ }
if(n == nil) {
// selectdefault(sel *byte);
r->ntest = mkcall("selectdefault", types[TBOOL], &init, var);