8 構文指向操作

この節で定義されるものに加えて、特殊化された構文指向操作がこの仕様全体を通じて定義される。

8.1 Runtime Semantics: Evaluation

The syntax-directed operation Evaluation takes no arguments and returns a Completion Record.

Note
この操作の定義は、この仕様の「ECMAScript Language」の各節に分散している。各定義は、関連する生成規則の定義出現の後に現れる。

8.2 スコープ解析

8.2.1 Static Semantics: BoundNames

The syntax-directed operation BoundNames takes no arguments and returns a List of Strings.

Note

"*default*" は、この仕様の中では、他の名前を持たないモジュールのデフォルトエクスポートに対する合成名として使われる。モジュールの [[Environment]] 内にはその名前でエントリが作成され、対応する値を保持する。そして、モジュールに対して ResolveExport ( exportName [ , resolveSet ] ) を呼び出して "default" という名前のエクスポートを解決すると、[[BindingName]]"*default*" である ResolvedBinding Record が返され、その後それはモジュールの [[Environment]] 内で上記の値に解決される。これは匿名のデフォルトエクスポートを他の任意のエクスポートと同様に解決できるようにするための、仕様記述上の便宜のためだけに行われる。この "*default*" という文字列は、ECMAScript コードからもモジュールリンクアルゴリズムからも決してアクセス不能である。

It is defined piecewise over the following productions:

BindingIdentifier : Identifier
  1. 唯一の要素として IdentifierStringValue を持つ List を返す。
BindingIdentifier : yield
  1. « "yield" » を返す。
BindingIdentifier : await
  1. « "await" » を返す。
LexicalDeclaration : LetOrConst BindingList ;
  1. BindingListBoundNames を返す。
BindingList : BindingList , LexicalBinding
  1. names1BindingListBoundNames とする。
  2. names2LexicalBindingBoundNames とする。
  3. names1names2list-concatenation を返す。
LexicalBinding : BindingIdentifier Initializeropt
  1. BindingIdentifierBoundNames を返す。
LexicalBinding : BindingPattern Initializer
  1. BindingPatternBoundNames を返す。
VariableDeclarationList : VariableDeclarationList , VariableDeclaration
  1. names1VariableDeclarationListBoundNames とする。
  2. names2VariableDeclarationBoundNames とする。
  3. names1names2list-concatenation を返す。
VariableDeclaration : BindingIdentifier Initializeropt
  1. BindingIdentifierBoundNames を返す。
VariableDeclaration : BindingPattern Initializer
  1. BindingPatternBoundNames を返す。
ObjectBindingPattern : { }
  1. 新しい空の List を返す。
ObjectBindingPattern : { BindingPropertyList , BindingRestProperty }
  1. names1BindingPropertyListBoundNames とする。
  2. names2BindingRestPropertyBoundNames とする。
  3. names1names2list-concatenation を返す。
ArrayBindingPattern : [ Elisionopt ]
  1. 新しい空の List を返す。
ArrayBindingPattern : [ Elisionopt BindingRestElement ]
  1. BindingRestElementBoundNames を返す。
ArrayBindingPattern : [ BindingElementList , Elisionopt ]
  1. BindingElementListBoundNames を返す。
ArrayBindingPattern : [ BindingElementList , Elisionopt BindingRestElement ]
  1. names1BindingElementListBoundNames とする。
  2. names2BindingRestElementBoundNames とする。
  3. names1names2list-concatenation を返す。
BindingPropertyList : BindingPropertyList , BindingProperty
  1. names1BindingPropertyListBoundNames とする。
  2. names2BindingPropertyBoundNames とする。
  3. names1names2list-concatenation を返す。
BindingElementList : BindingElementList , BindingElisionElement
  1. names1BindingElementListBoundNames とする。
  2. names2BindingElisionElementBoundNames とする。
  3. names1names2list-concatenation を返す。
BindingElisionElement : Elisionopt BindingElement
  1. BindingElementBoundNames を返す。
BindingProperty : PropertyName : BindingElement
  1. BindingElementBoundNames を返す。
SingleNameBinding : BindingIdentifier Initializeropt
  1. BindingIdentifierBoundNames を返す。
BindingElement : BindingPattern Initializeropt
  1. BindingPatternBoundNames を返す。
ForDeclaration : LetOrConst ForBinding
  1. ForBindingBoundNames を返す。
FunctionDeclaration : function BindingIdentifier ( FormalParameters ) { FunctionBody }
  1. BindingIdentifierBoundNames を返す。
FunctionDeclaration : function ( FormalParameters ) { FunctionBody }
  1. « "*default*" » を返す。
FormalParameters : [empty]
  1. 新しい空の List を返す。
FormalParameters : FormalParameterList , FunctionRestParameter
  1. names1FormalParameterListBoundNames とする。
  2. names2FunctionRestParameterBoundNames とする。
  3. names1names2list-concatenation を返す。
FormalParameterList : FormalParameterList , FormalParameter
  1. names1FormalParameterListBoundNames とする。
  2. names2FormalParameterBoundNames とする。
  3. names1names2list-concatenation を返す。
ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList
  1. formals を、CoverParenthesizedExpressionAndArrowParameterList によって包摂される ArrowFormalParameters とする。
  2. formalsBoundNames を返す。
GeneratorDeclaration : function * BindingIdentifier ( FormalParameters ) { GeneratorBody }
  1. BindingIdentifierBoundNames を返す。
GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
  1. « "*default*" » を返す。
AsyncGeneratorDeclaration : async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody }
  1. BindingIdentifierBoundNames を返す。
AsyncGeneratorDeclaration : async function * ( FormalParameters ) { AsyncGeneratorBody }
  1. « "*default*" » を返す。
ClassDeclaration : class BindingIdentifier ClassTail
  1. BindingIdentifierBoundNames を返す。
ClassDeclaration : class ClassTail
  1. « "*default*" » を返す。
AsyncFunctionDeclaration : async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody }
  1. BindingIdentifierBoundNames を返す。
AsyncFunctionDeclaration : async function ( FormalParameters ) { AsyncFunctionBody }
  1. « "*default*" » を返す。
CoverCallExpressionAndAsyncArrowHead : MemberExpression Arguments
  1. head を、CoverCallExpressionAndAsyncArrowHead によって包摂される AsyncArrowHead とする。
  2. headBoundNames を返す。
ImportDeclaration : import ImportClause FromClause WithClauseopt ;
  1. ImportClauseBoundNames を返す。
ImportDeclaration : import ModuleSpecifier WithClauseopt ;
  1. 新しい空の List を返す。
ImportClause : ImportedDefaultBinding , NameSpaceImport
  1. names1ImportedDefaultBindingBoundNames とする。
  2. names2NameSpaceImportBoundNames とする。
  3. names1names2list-concatenation を返す。
ImportClause : ImportedDefaultBinding , NamedImports
  1. names1ImportedDefaultBindingBoundNames とする。
  2. names2NamedImportsBoundNames とする。
  3. names1names2list-concatenation を返す。
NamedImports : { }
  1. 新しい空の List を返す。
ImportsList : ImportsList , ImportSpecifier
  1. names1ImportsListBoundNames とする。
  2. names2ImportSpecifierBoundNames とする。
  3. names1names2list-concatenation を返す。
ImportSpecifier : ModuleExportName as ImportedBinding
  1. ImportedBindingBoundNames を返す。
ExportDeclaration : export ExportFromClause FromClause WithClauseopt ; export NamedExports ;
  1. 新しい空の List を返す。
ExportDeclaration : export VariableStatement
  1. VariableStatementBoundNames を返す。
ExportDeclaration : export Declaration
  1. DeclarationBoundNames を返す。
ExportDeclaration : export default HoistableDeclaration
  1. declarationNamesHoistableDeclarationBoundNames とする。
  2. declarationNames"*default*" という要素を含まない場合、"*default*"declarationNames に追加する。
  3. declarationNames を返す。
ExportDeclaration : export default ClassDeclaration
  1. declarationNamesClassDeclarationBoundNames とする。
  2. declarationNames"*default*" という要素を含まない場合、"*default*"declarationNames に追加する。
  3. declarationNames を返す。
ExportDeclaration : export default AssignmentExpression ;
  1. « "*default*" » を返す。

8.2.2 Static Semantics: DeclarationPart

The syntax-directed operation DeclarationPart takes no arguments and returns a Parse Node. It is defined piecewise over the following productions:

HoistableDeclaration : FunctionDeclaration
  1. FunctionDeclaration を返す。
HoistableDeclaration : GeneratorDeclaration
  1. GeneratorDeclaration を返す。
HoistableDeclaration : AsyncFunctionDeclaration
  1. AsyncFunctionDeclaration を返す。
HoistableDeclaration : AsyncGeneratorDeclaration
  1. AsyncGeneratorDeclaration を返す。
Declaration : ClassDeclaration
  1. ClassDeclaration を返す。
Declaration : LexicalDeclaration
  1. LexicalDeclaration を返す。

8.2.3 Static Semantics: IsConstantDeclaration

The syntax-directed operation IsConstantDeclaration takes no arguments and returns a Boolean. It is defined piecewise over the following productions:

LexicalDeclaration : LetOrConst BindingList ;
  1. LetOrConstIsConstantDeclaration を返す。
LetOrConst : let
  1. false を返す。
LetOrConst : const
  1. true を返す。
FunctionDeclaration : function BindingIdentifier ( FormalParameters ) { FunctionBody } function ( FormalParameters ) { FunctionBody } GeneratorDeclaration : function * BindingIdentifier ( FormalParameters ) { GeneratorBody } function * ( FormalParameters ) { GeneratorBody } AsyncGeneratorDeclaration : async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody } async function * ( FormalParameters ) { AsyncGeneratorBody } AsyncFunctionDeclaration : async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody } async function ( FormalParameters ) { AsyncFunctionBody }
  1. false を返す。
