Commit c1347186 authored by Robert Griesemer's avatar Robert Griesemer

undo CL 4428057 / 19e540fc7d7d

The CL introduces inconsistencies with respect to
the use of parentheses/grouping of receive operations.

««« original CL description
spec: narrow syntax for expression and select statements

This is not a language change, it simply expresses the
accepted cases explicitly in the respective productions.

R=rsc, r, iant
CC=golang-dev
https://golang.org/cl/4428057
»»»

R=golang-dev, rsc1
CC=golang-dev
https://golang.org/cl/4444080
parent f5fa215d
<!-- title The Go Programming Language Specification --> <!-- title The Go Programming Language Specification -->
<!-- subtitle Version of Apr 29, 2011 --> <!-- subtitle Version of Apr 22, 2011 -->
<!-- <!--
TODO TODO
...@@ -3035,7 +3035,7 @@ f(&lt;-ch) ...@@ -3035,7 +3035,7 @@ f(&lt;-ch)
</pre> </pre>
<p> <p>
A receive operation used in an assignment or initialization of the form A receive expression used in an assignment or initialization of the form
</p> </p>
<pre> <pre>
...@@ -3521,14 +3521,13 @@ Error: log.Panic("error encountered") ...@@ -3521,14 +3521,13 @@ Error: log.Panic("error encountered")
<h3 id="Expression_statements">Expression statements</h3> <h3 id="Expression_statements">Expression statements</h3>
<p> <p>
Function calls, method calls, and Function calls, method calls, and receive operations
<a href="#Receive_operator">receive operations</a>
can appear in statement context. can appear in statement context.
</p> </p>
<pre class="ebnf"> <pre class="ebnf">
ExpressionStmt = PrimaryExpr Call | RecvExpr . ExpressionStmt = Expression .
RecvExpr = "&lt;-" UnaryExpr .
</pre> </pre>
<pre> <pre>
...@@ -4088,9 +4087,11 @@ SelectStmt = "select" "{" { CommClause } "}" . ...@@ -4088,9 +4087,11 @@ SelectStmt = "select" "{" { CommClause } "}" .
CommClause = CommCase ":" { Statement ";" } . CommClause = CommCase ":" { Statement ";" } .
CommCase = "case" ( SendStmt | RecvStmt ) | "default" . CommCase = "case" ( SendStmt | RecvStmt ) | "default" .
RecvStmt = [ Expression [ "," Expression ] ( "=" | ":=" ) ] RecvExpr . RecvStmt = [ Expression [ "," Expression ] ( "=" | ":=" ) ] RecvExpr .
RecvExpr = Expression .
</pre> </pre>
<p> <p>
RecvExpr must be a <a href="#Receive_operator">receive operation</a>.
For all the cases in the "select" For all the cases in the "select"
statement, the channel expressions are evaluated in top-to-bottom order, along with statement, the channel expressions are evaluated in top-to-bottom order, along with
any expressions that appear on the right hand side of send statements. any expressions that appear on the right hand side of send statements.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment