UniqueFormalParameters[Yield, Await] : FormalParameters[?Yield, ?Await]
FormalParameters[Yield, Await] : [empty]
FunctionRestParameter[?Yield, ?Await]
FormalParameterList[?Yield, ?Await]
FormalParameterList[?Yield, ?Await]
,
FormalParameterList[?Yield, ?Await]
,
FunctionRestParameter[?Yield, ?Await]
FormalParameterList[Yield, Await] : FormalParameter[?Yield, ?Await]
FormalParameterList[?Yield, ?Await]
,
FormalParameter[?Yield, ?Await]
FunctionRestParameter[Yield, Await] : BindingRestElement[?Yield, ?Await]
FormalParameter[Yield, Await] : BindingElement[?Yield, ?Await]
FunctionDeclaration[Yield, Await, Default] :
function
BindingIdentifier[?Yield, ?Await]
(
FormalParameters[~Yield, ~Await]
)
{
FunctionBody[~Yield, ~Await]
}
[+Default]
function
(
FormalParameters[~Yield, ~Await]
)
{
FunctionBody[~Yield, ~Await]
}
FunctionExpression :
function
BindingIdentifier[~Yield, ~Await]opt
(
FormalParameters[~Yield, ~Await]
)
{
FunctionBody[~Yield, ~Await]
}
FunctionBody[Yield, Await] : FunctionStatementList[?Yield, ?Await]
FunctionStatementList[Yield, Await] : StatementList[?Yield, ?Await, +Return]opt
ArrowFunction[In, Yield, Await] :
ArrowParameters[?Yield, ?Await]
[no LineTerminator here]
=>
ConciseBody[?In]
ArrowParameters[Yield, Await] : BindingIdentifier[?Yield, ?Await]
CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]
ConciseBody[In] :
[lookahead ≠ {]
ExpressionBody[?In, ~Await]
{
FunctionBody[~Yield, ~Await]
}
ExpressionBody[In, Await] : AssignmentExpression[?In, ~Yield, ?Await]
When processing an instance of the production
ArrowParameters[Yield, Await] : CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]
the interpretation of CoverParenthesizedExpressionAndArrowParameterList is refined using the following grammar:
ArrowFormalParameters[Yield, Await] :
(
UniqueFormalParameters[?Yield, ?Await]
)
AsyncArrowFunction[In, Yield, Await] :
async
[no LineTerminator here]
AsyncArrowBindingIdentifier[?Yield]
[no LineTerminator here]
=>
AsyncConciseBody[?In]
CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
[no LineTerminator here]
=>
AsyncConciseBody[?In]
AsyncConciseBody[In] :
[lookahead ≠ {]
ExpressionBody[?In, +Await]
{
AsyncFunctionBody
}
AsyncArrowBindingIdentifier[Yield] : BindingIdentifier[?Yield, +Await]
CoverCallExpressionAndAsyncArrowHead[Yield, Await] :
MemberExpression[?Yield, ?Await]
Arguments[?Yield, ?Await]
When processing an instance of the production
AsyncArrowFunction[In, Yield, Await] :
CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
[no LineTerminator here]
=>
AsyncConciseBody[?In]
the interpretation of CoverCallExpressionAndAsyncArrowHead is refined using the following grammar:
AsyncArrowHead :
async
[no LineTerminator here]
ArrowFormalParameters[~Yield, +Await]
MethodDefinition[Yield, Await] :
PropertyName[?Yield, ?Await]
(
UniqueFormalParameters[~Yield, ~Await]
)
{
FunctionBody[~Yield, ~Await]
}
GeneratorMethod[?Yield, ?Await]
AsyncMethod[?Yield, ?Await]
AsyncGeneratorMethod[?Yield, ?Await]
get
PropertyName[?Yield, ?Await]
(
)
{
FunctionBody[~Yield, ~Await]
}
set
PropertyName[?Yield, ?Await]
(
PropertySetParameterList
)
{
FunctionBody[~Yield, ~Await]
}
PropertySetParameterList : FormalParameter[~Yield, ~Await]
GeneratorMethod[Yield, Await] :
*
PropertyName[?Yield, ?Await]
(
UniqueFormalParameters[+Yield, ~Await]
)
{
GeneratorBody
}
GeneratorDeclaration[Yield, Await, Default] :
function
*
BindingIdentifier[?Yield, ?Await]
(
FormalParameters[+Yield, ~Await]
)
{
GeneratorBody
}
[+Default]
function
*
(
FormalParameters[+Yield, ~Await]
)
{
GeneratorBody
}
GeneratorExpression :
function
*
BindingIdentifier[+Yield, ~Await]opt
(
FormalParameters[+Yield, ~Await]
)
{
GeneratorBody
}
GeneratorBody : FunctionBody[+Yield, ~Await]
YieldExpression[In, Await] : yield
yield
[no LineTerminator here]
AssignmentExpression[?In, +Yield, ?Await]
yield
[no LineTerminator here]
*
AssignmentExpression[?In, +Yield, ?Await]
AsyncGeneratorMethod[Yield, Await] :
async
[no LineTerminator here]
*
PropertyName[?Yield, ?Await]
(
UniqueFormalParameters[+Yield, +Await]
)
{
AsyncGeneratorBody
}
AsyncGeneratorDeclaration[Yield, Await, Default] :
async
[no LineTerminator here]
function
*
BindingIdentifier[?Yield, ?Await]
(
FormalParameters[+Yield, +Await]
)
{
AsyncGeneratorBody
}
[+Default]
async
[no LineTerminator here]
function
*
(
FormalParameters[+Yield, +Await]
)
{
AsyncGeneratorBody
}
AsyncGeneratorExpression :
async
[no LineTerminator here]
function
*
BindingIdentifier[+Yield, +Await]opt
(
FormalParameters[+Yield, +Await]
)
{
AsyncGeneratorBody
}
AsyncGeneratorBody : FunctionBody[+Yield, +Await]
AsyncFunctionDeclaration[Yield, Await, Default] :
async
[no LineTerminator here]
function
BindingIdentifier[?Yield, ?Await]
(
FormalParameters[~Yield, +Await]
)
{
AsyncFunctionBody
}
[+Default]
async
[no LineTerminator here]
function
(
FormalParameters[~Yield, +Await]
)
{
AsyncFunctionBody
}
AsyncFunctionExpression :
async
[no LineTerminator here]
function
BindingIdentifier[~Yield, +Await]opt
(
FormalParameters[~Yield, +Await]
)
{
AsyncFunctionBody
}
AsyncMethod[Yield, Await] :
async
[no LineTerminator here]
PropertyName[?Yield, ?Await]
(
UniqueFormalParameters[~Yield, +Await]
)
{
AsyncFunctionBody
}
AsyncFunctionBody : FunctionBody[~Yield, +Await]
AwaitExpression[Yield] :
await
UnaryExpression[?Yield, +Await]
ClassDeclaration[Yield, Await, Default] :
class
BindingIdentifier[?Yield, ?Await]
ClassTail[?Yield, ?Await]
[+Default]
class
ClassTail[?Yield, ?Await]
ClassExpression[Yield, Await] :
class
BindingIdentifier[?Yield, ?Await]opt
ClassTail[?Yield, ?Await]
ClassTail[Yield, Await] :
ClassHeritage[?Yield, ?Await]opt
{
ClassBody[?Yield, ?Await]opt
}
ClassHeritage[Yield, Await] :
extends
LeftHandSideExpression[?Yield, ?Await]
ClassBody[Yield, Await] : ClassElementList[?Yield, ?Await]
ClassElementList[Yield, Await] : ClassElement[?Yield, ?Await]
ClassElementList[?Yield, ?Await]
ClassElement[?Yield, ?Await]
ClassElement[Yield, Await] : MethodDefinition[?Yield, ?Await]
static
MethodDefinition[?Yield, ?Await]
;