ClassDeclaration : class BindingIdentifier ClassTail class ClassTail
  1. false を返す。
ExportDeclaration : export ExportFromClause FromClause ; export NamedExports ; export default AssignmentExpression ;
  1. false を返す。
Note

export default AssignmentExpression を定数宣言として扱う必要はない。なぜなら、モジュールのデフォルトオブジェクトを参照するために使われる内部束縛名への代入を許す構文が存在しないからである。

8.2.4 Static Semantics: LexicallyDeclaredNames

The syntax-directed operation LexicallyDeclaredNames takes no arguments and returns a List of Strings. It is defined piecewise over the following productions:

Block : { }
  1. 新しい空の List を返す。
StatementList : StatementList StatementListItem
  1. names1StatementListLexicallyDeclaredNames とする。
  2. names2StatementListItemLexicallyDeclaredNames とする。
  3. names1names2list-concatenation を返す。
StatementListItem : Statement
  1. Statement Statement : LabelledStatement であるなら、LabelledStatementLexicallyDeclaredNames を返す。
  2. 新しい空の List を返す。
StatementListItem : Declaration
  1. DeclarationBoundNames を返す。
CaseBlock : { }
  1. 新しい空の List を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在するなら、names1 を最初の CaseClausesLexicallyDeclaredNames とする。
  2. Else, names1 を新しい空の List とする。
  3. names2DefaultClauseLexicallyDeclaredNames とする。
  4. 2 番目の CaseClauses が存在するなら、names3 を 2 番目の CaseClausesLexicallyDeclaredNames とする。
  5. Else, names3 を新しい空の List とする。
  6. names1, names2, および names3list-concatenation を返す。
CaseClauses : CaseClauses CaseClause
  1. names1CaseClausesLexicallyDeclaredNames とする。
  2. names2CaseClauseLexicallyDeclaredNames とする。
  3. names1names2list-concatenation を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在するなら、StatementListLexicallyDeclaredNames を返す。
  2. 新しい空の List を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在するなら、StatementListLexicallyDeclaredNames を返す。
  2. 新しい空の List を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItemLexicallyDeclaredNames を返す。
LabelledItem : Statement
  1. 新しい空の List を返す。
LabelledItem : FunctionDeclaration
  1. FunctionDeclarationBoundNames を返す。
FunctionStatementList : [empty]
  1. 新しい空の List を返す。
FunctionStatementList : StatementList
  1. StatementListTopLevelLexicallyDeclaredNames を返す。
ClassStaticBlockStatementList : [empty]
  1. 新しい空の List を返す。
ClassStaticBlockStatementList : StatementList
  1. StatementListTopLevelLexicallyDeclaredNames を返す。
ConciseBody : ExpressionBody
  1. 新しい空の List を返す。
AsyncConciseBody : ExpressionBody
  1. 新しい空の List を返す。
Script : [empty]
  1. 新しい空の List を返す。
ScriptBody : StatementList
  1. StatementListTopLevelLexicallyDeclaredNames を返す。
Note 1

Script のトップレベルでは、function 宣言は lexical 宣言ではなく var 宣言のように扱われる。

Note 2

Module の LexicallyDeclaredNames には、その import 束縛のすべての名前が含まれる。

ModuleItemList : ModuleItemList ModuleItem
  1. names1ModuleItemListLexicallyDeclaredNames とする。
  2. names2ModuleItemLexicallyDeclaredNames とする。
  3. names1names2list-concatenation を返す。
ModuleItem : ImportDeclaration
  1. ImportDeclarationBoundNames を返す。
ModuleItem : ExportDeclaration
  1. ExportDeclarationexport VariableStatement であるなら、新しい空の List を返す。
  2. ExportDeclarationBoundNames を返す。
ModuleItem : StatementListItem
  1. StatementListItemLexicallyDeclaredNames を返す。
Note 3

Module のトップレベルでは、function 宣言は var 宣言ではなく lexical 宣言のように扱われる。

8.2.5 Static Semantics: LexicallyScopedDeclarations

The syntax-directed operation LexicallyScopedDeclarations takes no arguments and returns a List of Parse Nodes. It is defined piecewise over the following productions:

StatementList : StatementList StatementListItem
  1. declarations1StatementListLexicallyScopedDeclarations とする。
  2. declarations2StatementListItemLexicallyScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
StatementListItem : Statement
  1. Statement Statement : LabelledStatement であるなら、LabelledStatementLexicallyScopedDeclarations を返す。
  2. 新しい空の List を返す。
StatementListItem : Declaration
  1. 唯一の要素として DeclarationDeclarationPart を持つ List を返す。
CaseBlock : { }
  1. 新しい空の List を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在するなら、declarations1 を最初の CaseClausesLexicallyScopedDeclarations とする。
  2. Else, declarations1 を新しい空の List とする。
  3. declarations2DefaultClauseLexicallyScopedDeclarations とする。
  4. 2 番目の CaseClauses が存在するなら、declarations3 を 2 番目の CaseClausesLexicallyScopedDeclarations とする。
  5. Else, declarations3 を新しい空の List とする。
  6. declarations1, declarations2, および declarations3list-concatenation を返す。
CaseClauses : CaseClauses CaseClause
  1. declarations1CaseClausesLexicallyScopedDeclarations とする。
  2. declarations2CaseClauseLexicallyScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在するなら、StatementListLexicallyScopedDeclarations を返す。
  2. 新しい空の List を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在するなら、StatementListLexicallyScopedDeclarations を返す。
  2. 新しい空の List を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItemLexicallyScopedDeclarations を返す。
LabelledItem : Statement
  1. 新しい空の List を返す。
LabelledItem : FunctionDeclaration
  1. « FunctionDeclaration » を返す。
FunctionStatementList : [empty]
  1. 新しい空の List を返す。
FunctionStatementList : StatementList
  1. StatementListTopLevelLexicallyScopedDeclarations を返す。
ClassStaticBlockStatementList : [empty]
  1. 新しい空の List を返す。
ClassStaticBlockStatementList : StatementList
  1. StatementListTopLevelLexicallyScopedDeclarations を返す。
ConciseBody : ExpressionBody
  1. 新しい空の List を返す。
AsyncConciseBody : ExpressionBody
  1. 新しい空の List を返す。
Script : [empty]
  1. 新しい空の List を返す。
ScriptBody : StatementList
  1. StatementListTopLevelLexicallyScopedDeclarations を返す。
Module : [empty]
  1. 新しい空の List を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. declarations1ModuleItemListLexicallyScopedDeclarations とする。
  2. declarations2ModuleItemLexicallyScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
ModuleItem : ImportDeclaration
  1. 新しい空の List を返す。
ExportDeclaration : export ExportFromClause FromClause WithClauseopt ; export NamedExports ; export VariableStatement
  1. 新しい空の List を返す。
ExportDeclaration : export Declaration
  1. 唯一の要素として DeclarationDeclarationPart を持つ List を返す。
ExportDeclaration : export default HoistableDeclaration
  1. 唯一の要素として HoistableDeclarationDeclarationPart を持つ List を返す。
ExportDeclaration : export default ClassDeclaration
  1. 唯一の要素として ClassDeclaration を持つ List を返す。
ExportDeclaration : export default AssignmentExpression ;
  1. 唯一の要素としてこの ExportDeclaration を持つ List を返す。

8.2.6 Static Semantics: VarDeclaredNames

The syntax-directed operation VarDeclaredNames takes no arguments and returns a List of Strings. It is defined piecewise over the following productions:

Statement : EmptyStatement ExpressionStatement ContinueStatement BreakStatement ReturnStatement ThrowStatement DebuggerStatement
  1. 新しい空の List を返す。
Block : { }
  1. 新しい空の List を返す。
StatementList : StatementList StatementListItem
  1. names1StatementListVarDeclaredNames とする。
  2. names2StatementListItemVarDeclaredNames とする。
  3. names1names2list-concatenation を返す。
StatementListItem : Declaration
  1. 新しい空の List を返す。
VariableStatement : var VariableDeclarationList ;
  1. VariableDeclarationListBoundNames を返す。
IfStatement : if ( Expression ) Statement else Statement
  1. names1 を最初の StatementVarDeclaredNames とする。
  2. names2 を 2 番目の StatementVarDeclaredNames とする。
  3. names1names2list-concatenation を返す。
IfStatement : if ( Expression ) Statement
  1. StatementVarDeclaredNames を返す。
DoWhileStatement : do Statement while ( Expression ) ;
  1. StatementVarDeclaredNames を返す。
WhileStatement : while ( Expression ) Statement
  1. StatementVarDeclaredNames を返す。
ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement
  1. StatementVarDeclaredNames を返す。
ForStatement : for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement
  1. names1VariableDeclarationListBoundNames とする。
  2. names2StatementVarDeclaredNames とする。
  3. names1names2list-concatenation を返す。
ForStatement : for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
  1. StatementVarDeclaredNames を返す。
ForInOfStatement : for ( LeftHandSideExpression in Expression ) Statement for ( ForDeclaration in Expression ) Statement for ( LeftHandSideExpression of AssignmentExpression ) Statement for ( ForDeclaration of AssignmentExpression ) Statement for await ( LeftHandSideExpression of AssignmentExpression ) Statement for await ( ForDeclaration of AssignmentExpression ) Statement
  1. StatementVarDeclaredNames を返す。
ForInOfStatement : for ( var ForBinding in Expression ) Statement for ( var ForBinding of AssignmentExpression ) Statement for await ( var ForBinding of AssignmentExpression ) Statement
  1. names1ForBindingBoundNames とする。
  2. names2StatementVarDeclaredNames とする。
  3. names1names2list-concatenation を返す。
Note

この節は Annex B.3.5 によって拡張される。

WithStatement : with ( Expression ) Statement
  1. StatementVarDeclaredNames を返す。
