mirror of
https://github.com/golang/go
synced 2024-11-23 04:40:09 -07:00
spec: permit parentheses around builtin function names
Not a language change. This is simply documenting the status quo which permits builtin function names to be parenthesized in calls; e.g., both len(s) and (((len)))(s) are accepted by all compilers and go/types. Changed the grammar by merging the details of BuiltinCall with ordinary Calls. Also renamed the Call production to Arguments which more clearly identifies that part of the grammar and also matches better with its counterpart on the declaration side (Parameters). The fact that the first argument can be a type (for builtins) or cannot be a type (for regular function calls) is expressed in the prose, no need to make the grammar more complicated. Fixes #9001. LGTM=iant, r, rsc R=r, rsc, iant, ken, dave CC=golang-codereviews https://golang.org/cl/160570043
This commit is contained in:
parent
e71c9cbe26
commit
ccc713c7ca
@ -1,6 +1,6 @@
|
||||
<!--{
|
||||
"Title": "The Go Programming Language Specification",
|
||||
"Subtitle": "Version of October 23, 2014",
|
||||
"Subtitle": "Version of October 27, 2014",
|
||||
"Path": "/ref/spec"
|
||||
}-->
|
||||
|
||||
@ -2449,12 +2449,11 @@ Primary expressions are the operands for unary and binary expressions.
|
||||
PrimaryExpr =
|
||||
Operand |
|
||||
Conversion |
|
||||
BuiltinCall |
|
||||
PrimaryExpr Selector |
|
||||
PrimaryExpr Index |
|
||||
PrimaryExpr Slice |
|
||||
PrimaryExpr TypeAssertion |
|
||||
PrimaryExpr Call .
|
||||
PrimaryExpr Arguments .
|
||||
|
||||
Selector = "." identifier .
|
||||
Index = "[" Expression "]" .
|
||||
@ -2462,8 +2461,7 @@ Slice = "[" ( [ Expression ] ":" [ Expression ] ) |
|
||||
( [ Expression ] ":" Expression ":" Expression )
|
||||
"]" .
|
||||
TypeAssertion = "." "(" Type ")" .
|
||||
Call = "(" [ ArgumentList [ "," ] ] ")" .
|
||||
ArgumentList = ExpressionList [ "..." ] .
|
||||
Arguments = "(" [ ( ExpressionList | Type [ "," ExpressionList ] ) [ "..." ] [ "," ] ] ")" .
|
||||
</pre>
|
||||
|
||||
|
||||
@ -5371,11 +5369,6 @@ so they can only appear in <a href="#Calls">call expressions</a>;
|
||||
they cannot be used as function values.
|
||||
</p>
|
||||
|
||||
<pre class="ebnf">
|
||||
BuiltinCall = identifier "(" [ BuiltinArgs [ "," ] ] ")" .
|
||||
BuiltinArgs = Type [ "," ArgumentList ] | ArgumentList .
|
||||
</pre>
|
||||
|
||||
<h3 id="Close">Close</h3>
|
||||
|
||||
<p>
|
||||
|
Loading…
Reference in New Issue
Block a user