SwitchStatement : switch ( Expression ) CaseBlock
  1. CaseBlockVarDeclaredNames を返す。
CaseBlock : { }
  1. 新しい空の List を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在するなら、names1 を最初の CaseClausesVarDeclaredNames とする。
  2. Else, names1 を新しい空の List とする。
  3. names2DefaultClauseVarDeclaredNames とする。
  4. 2 番目の CaseClauses が存在するなら、names3 を 2 番目の CaseClausesVarDeclaredNames とする。
  5. Else, names3 を新しい空の List とする。
  6. names1, names2, および names3list-concatenation を返す。
CaseClauses : CaseClauses CaseClause
  1. names1CaseClausesVarDeclaredNames とする。
  2. names2CaseClauseVarDeclaredNames とする。
  3. names1names2list-concatenation を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在するなら、StatementListVarDeclaredNames を返す。
  2. 新しい空の List を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在するなら、StatementListVarDeclaredNames を返す。
  2. 新しい空の List を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItemVarDeclaredNames を返す。
LabelledItem : FunctionDeclaration
  1. 新しい空の List を返す。
TryStatement : try Block Catch
  1. names1BlockVarDeclaredNames とする。
  2. names2CatchVarDeclaredNames とする。
  3. names1names2list-concatenation を返す。
TryStatement : try Block Finally
  1. names1BlockVarDeclaredNames とする。
  2. names2FinallyVarDeclaredNames とする。
  3. names1names2list-concatenation を返す。
TryStatement : try Block Catch Finally
  1. names1BlockVarDeclaredNames とする。
  2. names2CatchVarDeclaredNames とする。
  3. names3FinallyVarDeclaredNames とする。
  4. names1, names2, および names3list-concatenation を返す。
Catch : catch ( CatchParameter ) Block
  1. BlockVarDeclaredNames を返す。
FunctionStatementList : [empty]
  1. 新しい空の List を返す。
FunctionStatementList : StatementList
  1. StatementListTopLevelVarDeclaredNames を返す。
ClassStaticBlockStatementList : [empty]
  1. 新しい空の List を返す。
ClassStaticBlockStatementList : StatementList
  1. StatementListTopLevelVarDeclaredNames を返す。
ConciseBody : ExpressionBody
  1. 新しい空の List を返す。
AsyncConciseBody : ExpressionBody
  1. 新しい空の List を返す。
Script : [empty]
  1. 新しい空の List を返す。
ScriptBody : StatementList
  1. StatementListTopLevelVarDeclaredNames を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. names1ModuleItemListVarDeclaredNames とする。
  2. names2ModuleItemVarDeclaredNames とする。
  3. names1names2list-concatenation を返す。
ModuleItem : ImportDeclaration
  1. 新しい空の List を返す。
ModuleItem : ExportDeclaration
  1. ExportDeclarationexport VariableStatement であるなら、ExportDeclarationBoundNames を返す。
  2. 新しい空の List を返す。

8.2.7 Static Semantics: VarScopedDeclarations

The syntax-directed operation VarScopedDeclarations takes no arguments and returns a List of Parse Nodes. It is defined piecewise over the following productions:

Statement : EmptyStatement ExpressionStatement ContinueStatement BreakStatement ReturnStatement ThrowStatement DebuggerStatement
  1. 新しい空の List を返す。
Block : { }
  1. 新しい空の List を返す。
StatementList : StatementList StatementListItem
  1. declarations1StatementListVarScopedDeclarations とする。
  2. declarations2StatementListItemVarScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
StatementListItem : Declaration
  1. 新しい空の List を返す。
VariableDeclarationList : VariableDeclaration
  1. « VariableDeclaration » を返す。
VariableDeclarationList : VariableDeclarationList , VariableDeclaration
  1. declarations1VariableDeclarationListVarScopedDeclarations とする。
  2. declarations1 と « VariableDeclaration » の list-concatenation を返す。
IfStatement : if ( Expression ) Statement else Statement
  1. declarations1 を最初の StatementVarScopedDeclarations とする。
  2. declarations2 を 2 番目の StatementVarScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
IfStatement : if ( Expression ) Statement
  1. StatementVarScopedDeclarations を返す。
DoWhileStatement : do Statement while ( Expression ) ;
  1. StatementVarScopedDeclarations を返す。
WhileStatement : while ( Expression ) Statement
  1. StatementVarScopedDeclarations を返す。
ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement
  1. StatementVarScopedDeclarations を返す。
ForStatement : for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement
  1. declarations1VariableDeclarationListVarScopedDeclarations とする。
  2. declarations2StatementVarScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
ForStatement : for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
  1. StatementVarScopedDeclarations を返す。
ForInOfStatement : for ( LeftHandSideExpression in Expression ) Statement for ( ForDeclaration in Expression ) Statement for ( LeftHandSideExpression of AssignmentExpression ) Statement for ( ForDeclaration of AssignmentExpression ) Statement for await ( LeftHandSideExpression of AssignmentExpression ) Statement for await ( ForDeclaration of AssignmentExpression ) Statement
  1. StatementVarScopedDeclarations を返す。
ForInOfStatement : for ( var ForBinding in Expression ) Statement for ( var ForBinding of AssignmentExpression ) Statement for await ( var ForBinding of AssignmentExpression ) Statement
  1. declarations1 を « ForBinding » とする。
  2. declarations2StatementVarScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
Note

この節は Annex B.3.5 によって拡張される。

WithStatement : with ( Expression ) Statement
  1. StatementVarScopedDeclarations を返す。
SwitchStatement : switch ( Expression ) CaseBlock
  1. CaseBlockVarScopedDeclarations を返す。
CaseBlock : { }
  1. 新しい空の List を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在するなら、declarations1 を最初の CaseClausesVarScopedDeclarations とする。
  2. Else, declarations1 を新しい空の List とする。
  3. declarations2DefaultClauseVarScopedDeclarations とする。
  4. 2 番目の CaseClauses が存在するなら、declarations3 を 2 番目の CaseClausesVarScopedDeclarations とする。
  5. Else, declarations3 を新しい空の List とする。
  6. declarations1, declarations2, および declarations3list-concatenation を返す。
CaseClauses : CaseClauses CaseClause
  1. declarations1CaseClausesVarScopedDeclarations とする。
  2. declarations2CaseClauseVarScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在するなら、StatementListVarScopedDeclarations を返す。
  2. 新しい空の List を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在するなら、StatementListVarScopedDeclarations を返す。
  2. 新しい空の List を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItemVarScopedDeclarations を返す。
LabelledItem : FunctionDeclaration
  1. 新しい空の List を返す。
TryStatement : try Block Catch
  1. declarations1BlockVarScopedDeclarations とする。
  2. declarations2CatchVarScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
TryStatement : try Block Finally
  1. declarations1BlockVarScopedDeclarations とする。
  2. declarations2FinallyVarScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
TryStatement : try Block Catch Finally
  1. declarations1BlockVarScopedDeclarations とする。
  2. declarations2CatchVarScopedDeclarations とする。
  3. declarations3FinallyVarScopedDeclarations とする。
  4. declarations1, declarations2, および declarations3list-concatenation を返す。
Catch : catch ( CatchParameter ) Block
  1. BlockVarScopedDeclarations を返す。
FunctionStatementList : [empty]
  1. 新しい空の List を返す。
FunctionStatementList : StatementList
  1. StatementListTopLevelVarScopedDeclarations を返す。
ClassStaticBlockStatementList : [empty]
  1. 新しい空の List を返す。
ClassStaticBlockStatementList : StatementList
  1. StatementListTopLevelVarScopedDeclarations を返す。
ConciseBody : ExpressionBody
  1. 新しい空の List を返す。
AsyncConciseBody : ExpressionBody
  1. 新しい空の List を返す。
Script : [empty]
  1. 新しい空の List を返す。
ScriptBody : StatementList
  1. StatementListTopLevelVarScopedDeclarations を返す。
Module : [empty]
  1. 新しい空の List を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. declarations1ModuleItemListVarScopedDeclarations とする。
  2. declarations2ModuleItemVarScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
ModuleItem : ImportDeclaration
  1. 新しい空の List を返す。
ModuleItem : ExportDeclaration
  1. ExportDeclarationexport VariableStatement であるなら、VariableStatementVarScopedDeclarations を返す。
  2. 新しい空の List を返す。

8.2.8 Static Semantics: TopLevelLexicallyDeclaredNames

The syntax-directed operation TopLevelLexicallyDeclaredNames takes no arguments and returns a List of Strings. It is defined piecewise over the following productions:

StatementList : StatementList StatementListItem
  1. names1StatementListTopLevelLexicallyDeclaredNames とする。
  2. names2StatementListItemTopLevelLexicallyDeclaredNames とする。
  3. names1names2list-concatenation を返す。
StatementListItem : Statement
  1. 新しい空の List を返す。
StatementListItem : Declaration
  1. Declaration Declaration : HoistableDeclaration であるなら、
    1. 新しい空の List を返す。
  2. DeclarationBoundNames を返す。
Note

function または script のトップレベルでは、function 宣言は lexical 宣言ではなく var 宣言のように扱われる。

8.2.9 Static Semantics: TopLevelLexicallyScopedDeclarations

The syntax-directed operation TopLevelLexicallyScopedDeclarations takes no arguments and returns a List of Parse Nodes. It is defined piecewise over the following productions:

StatementList : StatementList StatementListItem
  1. declarations1StatementListTopLevelLexicallyScopedDeclarations とする。
  2. declarations2StatementListItemTopLevelLexicallyScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
StatementListItem : Statement
  1. 新しい空の List を返す。
StatementListItem : Declaration
  1. Declaration Declaration : HoistableDeclaration であるなら、
    1. 新しい空の List を返す。
  2. « Declaration » を返す。

8.2.10 Static Semantics: TopLevelVarDeclaredNames

The syntax-directed operation TopLevelVarDeclaredNames takes no arguments and returns a List of Strings. It is defined piecewise over the following productions:

StatementList : StatementList StatementListItem
  1. names1StatementListTopLevelVarDeclaredNames とする。
  2. names2StatementListItemTopLevelVarDeclaredNames とする。
  3. names1names2list-concatenation を返す。
StatementListItem : Declaration
  1. Declaration Declaration : HoistableDeclaration であるなら、
    1. HoistableDeclarationBoundNames を返す。
  2. 新しい空の List を返す。
StatementListItem : Statement
  1. Statement Statement : LabelledStatement であるなら、StatementTopLevelVarDeclaredNames を返す。
  2. StatementVarDeclaredNames を返す。
Note

function または script のトップレベルでは、内側の function 宣言は var 宣言のように扱われる。

LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItemTopLevelVarDeclaredNames を返す。
LabelledItem : Statement
  1. Statement Statement : LabelledStatement であるなら、StatementTopLevelVarDeclaredNames を返す。
  2. StatementVarDeclaredNames を返す。
LabelledItem : FunctionDeclaration
  1. FunctionDeclarationBoundNames を返す。

8.2.11 Static Semantics: TopLevelVarScopedDeclarations

The syntax-directed operation TopLevelVarScopedDeclarations takes no arguments and returns a List of Parse Nodes. It is defined piecewise over the following productions:

StatementList : StatementList StatementListItem
  1. declarations1StatementListTopLevelVarScopedDeclarations とする。
  2. declarations2StatementListItemTopLevelVarScopedDeclarations とする。
  3. declarations1declarations2list-concatenation を返す。
StatementListItem : Statement
  1. Statement Statement : LabelledStatement であるなら、StatementTopLevelVarScopedDeclarations を返す。
  2. StatementVarScopedDeclarations を返す。
StatementListItem : Declaration
  1. Declaration Declaration : HoistableDeclaration であるなら、
    1. declarationHoistableDeclarationDeclarationPart とする。
    2. « declaration » を返す。
  2. 新しい空の List を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItemTopLevelVarScopedDeclarations を返す。
LabelledItem : Statement
  1. Statement Statement : LabelledStatement であるなら、StatementTopLevelVarScopedDeclarations を返す。
  2. StatementVarScopedDeclarations を返す。
LabelledItem : FunctionDeclaration
  1. « FunctionDeclaration » を返す。

8.3 ラベル

8.3.1 Static Semantics: ContainsDuplicateLabels

The syntax-directed operation ContainsDuplicateLabels takes argument labelSet (a List of Strings) and returns a Boolean. It is defined piecewise over the following productions:

Statement : VariableStatement EmptyStatement ExpressionStatement ContinueStatement BreakStatement ReturnStatement ThrowStatement DebuggerStatement Block : { } StatementListItem : Declaration
  1. false を返す。
StatementList : StatementList StatementListItem
  1. hasDuplicates を、引数 labelSet を伴う StatementListContainsDuplicateLabels とする。
  2. hasDuplicatestrue なら、true を返す。
  3. 引数 labelSet を伴う StatementListItemContainsDuplicateLabels を返す。
IfStatement : if ( Expression ) Statement else Statement
  1. hasDuplicate を、引数 labelSet を伴う最初の StatementContainsDuplicateLabels とする。
  2. hasDuplicatetrue なら、true を返す。
  3. 引数 labelSet を伴う 2 番目の StatementContainsDuplicateLabels を返す。
IfStatement : if ( Expression ) Statement
  1. 引数 labelSet を伴う StatementContainsDuplicateLabels を返す。
DoWhileStatement : do Statement while ( Expression ) ;
  1. 引数 labelSet を伴う StatementContainsDuplicateLabels を返す。
WhileStatement : while ( Expression ) Statement
  1. 引数 labelSet を伴う StatementContainsDuplicateLabels を返す。
ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
  1. 引数 labelSet を伴う StatementContainsDuplicateLabels を返す。
ForInOfStatement : for ( LeftHandSideExpression in Expression ) Statement for ( var ForBinding in Expression ) Statement for ( ForDeclaration in Expression ) Statement for ( LeftHandSideExpression of AssignmentExpression ) Statement for ( var ForBinding of AssignmentExpression ) Statement for ( ForDeclaration of AssignmentExpression ) Statement for await ( LeftHandSideExpression of AssignmentExpression ) Statement for await ( var ForBinding of AssignmentExpression ) Statement for await ( ForDeclaration of AssignmentExpression ) Statement
  1. 引数 labelSet を伴う StatementContainsDuplicateLabels を返す。
Note

この節は Annex B.3.5 によって拡張される。

WithStatement : with ( Expression ) Statement
  1. 引数 labelSet を伴う StatementContainsDuplicateLabels を返す。
SwitchStatement : switch ( Expression ) CaseBlock
  1. 引数 labelSet を伴う CaseBlockContainsDuplicateLabels を返す。
CaseBlock : { }
  1. false を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在するなら、
    1. 引数 labelSet を伴う最初の CaseClausesContainsDuplicateLabelstrue なら、true を返す。
  2. 引数 labelSet を伴う DefaultClauseContainsDuplicateLabelstrue なら、true を返す。
  3. 2 番目の CaseClauses が存在しないなら、false を返す。
  4. 引数 labelSet を伴う 2 番目の CaseClausesContainsDuplicateLabels を返す。
CaseClauses : CaseClauses CaseClause
  1. hasDuplicates を、引数 labelSet を伴う CaseClausesContainsDuplicateLabels とする。
  2. hasDuplicatestrue なら、true を返す。
  3. 引数 labelSet を伴う CaseClauseContainsDuplicateLabels を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在するなら、引数 labelSet を伴う StatementListContainsDuplicateLabels を返す。
  2. false を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在するなら、引数 labelSet を伴う StatementListContainsDuplicateLabels を返す。
  2. false を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. labelLabelIdentifierStringValue とする。
  2. labelSetlabel を含むなら、true を返す。
  3. newLabelSetlabelSet と « label » の list-concatenation とする。
  4. 引数 newLabelSet を伴う LabelledItemContainsDuplicateLabels を返す。
LabelledItem : FunctionDeclaration
  1. false を返す。
TryStatement : try Block Catch
  1. hasDuplicates を、引数 labelSet を伴う BlockContainsDuplicateLabels とする。
  2. hasDuplicatestrue なら、true を返す。
  3. 引数 labelSet を伴う CatchContainsDuplicateLabels を返す。
TryStatement : try Block Finally
  1. hasDuplicates を、引数 labelSet を伴う BlockContainsDuplicateLabels とする。
  2. hasDuplicatestrue なら、true を返す。
  3. 引数 labelSet を伴う FinallyContainsDuplicateLabels を返す。
TryStatement : try Block Catch Finally
  1. 引数 labelSet を伴う BlockContainsDuplicateLabelstrue なら、true を返す。
  2. 引数 labelSet を伴う CatchContainsDuplicateLabelstrue なら、true を返す。
  3. 引数 labelSet を伴う FinallyContainsDuplicateLabels を返す。
Catch : catch ( CatchParameter ) Block
  1. 引数 labelSet を伴う BlockContainsDuplicateLabels を返す。
FunctionStatementList : [empty]
  1. false を返す。
ClassStaticBlockStatementList : [empty]
  1. false を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. hasDuplicates を、引数 labelSet を伴う ModuleItemListContainsDuplicateLabels とする。
  2. hasDuplicatestrue なら、true を返す。
  3. 引数 labelSet を伴う ModuleItemContainsDuplicateLabels を返す。
ModuleItem : ImportDeclaration ExportDeclaration
  1. false を返す。

8.3.2 Static Semantics: ContainsUndefinedBreakTarget

The syntax-directed operation ContainsUndefinedBreakTarget takes argument labelSet (a List of Strings) and returns a Boolean. It is defined piecewise over the following productions:

Statement : VariableStatement EmptyStatement ExpressionStatement ContinueStatement ReturnStatement ThrowStatement DebuggerStatement Block : { } StatementListItem : Declaration
  1. false を返す。
StatementList : StatementList StatementListItem
  1. hasUndefinedLabels を、引数 labelSet を伴う StatementListContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 labelSet を伴う StatementListItemContainsUndefinedBreakTarget を返す。
IfStatement : if ( Expression ) Statement else Statement
  1. hasUndefinedLabels を、引数 labelSet を伴う最初の StatementContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 labelSet を伴う 2 番目の StatementContainsUndefinedBreakTarget を返す。
IfStatement : if ( Expression ) Statement
  1. 引数 labelSet を伴う StatementContainsUndefinedBreakTarget を返す。
DoWhileStatement : do Statement while ( Expression ) ;
  1. 引数 labelSet を伴う StatementContainsUndefinedBreakTarget を返す。
WhileStatement : while ( Expression ) Statement
  1. 引数 labelSet を伴う StatementContainsUndefinedBreakTarget を返す。
ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
  1. 引数 labelSet を伴う StatementContainsUndefinedBreakTarget を返す。
ForInOfStatement : for ( LeftHandSideExpression in Expression ) Statement for ( var ForBinding in Expression ) Statement for ( ForDeclaration in Expression ) Statement for ( LeftHandSideExpression of AssignmentExpression ) Statement for ( var ForBinding of AssignmentExpression ) Statement for ( ForDeclaration of AssignmentExpression ) Statement for await ( LeftHandSideExpression of AssignmentExpression ) Statement for await ( var ForBinding of AssignmentExpression ) Statement for await ( ForDeclaration of AssignmentExpression ) Statement
  1. 引数 labelSet を伴う StatementContainsUndefinedBreakTarget を返す。
Note

この節は Annex B.3.5 によって拡張される。

BreakStatement : break ;
  1. false を返す。
BreakStatement : break LabelIdentifier ;
  1. labelSetLabelIdentifierStringValue を含むなら、false を返す。
  2. true を返す。
WithStatement : with ( Expression ) Statement
  1. 引数 labelSet を伴う StatementContainsUndefinedBreakTarget を返す。
SwitchStatement : switch ( Expression ) CaseBlock
  1. 引数 labelSet を伴う CaseBlockContainsUndefinedBreakTarget を返す。
CaseBlock : { }
  1. false を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在するなら、
    1. 引数 labelSet を伴う最初の CaseClausesContainsUndefinedBreakTargettrue なら、true を返す。
  2. 引数 labelSet を伴う DefaultClauseContainsUndefinedBreakTargettrue なら、true を返す。
  3. 2 番目の CaseClauses が存在しないなら、false を返す。
  4. 引数 labelSet を伴う 2 番目の CaseClausesContainsUndefinedBreakTarget を返す。
CaseClauses : CaseClauses CaseClause
  1. hasUndefinedLabels を、引数 labelSet を伴う CaseClausesContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 labelSet を伴う CaseClauseContainsUndefinedBreakTarget を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在するなら、引数 labelSet を伴う StatementListContainsUndefinedBreakTarget を返す。
  2. false を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在するなら、引数 labelSet を伴う StatementListContainsUndefinedBreakTarget を返す。
  2. false を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. labelLabelIdentifierStringValue とする。
  2. newLabelSetlabelSet と « label » の list-concatenation とする。
  3. 引数 newLabelSet を伴う LabelledItemContainsUndefinedBreakTarget を返す。
LabelledItem : FunctionDeclaration
  1. false を返す。
TryStatement : try Block Catch
  1. hasUndefinedLabels を、引数 labelSet を伴う BlockContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 labelSet を伴う CatchContainsUndefinedBreakTarget を返す。
TryStatement : try Block Finally
  1. hasUndefinedLabels を、引数 labelSet を伴う BlockContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 labelSet を伴う FinallyContainsUndefinedBreakTarget を返す。
TryStatement : try Block Catch Finally
  1. 引数 labelSet を伴う BlockContainsUndefinedBreakTargettrue なら、true を返す。
  2. 引数 labelSet を伴う CatchContainsUndefinedBreakTargettrue なら、true を返す。
  3. 引数 labelSet を伴う FinallyContainsUndefinedBreakTarget を返す。
Catch : catch ( CatchParameter ) Block
  1. 引数 labelSet を伴う BlockContainsUndefinedBreakTarget を返す。
FunctionStatementList : [empty]
  1. false を返す。
ClassStaticBlockStatementList : [empty]
  1. false を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. hasUndefinedLabels を、引数 labelSet を伴う ModuleItemListContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 labelSet を伴う ModuleItemContainsUndefinedBreakTarget を返す。
ModuleItem : ImportDeclaration ExportDeclaration
  1. false を返す。

8.3.3 Static Semantics: ContainsUndefinedContinueTarget

The syntax-directed operation ContainsUndefinedContinueTarget takes arguments iterationSet (a List of Strings) and labelSet (a List of Strings) and returns a Boolean. It is defined piecewise over the following productions:

Statement : VariableStatement EmptyStatement ExpressionStatement BreakStatement ReturnStatement ThrowStatement DebuggerStatement Block : { } StatementListItem : Declaration
  1. false を返す。
Statement : BlockStatement
  1. 引数 iterationSet および « » を伴う BlockStatementContainsUndefinedContinueTarget を返す。
BreakableStatement : IterationStatement
  1. newIterationSetiterationSetlabelSetlist-concatenation とする。
  2. 引数 newIterationSet および « » を伴う IterationStatementContainsUndefinedContinueTarget を返す。
StatementList : StatementList StatementListItem
  1. hasUndefinedLabels を、引数 iterationSet および « » を伴う StatementListContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 iterationSet および « » を伴う StatementListItemContainsUndefinedContinueTarget を返す。
IfStatement : if ( Expression ) Statement else Statement
  1. hasUndefinedLabels を、引数 iterationSet および « » を伴う最初の StatementContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 iterationSet および « » を伴う 2 番目の StatementContainsUndefinedContinueTarget を返す。
IfStatement : if ( Expression ) Statement
  1. 引数 iterationSet および « » を伴う StatementContainsUndefinedContinueTarget を返す。
DoWhileStatement : do Statement while ( Expression ) ;
  1. 引数 iterationSet および « » を伴う StatementContainsUndefinedContinueTarget を返す。
WhileStatement : while ( Expression ) Statement
  1. 引数 iterationSet および « » を伴う StatementContainsUndefinedContinueTarget を返す。
ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
  1. 引数 iterationSet および « » を伴う StatementContainsUndefinedContinueTarget を返す。
ForInOfStatement : for ( LeftHandSideExpression in Expression ) Statement for ( var ForBinding in Expression ) Statement for ( ForDeclaration in Expression ) Statement for ( LeftHandSideExpression of AssignmentExpression ) Statement for ( var ForBinding of AssignmentExpression ) Statement for ( ForDeclaration of AssignmentExpression ) Statement for await ( LeftHandSideExpression of AssignmentExpression ) Statement for await ( var ForBinding of AssignmentExpression ) Statement for await ( ForDeclaration of AssignmentExpression ) Statement
  1. 引数 iterationSet および « » を伴う StatementContainsUndefinedContinueTarget を返す。
Note

この節は Annex B.3.5 によって拡張される。

ContinueStatement : continue ;
  1. false を返す。
ContinueStatement : continue LabelIdentifier ;
  1. iterationSetLabelIdentifierStringValue を含むなら、false を返す。
  2. true を返す。
WithStatement : with ( Expression ) Statement
  1. 引数 iterationSet および « » を伴う StatementContainsUndefinedContinueTarget を返す。
SwitchStatement : switch ( Expression ) CaseBlock
  1. 引数 iterationSet および « » を伴う CaseBlockContainsUndefinedContinueTarget を返す。
CaseBlock : { }
  1. false を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在するなら、
    1. 引数 iterationSet および « » を伴う最初の CaseClausesContainsUndefinedContinueTargettrue なら、true を返す。
  2. 引数 iterationSet および « » を伴う DefaultClauseContainsUndefinedContinueTargettrue なら、true を返す。
  3. 2 番目の CaseClauses が存在しないなら、false を返す。
  4. 引数 iterationSet および « » を伴う 2 番目の CaseClausesContainsUndefinedContinueTarget を返す。
CaseClauses : CaseClauses CaseClause
  1. hasUndefinedLabels を、引数 iterationSet および « » を伴う CaseClausesContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 iterationSet および « » を伴う CaseClauseContainsUndefinedContinueTarget を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在するなら、引数 iterationSet および « » を伴う StatementListContainsUndefinedContinueTarget を返す。
  2. false を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在するなら、引数 iterationSet および « » を伴う StatementListContainsUndefinedContinueTarget を返す。
  2. false を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. labelLabelIdentifierStringValue とする。
  2. newLabelSetlabelSet と « label » の list-concatenation とする。
  3. 引数 iterationSet および newLabelSet を伴う LabelledItemContainsUndefinedContinueTarget を返す。
LabelledItem : FunctionDeclaration
  1. false を返す。
TryStatement : try Block Catch
  1. hasUndefinedLabels を、引数 iterationSet および « » を伴う BlockContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 iterationSet および « » を伴う CatchContainsUndefinedContinueTarget を返す。
TryStatement : try Block Finally
  1. hasUndefinedLabels を、引数 iterationSet および « » を伴う BlockContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 iterationSet および « » を伴う FinallyContainsUndefinedContinueTarget を返す。
TryStatement : try Block Catch Finally
  1. 引数 iterationSet および « » を伴う BlockContainsUndefinedContinueTargettrue なら、true を返す。
  2. 引数 iterationSet および « » を伴う CatchContainsUndefinedContinueTargettrue なら、true を返す。
  3. 引数 iterationSet および « » を伴う FinallyContainsUndefinedContinueTarget を返す。
Catch : catch ( CatchParameter ) Block
  1. 引数 iterationSet および « » を伴う BlockContainsUndefinedContinueTarget を返す。
FunctionStatementList : [empty]
  1. false を返す。
ClassStaticBlockStatementList : [empty]
  1. false を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. hasUndefinedLabels を、引数 iterationSet および « » を伴う ModuleItemListContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabelstrue なら、true を返す。
  3. 引数 iterationSet および « » を伴う ModuleItemContainsUndefinedContinueTarget を返す。
ModuleItem : ImportDeclaration ExportDeclaration
  1. false を返す。

8.4 関数名推論

8.4.1 Static Semantics: HasName

The syntax-directed operation HasName takes no arguments and returns a Boolean. It is defined piecewise over the following productions:

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList
  1. expr を、CoverParenthesizedExpressionAndArrowParameterList によって包摂される ParenthesizedExpression とする。
  2. exprIsFunctionDefinitionfalse なら、false を返す。
  3. exprHasName を返す。
FunctionExpression : function ( FormalParameters ) { FunctionBody } GeneratorExpression : function * ( FormalParameters ) { GeneratorBody } AsyncGeneratorExpression : async function * ( FormalParameters ) { AsyncGeneratorBody } AsyncFunctionExpression : async function ( FormalParameters ) { AsyncFunctionBody } ArrowFunction : ArrowParameters => ConciseBody AsyncArrowFunction : async AsyncArrowBindingIdentifier => AsyncConciseBody CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody ClassExpression : class ClassTail
  1. false を返す。
FunctionExpression : function BindingIdentifier ( FormalParameters ) { FunctionBody } GeneratorExpression : function * BindingIdentifier ( FormalParameters ) { GeneratorBody } AsyncGeneratorExpression : async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody } AsyncFunctionExpression : async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody } ClassExpression : class BindingIdentifier ClassTail
  1. true を返す。

8.4.2 Static Semantics: IsFunctionDefinition

The syntax-directed operation IsFunctionDefinition takes no arguments and returns a Boolean. It is defined piecewise over the following productions:

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList
  1. expr を、CoverParenthesizedExpressionAndArrowParameterList によって包摂される ParenthesizedExpression とする。
  2. exprIsFunctionDefinition を返す。
PrimaryExpression : this IdentifierReference Literal ArrayLiteral ObjectLiteral RegularExpressionLiteral TemplateLiteral MemberExpression : MemberExpression [ Expression ] MemberExpression . IdentifierName MemberExpression TemplateLiteral SuperProperty MetaProperty new MemberExpression Arguments MemberExpression . PrivateIdentifier NewExpression : new NewExpression LeftHandSideExpression : CallExpression OptionalExpression UpdateExpression : LeftHandSideExpression ++ LeftHandSideExpression -- ++ UnaryExpression -- UnaryExpression UnaryExpression : delete UnaryExpression void UnaryExpression typeof UnaryExpression + UnaryExpression - UnaryExpression ~ UnaryExpression ! UnaryExpression AwaitExpression ExponentiationExpression : UpdateExpression ** ExponentiationExpression MultiplicativeExpression : MultiplicativeExpression MultiplicativeOperator ExponentiationExpression AdditiveExpression : AdditiveExpression + MultiplicativeExpression AdditiveExpression - MultiplicativeExpression ShiftExpression : ShiftExpression << AdditiveExpression ShiftExpression >> AdditiveExpression ShiftExpression >>> AdditiveExpression RelationalExpression : RelationalExpression < ShiftExpression RelationalExpression > ShiftExpression RelationalExpression <= ShiftExpression RelationalExpression >= ShiftExpression RelationalExpression instanceof ShiftExpression RelationalExpression in ShiftExpression PrivateIdentifier in ShiftExpression EqualityExpression : EqualityExpression == RelationalExpression EqualityExpression != RelationalExpression EqualityExpression === RelationalExpression EqualityExpression !== RelationalExpression BitwiseANDExpression : BitwiseANDExpression & EqualityExpression BitwiseXORExpression : BitwiseXORExpression ^ BitwiseANDExpression BitwiseORExpression : BitwiseORExpression | BitwiseXORExpression LogicalANDExpression : LogicalANDExpression && BitwiseORExpression LogicalORExpression : LogicalORExpression || LogicalANDExpression CoalesceExpression : CoalesceExpressionHead ?? BitwiseORExpression ConditionalExpression : ShortCircuitExpression ? AssignmentExpression : AssignmentExpression AssignmentExpression : YieldExpression LeftHandSideExpression = AssignmentExpression LeftHandSideExpression AssignmentOperator AssignmentExpression LeftHandSideExpression &&= AssignmentExpression LeftHandSideExpression ||= AssignmentExpression LeftHandSideExpression ??= AssignmentExpression Expression : Expression , AssignmentExpression
  1. false を返す。
AssignmentExpression : ArrowFunction AsyncArrowFunction FunctionExpression : function BindingIdentifieropt ( FormalParameters ) { FunctionBody } GeneratorExpression : function * BindingIdentifieropt ( FormalParameters ) { GeneratorBody } AsyncGeneratorExpression : async function * BindingIdentifieropt ( FormalParameters ) { AsyncGeneratorBody } AsyncFunctionExpression : async function BindingIdentifieropt ( FormalParameters ) { AsyncFunctionBody } ClassExpression : class BindingIdentifieropt ClassTail
  1. true を返す。

8.4.3 Static Semantics: IsAnonymousFunctionDefinition ( expr )

The abstract operation IsAnonymousFunctionDefinition takes argument expr (an AssignmentExpression Parse Node, an Initializer Parse Node, or an Expression Parse Node) and returns a Boolean. これは、その引数が名前を束縛しない関数定義であるかどうかを判定する。 It performs the following steps when called:

  1. exprIsFunctionDefinitionfalse なら、false を返す。
  2. hasNameexprHasName とする。
  3. hasNametrue なら、false を返す。
  4. true を返す。

8.4.4 Static Semantics: IsIdentifierRef

The syntax-directed operation IsIdentifierRef takes no arguments and returns a Boolean. It is defined piecewise over the following productions:

PrimaryExpression : IdentifierReference
  1. true を返す。
PrimaryExpression : this Literal ArrayLiteral ObjectLiteral FunctionExpression ClassExpression GeneratorExpression AsyncFunctionExpression AsyncGeneratorExpression RegularExpressionLiteral TemplateLiteral CoverParenthesizedExpressionAndArrowParameterList MemberExpression : MemberExpression [ Expression ] MemberExpression . IdentifierName MemberExpression TemplateLiteral SuperProperty MetaProperty new MemberExpression Arguments MemberExpression . PrivateIdentifier NewExpression : new NewExpression LeftHandSideExpression : CallExpression OptionalExpression
  1. false を返す。

8.4.5 Runtime Semantics: NamedEvaluation

The syntax-directed operation NamedEvaluation takes argument name (a property key or a Private Name) and returns either a normal completion containing a function object or an abrupt completion. It is defined piecewise over the following productions:

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList
  1. expr を、CoverParenthesizedExpressionAndArrowParameterList によって包摂される ParenthesizedExpression とする。
  2. 引数 name を伴う exprNamedEvaluation を ? 返す。
ParenthesizedExpression : ( Expression )
  1. Assert: IsAnonymousFunctionDefinition(Expression) is true.
  2. 引数 name を伴う ExpressionNamedEvaluation を ? 返す。
FunctionExpression : function ( FormalParameters ) { FunctionBody }
  1. 引数 name を伴う FunctionExpressionInstantiateOrdinaryFunctionExpression を返す。
GeneratorExpression : function * ( FormalParameters ) { GeneratorBody }
  1. 引数 name を伴う GeneratorExpressionInstantiateGeneratorFunctionExpression を返す。
AsyncGeneratorExpression : async function * ( FormalParameters ) { AsyncGeneratorBody }
  1. 引数 name を伴う AsyncGeneratorExpressionInstantiateAsyncGeneratorFunctionExpression を返す。
AsyncFunctionExpression : async function ( FormalParameters ) { AsyncFunctionBody }
  1. 引数 name を伴う AsyncFunctionExpressionInstantiateAsyncFunctionExpression を返す。
ArrowFunction : ArrowParameters => ConciseBody
  1. 引数 name を伴う ArrowFunctionInstantiateArrowFunctionExpression を返す。
AsyncArrowFunction : async AsyncArrowBindingIdentifier => AsyncConciseBody CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody
  1. 引数 name を伴う AsyncArrowFunctionInstantiateAsyncArrowFunctionExpression を返す。
ClassExpression : class ClassTail
  1. sourceTextClassExpression に一致したソーステキストとする。
  2. 引数 undefined, name, および sourceText を伴う ClassTailClassDefinitionEvaluation を ? 返す。

8.5 Contains

8.5.1 Static Semantics: Contains

The syntax-directed operation Contains takes argument symbol (a grammar symbol) and returns a Boolean.

この仕様において、以下に列挙されていないすべての文法生成規則の選択肢は、暗黙に次の既定の Contains 定義を持つ:

  1. この Parse Node の各子ノード child について、次を行う
    1. childsymbol のインスタンスであるなら、true を返す。
    2. child が非終端記号のインスタンスであるなら、
      1. containedchild Contains symbol の結果とする。
      2. containedtrue なら、true を返す。
  2. false を返す。
FunctionDeclaration : function BindingIdentifier ( FormalParameters ) { FunctionBody } function ( FormalParameters ) { FunctionBody } FunctionExpression : function BindingIdentifieropt ( FormalParameters ) { FunctionBody } GeneratorDeclaration : function * BindingIdentifier ( FormalParameters ) { GeneratorBody } function * ( FormalParameters ) { GeneratorBody } GeneratorExpression : function * BindingIdentifieropt ( FormalParameters ) { GeneratorBody } AsyncGeneratorDeclaration : async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody } async function * ( FormalParameters ) { AsyncGeneratorBody } AsyncGeneratorExpression : async function * BindingIdentifieropt ( FormalParameters ) { AsyncGeneratorBody } AsyncFunctionDeclaration : async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody } async function ( FormalParameters ) { AsyncFunctionBody } AsyncFunctionExpression : async function BindingIdentifieropt ( FormalParameters ) { AsyncFunctionBody }
  1. false を返す。
Note 1

部分構造に依存する静的意味規則は、一般に関数定義の内部を見ない。

ClassTail : ClassHeritageopt { ClassBody }
  1. symbolClassBody なら、true を返す。
  2. symbolClassHeritage なら、
    1. ClassHeritage が存在するなら、true を返す。
    2. false を返す。
  3. ClassHeritage が存在するなら、
    1. ClassHeritage Contains symboltrue なら、true を返す。
  4. 引数 symbol を伴う ClassBodyComputedPropertyContains の結果を返す。
Note 2

部分構造に依存する静的意味規則は、一般に PropertyName を除いて class body の内部を見ない。

ClassStaticBlock : static { ClassStaticBlockBody }
  1. false を返す。
Note 3

部分構造に依存する静的意味規則は、一般に static 初期化ブロックの内部を見ない。

ArrowFunction : ArrowParameters => ConciseBody
  1. symbolNewTarget, SuperProperty, SuperCall, super, または this のいずれでもないなら、false を返す。
  2. ArrowParameters Contains symboltrue なら、true を返す。
  3. ConciseBody Contains symbol を返す。
ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList
  1. formals を、CoverParenthesizedExpressionAndArrowParameterList によって包摂される ArrowFormalParameters とする。
  2. formals Contains symbol を返す。
AsyncArrowFunction : async AsyncArrowBindingIdentifier => AsyncConciseBody
  1. symbolNewTarget, SuperProperty, SuperCall, super, または this のいずれでもないなら、false を返す。
  2. AsyncConciseBody Contains symbol を返す。
AsyncArrowFunction : CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody
  1. symbolNewTarget, SuperProperty, SuperCall, super, または this のいずれでもないなら、false を返す。
  2. head を、CoverCallExpressionAndAsyncArrowHead によって包摂される AsyncArrowHead とする。
  3. head Contains symboltrue なら、true を返す。
  4. AsyncConciseBody Contains symbol を返す。
Note 4

Contains は、ArrowFunction または AsyncArrowFunction 内での new.target, this, および super の使用を検出するために使われる。

PropertyDefinition : MethodDefinition
  1. symbolMethodDefinition なら、true を返す。
  2. 引数 symbol を伴う MethodDefinitionComputedPropertyContains の結果を返す。
LiteralPropertyName : IdentifierName
  1. false を返す。
MemberExpression : MemberExpression . IdentifierName
  1. MemberExpression Contains symboltrue なら、true を返す。
  2. false を返す。
SuperProperty : super . IdentifierName
  1. symbolReservedWord super なら、true を返す。
  2. false を返す。
CallExpression : CallExpression . IdentifierName
  1. CallExpression Contains symboltrue なら、true を返す。
  2. false を返す。
OptionalChain : ?. IdentifierName
  1. false を返す。
OptionalChain : OptionalChain . IdentifierName
  1. OptionalChain Contains symboltrue なら、true を返す。
  2. false を返す。

8.5.2 Static Semantics: ComputedPropertyContains

The syntax-directed operation ComputedPropertyContains takes argument symbol (a grammar symbol) and returns a Boolean. It is defined piecewise over the following productions:

ClassElementName : PrivateIdentifier PropertyName : LiteralPropertyName
  1. false を返す。
PropertyName : ComputedPropertyName
  1. ComputedPropertyName Contains symbol の結果を返す。
MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody } get ClassElementName ( ) { FunctionBody } set ClassElementName ( PropertySetParameterList ) { FunctionBody }
  1. 引数 symbol を伴う ClassElementNameComputedPropertyContains の結果を返す。
GeneratorMethod : * ClassElementName ( UniqueFormalParameters ) { GeneratorBody }
  1. 引数 symbol を伴う ClassElementNameComputedPropertyContains の結果を返す。
AsyncGeneratorMethod : async * ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }
  1. 引数 symbol を伴う ClassElementNameComputedPropertyContains の結果を返す。
ClassElementList : ClassElementList ClassElement
  1. inList を、引数 symbol を伴う ClassElementListComputedPropertyContains とする。
  2. inListtrue なら、true を返す。
  3. 引数 symbol を伴う ClassElementComputedPropertyContains の結果を返す。
ClassElement : ClassStaticBlock
  1. false を返す。
ClassElement : ;
  1. false を返す。
AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }
  1. 引数 symbol を伴う ClassElementNameComputedPropertyContains の結果を返す。
FieldDefinition : ClassElementName Initializeropt
  1. 引数 symbol を伴う ClassElementNameComputedPropertyContains の結果を返す。

8.6 その他

これらの操作は仕様全体の複数の箇所で使用される。

8.6.1 Runtime Semantics: InstantiateFunctionObject

The syntax-directed operation InstantiateFunctionObject takes arguments env (an Environment Record) and privateEnv (a PrivateEnvironment Record or null) and returns an ECMAScript function object. It is defined piecewise over the following productions:

FunctionDeclaration : function BindingIdentifier ( FormalParameters ) { FunctionBody } function ( FormalParameters ) { FunctionBody }
  1. 引数 env および privateEnv を伴う FunctionDeclarationInstantiateOrdinaryFunctionObject を返す。
GeneratorDeclaration : function * BindingIdentifier ( FormalParameters ) { GeneratorBody } function * ( FormalParameters ) { GeneratorBody }
  1. 引数 env および privateEnv を伴う GeneratorDeclarationInstantiateGeneratorFunctionObject を返す。
AsyncGeneratorDeclaration : async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody } async function * ( FormalParameters ) { AsyncGeneratorBody }
  1. 引数 env および privateEnv を伴う AsyncGeneratorDeclarationInstantiateAsyncGeneratorFunctionObject を返す。
AsyncFunctionDeclaration : async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody } async function ( FormalParameters ) { AsyncFunctionBody }
  1. 引数 env および privateEnv を伴う AsyncFunctionDeclarationInstantiateAsyncFunctionObject を返す。

8.6.2 Runtime Semantics: BindingInitialization

The syntax-directed operation BindingInitialization takes arguments value (an ECMAScript language value) and environment (an Environment Record or undefined) and returns either a normal completion containing unused or an abrupt completion.

Note

environmentundefined が渡されるのは、初期化値の代入に PutValue 操作を使用すべきことを示すためである。これは var 文や、一部の非 strict 関数の仮引数リストの場合に該当する(10.2.11 を参照)。これらの場合、初期化子の評価に先立って lexical binding が hoist され、事前初期化される。

It is defined piecewise over the following productions:

BindingIdentifier : Identifier
  1. nameIdentifierStringValue とする。
  2. InitializeBoundName(name, value, environment) を返す。
BindingIdentifier : yield
  1. InitializeBoundName("yield", value, environment) を返す。
BindingIdentifier : await
  1. InitializeBoundName("await", value, environment) を返す。
BindingPattern : ObjectBindingPattern
  1. RequireObjectCoercible(value) を実行する。
  2. 引数 value および environment を伴う ObjectBindingPatternBindingInitialization を ? 返す。
BindingPattern : ArrayBindingPattern
  1. iteratorRecord を ? GetIterator(value, sync) とする。
  2. result を、引数 iteratorRecord および environment を伴う ArrayBindingPatternIteratorBindingInitializationCompletion とする。
  3. iteratorRecord.[[Done]]false なら、? IteratorClose(iteratorRecord, result) を返す。
  4. result を返す。
ObjectBindingPattern : { }
  1. unused を返す。
ObjectBindingPattern : { BindingPropertyList } { BindingPropertyList , }
  1. 引数 value および environment を伴う BindingPropertyListPropertyBindingInitialization を ? 実行する。
  2. unused を返す。
ObjectBindingPattern : { BindingRestProperty }
  1. excludedNames を新しい空の List とする。
  2. 引数 value, environment, および excludedNames を伴う BindingRestPropertyRestBindingInitialization を ? 返す。
ObjectBindingPattern : { BindingPropertyList , BindingRestProperty }
  1. excludedNames を、引数 value および environment を伴う BindingPropertyListPropertyBindingInitialization の ? とする。
  2. 引数 value, environment, および excludedNames を伴う BindingRestPropertyRestBindingInitialization を ? 返す。

8.6.2.1 InitializeBoundName ( name, value, environment )

The abstract operation InitializeBoundName takes arguments name (a String), value (an ECMAScript language value), and environment (an Environment Record or undefined) and returns either a normal completion containing unused or an abrupt completion. It performs the following steps when called:

  1. environmentundefined でない場合、
    1. environment.InitializeBinding(name, value) を実行する。
    2. unused を返す。
  2. lhs を ? ResolveBinding(name) とする。
  3. PutValue(lhs, value) を返す。

8.6.3 Runtime Semantics: IteratorBindingInitialization

The syntax-directed operation IteratorBindingInitialization takes arguments iteratorRecord (an Iterator Record) and environment (an Environment Record or undefined) and returns either a normal completion containing unused or an abrupt completion.

Note

environmentundefined が渡される場合、それは初期化値の代入に PutValue 操作を使用すべきことを示す。これは非 strict 関数の仮引数リストの場合に該当する。その場合、同じ名前を持つ複数の引数が存在する可能性に対処するため、仮引数束縛は事前初期化される。

It is defined piecewise over the following productions:

ArrayBindingPattern : [ ]
  1. unused を返す。
ArrayBindingPattern : [ Elision ]
  1. 引数 iteratorRecord を伴う ElisionIteratorDestructuringAssignmentEvaluation を ? 返す。
ArrayBindingPattern : [ Elisionopt BindingRestElement ]
  1. Elision が存在するなら、
    1. 引数 iteratorRecord を伴う ElisionIteratorDestructuringAssignmentEvaluation を ? 実行する。
  2. 引数 iteratorRecord および environment を伴う BindingRestElementIteratorBindingInitialization を ? 返す。
ArrayBindingPattern : [ BindingElementList , Elision ]
  1. 引数 iteratorRecord および environment を伴う BindingElementListIteratorBindingInitialization を ? 実行する。
  2. 引数 iteratorRecord を伴う ElisionIteratorDestructuringAssignmentEvaluation を ? 返す。
ArrayBindingPattern : [ BindingElementList , Elisionopt BindingRestElement ]
  1. 引数 iteratorRecord および environment を伴う BindingElementListIteratorBindingInitialization を ? 実行する。
  2. Elision が存在するなら、
    1. 引数 iteratorRecord を伴う ElisionIteratorDestructuringAssignmentEvaluation を ? 実行する。
  3. 引数 iteratorRecord および environment を伴う BindingRestElementIteratorBindingInitialization を ? 返す。
BindingElementList : BindingElementList , BindingElisionElement
  1. 引数 iteratorRecord および environment を伴う BindingElementListIteratorBindingInitialization を ? 実行する。
  2. 引数 iteratorRecord および environment を伴う BindingElisionElementIteratorBindingInitialization を ? 返す。
BindingElisionElement : Elision BindingElement
  1. 引数 iteratorRecord を伴う ElisionIteratorDestructuringAssignmentEvaluation を ? 実行する。
  2. 引数 iteratorRecord および environment を伴う BindingElementIteratorBindingInitialization を ? 返す。
SingleNameBinding : BindingIdentifier Initializeropt
  1. bindingIdBindingIdentifierStringValue とする。
  2. lhs を ? ResolveBinding(bindingId, environment) とする。
  3. vundefined とする。
  4. iteratorRecord.[[Done]]false なら、
    1. next を ? IteratorStepValue(iteratorRecord) とする。
    2. nextdone でないなら、
      1. vnext に設定する。
  5. Initializer が存在し、かつ vundefined であるなら、
    1. IsAnonymousFunctionDefinition(Initializer) が true なら、
      1. 引数 bindingId を伴う InitializerNamedEvaluation を ? v に設定する。
    2. Else,
      1. defaultValueInitializer の ? Evaluation とする。
      2. v を ? GetValue(defaultValue) に設定する。
  6. environmentundefined なら、? PutValue(lhs, v) を返す。
  7. InitializeReferencedBinding(lhs, v) を返す。
BindingElement : BindingPattern Initializeropt
  1. vundefined とする。
  2. iteratorRecord.[[Done]]false なら、
    1. next を ? IteratorStepValue(iteratorRecord) とする。
    2. nextdone でないなら、
      1. vnext に設定する。
  3. Initializer が存在し、かつ vundefined であるなら、
    1. defaultValueInitializer の ? Evaluation とする。
    2. v を ? GetValue(defaultValue) に設定する。
  4. 引数 v および environment を伴う BindingPatternBindingInitialization を ? 返す。
BindingRestElement : ... BindingIdentifier
  1. lhs を ? ResolveBinding(BindingIdentifierStringValue, environment) とする。
  2. array を ! ArrayCreate(0) とする。
  3. n を 0 とする。
  4. 繰り返す
    1. nextdone とする。
    2. iteratorRecord.[[Done]]false なら、
      1. next を ? IteratorStepValue(iteratorRecord) に設定する。
    3. nextdone なら、
      1. environmentundefined なら、? PutValue(lhs, array) を返す。
      2. InitializeReferencedBinding(lhs, array) を返す。
    4. CreateDataPropertyOrThrow(array, ! ToString(𝔽(n)), next) を実行する。
    5. nn + 1 に設定する。
BindingRestElement : ... BindingPattern
  1. array を ! ArrayCreate(0) とする。
  2. n を 0 とする。
  3. 繰り返す
    1. nextdone とする。
    2. iteratorRecord.[[Done]]false なら、
      1. next を ? IteratorStepValue(iteratorRecord) に設定する。
    3. nextdone なら、
      1. 引数 array および environment を伴う BindingPatternBindingInitialization を ? 返す。
    4. CreateDataPropertyOrThrow(array, ! ToString(𝔽(n)), next) を実行する。
    5. nn + 1 に設定する。
FormalParameters : [empty]
  1. unused を返す。
FormalParameters : FormalParameterList , FunctionRestParameter
  1. 引数 iteratorRecord および environment を伴う FormalParameterListIteratorBindingInitialization を ? 実行する。
  2. 引数 iteratorRecord および environment を伴う FunctionRestParameterIteratorBindingInitialization を ? 返す。
FormalParameterList : FormalParameterList , FormalParameter
  1. 引数 iteratorRecord および environment を伴う FormalParameterListIteratorBindingInitialization を ? 実行する。
  2. 引数 iteratorRecord および environment を伴う FormalParameterIteratorBindingInitialization を ? 返す。
ArrowParameters : BindingIdentifier
  1. vundefined とする。
  2. Assert: iteratorRecord.[[Done]] is false.
  3. next を ? IteratorStepValue(iteratorRecord) とする。
  4. nextdone でないなら、
    1. vnext に設定する。
  5. 引数 v および environment を伴う BindingIdentifierBindingInitialization を ? 返す。
ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList
  1. formals を、CoverParenthesizedExpressionAndArrowParameterList によって包摂される ArrowFormalParameters とする。
  2. 引数 iteratorRecord および environment を伴う formalsIteratorBindingInitialization を ? 返す。
AsyncArrowBindingIdentifier : BindingIdentifier
  1. vundefined とする。
  2. Assert: iteratorRecord.[[Done]] is false.
  3. next を ? IteratorStepValue(iteratorRecord) とする。
  4. nextdone でないなら、
    1. vnext に設定する。
  5. 引数 v および environment を伴う BindingIdentifierBindingInitialization を ? 返す。

8.6.4 Static Semantics: AssignmentTargetType

The syntax-directed operation AssignmentTargetType takes no arguments and returns simple, web-compat, or invalid. It is defined piecewise over the following productions:

IdentifierReference : Identifier
  1. IsStrict(this IdentifierReference) が true であり、かつ IdentifierStringValue"eval" または "arguments" のいずれかであるなら、invalid を返す。
  2. simple を返す。
IdentifierReference : yield await CallExpression : CallExpression [ Expression ] CallExpression . IdentifierName CallExpression . PrivateIdentifier MemberExpression : MemberExpression [ Expression ] MemberExpression . IdentifierName SuperProperty MemberExpression . PrivateIdentifier
  1. simple を返す。
PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList
  1. expr を、CoverParenthesizedExpressionAndArrowParameterList によって包摂される ParenthesizedExpression とする。
  2. exprAssignmentTargetType を返す。
CallExpression : CoverCallExpressionAndAsyncArrowHead CallExpression Arguments
  1. ホストがウェブブラウザであるか、または 関数呼び出し代入ターゲットに対する実行時エラー をサポートし、かつ IsStrict(this CallExpression) が false であるなら、
    1. web-compat を返す。
  2. invalid を返す。
PrimaryExpression : this Literal ArrayLiteral ObjectLiteral FunctionExpression ClassExpression GeneratorExpression AsyncFunctionExpression AsyncGeneratorExpression RegularExpressionLiteral TemplateLiteral CallExpression : SuperCall ImportCall CallExpression TemplateLiteral NewExpression : new NewExpression MemberExpression : MemberExpression TemplateLiteral new MemberExpression Arguments NewTarget : new . target ImportMeta : import . meta LeftHandSideExpression : OptionalExpression UpdateExpression : LeftHandSideExpression ++ LeftHandSideExpression -- ++ UnaryExpression -- UnaryExpression UnaryExpression : delete UnaryExpression void UnaryExpression typeof UnaryExpression + UnaryExpression - UnaryExpression ~ UnaryExpression ! UnaryExpression AwaitExpression ExponentiationExpression : UpdateExpression ** ExponentiationExpression MultiplicativeExpression : MultiplicativeExpression MultiplicativeOperator ExponentiationExpression AdditiveExpression : AdditiveExpression + MultiplicativeExpression AdditiveExpression - MultiplicativeExpression ShiftExpression : ShiftExpression << AdditiveExpression ShiftExpression >> AdditiveExpression ShiftExpression >>> AdditiveExpression RelationalExpression : RelationalExpression < ShiftExpression RelationalExpression > ShiftExpression RelationalExpression <= ShiftExpression RelationalExpression >= ShiftExpression RelationalExpression instanceof ShiftExpression RelationalExpression in ShiftExpression PrivateIdentifier in ShiftExpression EqualityExpression : EqualityExpression == RelationalExpression EqualityExpression != RelationalExpression EqualityExpression === RelationalExpression EqualityExpression !== RelationalExpression BitwiseANDExpression : BitwiseANDExpression & EqualityExpression BitwiseXORExpression : BitwiseXORExpression ^ BitwiseANDExpression BitwiseORExpression : BitwiseORExpression | BitwiseXORExpression LogicalANDExpression : LogicalANDExpression && BitwiseORExpression LogicalORExpression : LogicalORExpression || LogicalANDExpression CoalesceExpression : CoalesceExpressionHead ?? BitwiseORExpression ConditionalExpression : ShortCircuitExpression ? AssignmentExpression : AssignmentExpression AssignmentExpression : YieldExpression ArrowFunction AsyncArrowFunction LeftHandSideExpression = AssignmentExpression LeftHandSideExpression AssignmentOperator AssignmentExpression LeftHandSideExpression &&= AssignmentExpression LeftHandSideExpression ||= AssignmentExpression LeftHandSideExpression ??= AssignmentExpression Expression : Expression , AssignmentExpression
  1. invalid を返す。

8.6.5 Static Semantics: PropName

The syntax-directed operation PropName takes no arguments and returns a String or empty. It is defined piecewise over the following productions:

PropertyDefinition : IdentifierReference
  1. IdentifierReferenceStringValue を返す。
PropertyDefinition : ... AssignmentExpression
  1. empty を返す。
PropertyDefinition : PropertyName : AssignmentExpression
  1. PropertyNamePropName を返す。
LiteralPropertyName : IdentifierName AttributeKey : IdentifierName
  1. IdentifierNameStringValue を返す。
LiteralPropertyName : StringLiteral AttributeKey : StringLiteral
  1. StringLiteralSV を返す。
LiteralPropertyName : NumericLiteral
  1. nbrNumericLiteralNumericValue とする。
  2. ToString(nbr) を返す。
ComputedPropertyName : [ AssignmentExpression ]
  1. empty を返す。
MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody } get ClassElementName ( ) { FunctionBody } set ClassElementName ( PropertySetParameterList ) { FunctionBody }
  1. ClassElementNamePropName を返す。
GeneratorMethod : * ClassElementName ( UniqueFormalParameters ) { GeneratorBody }
  1. ClassElementNamePropName を返す。
AsyncGeneratorMethod : async * ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }
  1. ClassElementNamePropName を返す。
ClassElement : ClassStaticBlock
  1. empty を返す。
ClassElement : ;
  1. empty を返す。
AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }
  1. ClassElementNamePropName を返す。
FieldDefinition : ClassElementName Initializeropt
  1. ClassElementNamePropName を返す。
ClassElementName : PrivateIdentifier
  1. empty を返す。