ページ表示設定

8 構文指向操作

この節で定義されるものに加えて、専門化された構文指向操作が、この仕様全体の各所で定義されています。

8.1 Runtime Semantics: Evaluation

構文指向操作 Evaluation。引数なし。戻り値:完了レコード。

注
この操作の定義は、この仕様の「ECMAScript 言語」の各節に分散しています。各定義は、関連する生成規則を定義する箇所の後に現れます。

8.2 スコープ解析

8.2.1 Static Semantics: BoundNames

構文指向操作 BoundNames。引数なし。戻り値:リスト (要素:String)。

注

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

次の生成規則ごとに定義される。

BindingIdentifier : Identifier
  1. Identifier の StringValue を唯一の要素とする List を返す。
BindingIdentifier : yield
  1. « "yield" » を返す。
BindingIdentifier : await
  1. « "await" » を返す。
LexicalDeclaration : LetOrConst BindingList ;
  1. BindingList の BoundNames を返す。
UsingDeclaration : using BindingList ; AwaitUsingDeclaration : CoverAwaitExpressionAndAwaitUsingDeclarationHead BindingList ;
  1. BindingList の BoundNames を返す。
BindingList : BindingList , LexicalBinding
  1. names1 を BindingList の BoundNames とする。
  2. names2 を LexicalBinding の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
LexicalBinding : BindingIdentifier Initializeropt
  1. BindingIdentifier の BoundNames を返す。
LexicalBinding : BindingPattern Initializer
  1. BindingPattern の BoundNames を返す。
VariableDeclarationList : VariableDeclarationList , VariableDeclaration
  1. names1 を VariableDeclarationList の BoundNames とする。
  2. names2 を VariableDeclaration の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
VariableDeclaration : BindingIdentifier Initializeropt
  1. BindingIdentifier の BoundNames を返す。
VariableDeclaration : BindingPattern Initializer
  1. BindingPattern の BoundNames を返す。
ObjectBindingPattern : { }
  1. 新しい空の List を返す。
ObjectBindingPattern : { BindingPropertyList , BindingRestProperty }
  1. names1 を BindingPropertyList の BoundNames とする。
  2. names2 を BindingRestProperty の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
ArrayBindingPattern : [ Elisionopt ]
  1. 新しい空の List を返す。
ArrayBindingPattern : [ Elisionopt BindingRestElement ]
  1. BindingRestElement の BoundNames を返す。
ArrayBindingPattern : [ BindingElementList , Elisionopt ]
  1. BindingElementList の BoundNames を返す。
ArrayBindingPattern : [ BindingElementList , Elisionopt BindingRestElement ]
  1. names1 を BindingElementList の BoundNames とする。
  2. names2 を BindingRestElement の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
BindingPropertyList : BindingPropertyList , BindingProperty
  1. names1 を BindingPropertyList の BoundNames とする。
  2. names2 を BindingProperty の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
BindingElementList : BindingElementList , BindingElisionElement
  1. names1 を BindingElementList の BoundNames とする。
  2. names2 を BindingElisionElement の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
BindingElisionElement : Elisionopt BindingElement
  1. BindingElement の BoundNames を返す。
BindingProperty : PropertyName : BindingElement
  1. BindingElement の BoundNames を返す。
SingleNameBinding : BindingIdentifier Initializeropt
  1. BindingIdentifier の BoundNames を返す。
BindingElement : BindingPattern Initializeropt
  1. BindingPattern の BoundNames を返す。
ForDeclaration : LetOrConst ForBinding
  1. ForBinding の BoundNames を返す。
FunctionDeclaration : function BindingIdentifier ( FormalParameters ) { FunctionBody }
  1. BindingIdentifier の BoundNames を返す。
FunctionDeclaration : function ( FormalParameters ) { FunctionBody }
  1. « "*default*" » を返す。
FormalParameters : [empty]
  1. 新しい空の List を返す。
FormalParameters : FormalParameterList , FunctionRestParameter
  1. names1 を FormalParameterList の BoundNames とする。
  2. names2 を FunctionRestParameter の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
FormalParameterList : FormalParameterList , FormalParameter
  1. names1 を FormalParameterList の BoundNames とする。
  2. names2 を FormalParameter の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList
  1. formals を CoverParenthesizedExpressionAndArrowParameterList によって被覆される ArrowFormalParameters とする。
  2. formals の BoundNames を返す。
GeneratorDeclaration : function * BindingIdentifier ( FormalParameters ) { GeneratorBody }
  1. BindingIdentifier の BoundNames を返す。
GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody }
  1. « "*default*" » を返す。
AsyncGeneratorDeclaration : async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody }
  1. BindingIdentifier の BoundNames を返す。
AsyncGeneratorDeclaration : async function * ( FormalParameters ) { AsyncGeneratorBody }
  1. « "*default*" » を返す。
ClassDeclaration : class BindingIdentifier ClassTail
  1. BindingIdentifier の BoundNames を返す。
ClassDeclaration : class ClassTail
  1. « "*default*" » を返す。
AsyncFunctionDeclaration : async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody }
  1. BindingIdentifier の BoundNames を返す。
AsyncFunctionDeclaration : async function ( FormalParameters ) { AsyncFunctionBody }
  1. « "*default*" » を返す。
CoverCallExpressionAndAsyncArrowHead : MemberExpression Arguments
  1. head を CoverCallExpressionAndAsyncArrowHead によって被覆される AsyncArrowHead とする。
  2. head の BoundNames を返す。
ImportDeclaration : import ImportClause FromClause WithClauseopt ;
  1. ImportClause の BoundNames を返す。
ImportDeclaration : import ModuleSpecifier WithClauseopt ;
  1. 新しい空の List を返す。
ImportClause : ImportedDefaultBinding , NameSpaceImport
  1. names1 を ImportedDefaultBinding の BoundNames とする。
  2. names2 を NameSpaceImport の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
ImportClause : ImportedDefaultBinding , NamedImports
  1. names1 を ImportedDefaultBinding の BoundNames とする。
  2. names2 を NamedImports の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
NamedImports : { }
  1. 新しい空の List を返す。
ImportsList : ImportsList , ImportSpecifier
  1. names1 を ImportsList の BoundNames とする。
  2. names2 を ImportSpecifier の BoundNames とする。
  3. names1 と names2 のリスト連結を返す。
ImportSpecifier : ModuleExportName as ImportedBinding
  1. ImportedBinding の BoundNames を返す。
ExportDeclaration : export ExportFromClause FromClause WithClauseopt ; export NamedExports ;
  1. 新しい空の List を返す。
ExportDeclaration : export VariableStatement
  1. VariableStatement の BoundNames を返す。
ExportDeclaration : export Declaration
  1. Declaration の BoundNames を返す。
ExportDeclaration : export default HoistableDeclaration
  1. declNames を HoistableDeclaration の BoundNames とする。
  2. declNames が要素 "*default*" を含まない場合、"*default*" を declNames に追加する。
  3. declNames を返す。
ExportDeclaration : export default ClassDeclaration
  1. declNames を ClassDeclaration の BoundNames とする。
  2. declNames が要素 "*default*" を含まない場合、"*default*" を declNames に追加する。
  3. declNames を返す。
ExportDeclaration : export default AssignmentExpression ;
  1. « "*default*" » を返す。

8.2.2 Static Semantics: DeclarationPart

構文指向操作 DeclarationPart。引数なし。戻り値:構文解析ノード。 次の生成規則ごとに定義される。

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

構文指向操作 IsConstantDeclaration。引数なし。戻り値:Boolean。 次の生成規則ごとに定義される。

LexicalDeclaration : LetOrConst BindingList ;
  1. LetOrConst の IsConstantDeclaration を返す。
LetOrConst : let
  1. false を返す。
LetOrConst : const
  1. true を返す。
UsingDeclaration : using BindingList ; AwaitUsingDeclaration : CoverAwaitExpressionAndAwaitUsingDeclarationHead BindingList ;
  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 を返す。
注

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

8.2.4 Static Semantics: IsUsingDeclaration

構文指向操作 IsUsingDeclaration。引数なし。戻り値:Boolean。 次の生成規則ごとに定義される。

LexicalDeclaration : LetOrConst BindingList ;
  1. false を返す。
UsingDeclaration : using BindingList ;
  1. true を返す。
AwaitUsingDeclaration : CoverAwaitExpressionAndAwaitUsingDeclarationHead BindingList ;
  1. false を返す。
ForDeclaration : LetOrConst ForBinding
  1. false を返す。
ForDeclaration : using ForBinding
  1. true を返す。
ForDeclaration : await using ForBinding
  1. false を返す。
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 を返す。

8.2.5 Static Semantics: IsAwaitUsingDeclaration

構文指向操作 IsAwaitUsingDeclaration。引数なし。戻り値:Boolean。 次の生成規則ごとに定義される。

LexicalDeclaration : LetOrConst BindingList ;
  1. false を返す。
UsingDeclaration : using BindingList ;
  1. false を返す。
AwaitUsingDeclaration : CoverAwaitExpressionAndAwaitUsingDeclarationHead BindingList ;
  1. true を返す。
ForDeclaration : LetOrConst ForBinding
  1. false を返す。
ForDeclaration : using ForBinding
  1. false を返す。
ForDeclaration : await using ForBinding
  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 を返す。

8.2.6 Static Semantics: LexicallyDeclaredNames

構文指向操作 LexicallyDeclaredNames。引数なし。戻り値:リスト (要素:String)。 次の生成規則ごとに定義される。

Block : { }
  1. 新しい空の List を返す。
StatementList : StatementList StatementListItem
  1. names1 を StatementList の LexicallyDeclaredNames とする。
  2. names2 を StatementListItem の LexicallyDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
StatementListItem : Statement
  1. Statement が Statement : LabelledStatement である場合、LabelledStatement の LexicallyDeclaredNames を返す。
  2. 新しい空の List を返す。
StatementListItem : Declaration
  1. Declaration の BoundNames を返す。
CaseBlock : { }
  1. 新しい空の List を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在する場合、names1 を最初の CaseClauses の LexicallyDeclaredNames とする。
  2. そうでない場合、names1 を新しい空の List とする。
  3. names2 を DefaultClause の LexicallyDeclaredNames とする。
  4. 2番目の CaseClauses が存在する場合、names3 を2番目の CaseClauses の LexicallyDeclaredNames とする。
  5. そうでない場合、names3 を新しい空の List とする。
  6. names1、names2、および names3 のリスト連結を返す。
CaseClauses : CaseClauses CaseClause
  1. names1 を CaseClauses の LexicallyDeclaredNames とする。
  2. names2 を CaseClause の LexicallyDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在する場合、StatementList の LexicallyDeclaredNames を返す。
  2. 新しい空の List を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在する場合、StatementList の LexicallyDeclaredNames を返す。
  2. 新しい空の List を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItem の LexicallyDeclaredNames を返す。
LabelledItem : Statement
  1. 新しい空の List を返す。
LabelledItem : FunctionDeclaration
  1. FunctionDeclaration の BoundNames を返す。
FunctionStatementList : [empty]
  1. 新しい空の List を返す。
FunctionStatementList : StatementList
  1. StatementList の TopLevelLexicallyDeclaredNames を返す。
ClassStaticBlockStatementList : [empty]
  1. 新しい空の List を返す。
ClassStaticBlockStatementList : StatementList
  1. StatementList の TopLevelLexicallyDeclaredNames を返す。
ConciseBody : ExpressionBody
  1. 新しい空の List を返す。
AsyncConciseBody : ExpressionBody
  1. 新しい空の List を返す。
Script : [empty]
  1. 新しい空の List を返す。
ScriptBody : StatementList
  1. StatementList の TopLevelLexicallyDeclaredNames を返す。
注 1

Script のトップレベルでは、関数宣言はレキシカル宣言ではなく var 宣言のように扱われます。

注 2

Module の LexicallyDeclaredNames には、インポートされたすべての束縛の名前が含まれます。

ModuleItemList : ModuleItemList ModuleItem
  1. names1 を ModuleItemList の LexicallyDeclaredNames とする。
  2. names2 を ModuleItem の LexicallyDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
ModuleItem : ImportDeclaration
  1. ImportDeclaration の BoundNames を返す。
ModuleItem : ExportDeclaration
  1. ExportDeclaration が export VariableStatement である場合、新しい空の List を返す。
  2. ExportDeclaration の BoundNames を返す。
ModuleItem : StatementListItem
  1. StatementListItem の LexicallyDeclaredNames を返す。
注 3

Module のトップレベルでは、関数宣言は var 宣言ではなくレキシカル宣言のように扱われます。

8.2.7 Static Semantics: LexicallyScopedDeclarations

構文指向操作 LexicallyScopedDeclarations。引数なし。戻り値:リスト (要素:構文解析ノード)。 次の生成規則ごとに定義される。

StatementList : StatementList StatementListItem
  1. decls1 を StatementList の LexicallyScopedDeclarations とする。
  2. decls2 を StatementListItem の LexicallyScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
StatementListItem : Statement
  1. Statement が Statement : LabelledStatement である場合、LabelledStatement の LexicallyScopedDeclarations を返す。
  2. 新しい空の List を返す。
StatementListItem : Declaration
  1. Declaration の DeclarationPart を唯一の要素とする List を返す。
CaseBlock : { }
  1. 新しい空の List を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在する場合、decls1 を最初の CaseClauses の LexicallyScopedDeclarations とする。
  2. そうでない場合、decls1 を新しい空の List とする。
  3. decls2 を DefaultClause の LexicallyScopedDeclarations とする。
  4. 2番目の CaseClauses が存在する場合、decls3 を2番目の CaseClauses の LexicallyScopedDeclarations とする。
  5. そうでない場合、decls3 を新しい空の List とする。
  6. decls1、decls2、および decls3 のリスト連結を返す。
CaseClauses : CaseClauses CaseClause
  1. decls1 を CaseClauses の LexicallyScopedDeclarations とする。
  2. decls2 を CaseClause の LexicallyScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在する場合、StatementList の LexicallyScopedDeclarations を返す。
  2. 新しい空の List を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在する場合、StatementList の LexicallyScopedDeclarations を返す。
  2. 新しい空の List を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItem の LexicallyScopedDeclarations を返す。
LabelledItem : Statement
  1. 新しい空の List を返す。
LabelledItem : FunctionDeclaration
  1. « FunctionDeclaration » を返す。
FunctionStatementList : [empty]
  1. 新しい空の List を返す。
FunctionStatementList : StatementList
  1. StatementList の TopLevelLexicallyScopedDeclarations を返す。
ClassStaticBlockStatementList : [empty]
  1. 新しい空の List を返す。
ClassStaticBlockStatementList : StatementList
  1. StatementList の TopLevelLexicallyScopedDeclarations を返す。
ConciseBody : ExpressionBody
  1. 新しい空の List を返す。
AsyncConciseBody : ExpressionBody
  1. 新しい空の List を返す。
Script : [empty]
  1. 新しい空の List を返す。
ScriptBody : StatementList
  1. StatementList の TopLevelLexicallyScopedDeclarations を返す。
Module : [empty]
  1. 新しい空の List を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. decls1 を ModuleItemList の LexicallyScopedDeclarations とする。
  2. decls2 を ModuleItem の LexicallyScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
ModuleItem : ImportDeclaration
  1. 新しい空の List を返す。
ExportDeclaration : export ExportFromClause FromClause WithClauseopt ; export NamedExports ; export VariableStatement
  1. 新しい空の List を返す。
ExportDeclaration : export Declaration
  1. Declaration の DeclarationPart を唯一の要素とする List を返す。
ExportDeclaration : export default HoistableDeclaration
  1. HoistableDeclaration の DeclarationPart を唯一の要素とする List を返す。
ExportDeclaration : export default ClassDeclaration
  1. ClassDeclaration を唯一の要素とする List を返す。
ExportDeclaration : export default AssignmentExpression ;
  1. この ExportDeclaration を唯一の要素とする List を返す。

8.2.8 Static Semantics: VarDeclaredNames

構文指向操作 VarDeclaredNames。引数なし。戻り値:リスト (要素:String)。 次の生成規則ごとに定義される。

Statement : EmptyStatement ExpressionStatement ContinueStatement BreakStatement ReturnStatement ThrowStatement DebuggerStatement
  1. 新しい空の List を返す。
Block : { }
  1. 新しい空の List を返す。
StatementList : StatementList StatementListItem
  1. names1 を StatementList の VarDeclaredNames とする。
  2. names2 を StatementListItem の VarDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
StatementListItem : Declaration
  1. 新しい空の List を返す。
VariableStatement : var VariableDeclarationList ;
  1. VariableDeclarationList の BoundNames を返す。
IfStatement : if ( Expression ) Statement else Statement
  1. names1 を最初の Statement の VarDeclaredNames とする。
  2. names2 を2番目の Statement の VarDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
IfStatement : if ( Expression ) Statement
  1. Statement の VarDeclaredNames を返す。
DoWhileStatement : do Statement while ( Expression ) ;
  1. Statement の VarDeclaredNames を返す。
WhileStatement : while ( Expression ) Statement
  1. Statement の VarDeclaredNames を返す。
ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement
  1. Statement の VarDeclaredNames を返す。
ForStatement : for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement
  1. names1 を VariableDeclarationList の BoundNames とする。
  2. names2 を Statement の VarDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
ForStatement : for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
  1. Statement の VarDeclaredNames を返す。
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. Statement の VarDeclaredNames を返す。
ForInOfStatement : for ( var ForBinding in Expression ) Statement for ( var ForBinding of AssignmentExpression ) Statement for await ( var ForBinding of AssignmentExpression ) Statement
  1. names1 を ForBinding の BoundNames とする。
  2. names2 を Statement の VarDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
注

この節は、附属書 B.3.5 によって拡張されます。

WithStatement : with ( Expression ) Statement
  1. Statement の VarDeclaredNames を返す。
SwitchStatement : switch ( Expression ) CaseBlock
  1. CaseBlock の VarDeclaredNames を返す。
CaseBlock : { }
  1. 新しい空の List を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在する場合、names1 を最初の CaseClauses の VarDeclaredNames とする。
  2. そうでない場合、names1 を新しい空の List とする。
  3. names2 を DefaultClause の VarDeclaredNames とする。
  4. 2番目の CaseClauses が存在する場合、names3 を2番目の CaseClauses の VarDeclaredNames とする。
  5. そうでない場合、names3 を新しい空の List とする。
  6. names1、names2、および names3 のリスト連結を返す。
CaseClauses : CaseClauses CaseClause
  1. names1 を CaseClauses の VarDeclaredNames とする。
  2. names2 を CaseClause の VarDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在する場合、StatementList の VarDeclaredNames を返す。
  2. 新しい空の List を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在する場合、StatementList の VarDeclaredNames を返す。
  2. 新しい空の List を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItem の VarDeclaredNames を返す。
LabelledItem : FunctionDeclaration
  1. 新しい空の List を返す。
TryStatement : try Block Catch
  1. names1 を Block の VarDeclaredNames とする。
  2. names2 を Catch の VarDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
TryStatement : try Block Finally
  1. names1 を Block の VarDeclaredNames とする。
  2. names2 を Finally の VarDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
TryStatement : try Block Catch Finally
  1. names1 を Block の VarDeclaredNames とする。
  2. names2 を Catch の VarDeclaredNames とする。
  3. names3 を Finally の VarDeclaredNames とする。
  4. names1、names2、および names3 のリスト連結を返す。
Catch : catch ( CatchParameter ) Block
  1. Block の VarDeclaredNames を返す。
FunctionStatementList : [empty]
  1. 新しい空の List を返す。
FunctionStatementList : StatementList
  1. StatementList の TopLevelVarDeclaredNames を返す。
ClassStaticBlockStatementList : [empty]
  1. 新しい空の List を返す。
ClassStaticBlockStatementList : StatementList
  1. StatementList の TopLevelVarDeclaredNames を返す。
ConciseBody : ExpressionBody
  1. 新しい空の List を返す。
AsyncConciseBody : ExpressionBody
  1. 新しい空の List を返す。
Script : [empty]
  1. 新しい空の List を返す。
ScriptBody : StatementList
  1. StatementList の TopLevelVarDeclaredNames を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. names1 を ModuleItemList の VarDeclaredNames とする。
  2. names2 を ModuleItem の VarDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
ModuleItem : ImportDeclaration
  1. 新しい空の List を返す。
ModuleItem : ExportDeclaration
  1. ExportDeclaration が export VariableStatement である場合、ExportDeclaration の BoundNames を返す。
  2. 新しい空の List を返す。

8.2.9 Static Semantics: VarScopedDeclarations

構文指向操作 VarScopedDeclarations。引数なし。戻り値:リスト (要素:構文解析ノード)。 次の生成規則ごとに定義される。

Statement : EmptyStatement ExpressionStatement ContinueStatement BreakStatement ReturnStatement ThrowStatement DebuggerStatement
  1. 新しい空の List を返す。
Block : { }
  1. 新しい空の List を返す。
StatementList : StatementList StatementListItem
  1. decls1 を StatementList の VarScopedDeclarations とする。
  2. decls2 を StatementListItem の VarScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
StatementListItem : Declaration
  1. 新しい空の List を返す。
VariableDeclarationList : VariableDeclaration
  1. « VariableDeclaration » を返す。
VariableDeclarationList : VariableDeclarationList , VariableDeclaration
  1. decls1 を VariableDeclarationList の VarScopedDeclarations とする。
  2. decls1 と « VariableDeclaration » のリスト連結を返す。
IfStatement : if ( Expression ) Statement else Statement
  1. decls1 を最初の Statement の VarScopedDeclarations とする。
  2. decls2 を2番目の Statement の VarScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
IfStatement : if ( Expression ) Statement
  1. Statement の VarScopedDeclarations を返す。
DoWhileStatement : do Statement while ( Expression ) ;
  1. Statement の VarScopedDeclarations を返す。
WhileStatement : while ( Expression ) Statement
  1. Statement の VarScopedDeclarations を返す。
ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement
  1. Statement の VarScopedDeclarations を返す。
ForStatement : for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement
  1. decls1 を VariableDeclarationList の VarScopedDeclarations とする。
  2. decls2 を Statement の VarScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
ForStatement : for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
  1. Statement の VarScopedDeclarations を返す。
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. Statement の VarScopedDeclarations を返す。
ForInOfStatement : for ( var ForBinding in Expression ) Statement for ( var ForBinding of AssignmentExpression ) Statement for await ( var ForBinding of AssignmentExpression ) Statement
  1. decls1 を « ForBinding » とする。
  2. decls2 を Statement の VarScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
注

この節は、附属書 B.3.5 によって拡張されます。

WithStatement : with ( Expression ) Statement
  1. Statement の VarScopedDeclarations を返す。
SwitchStatement : switch ( Expression ) CaseBlock
  1. CaseBlock の VarScopedDeclarations を返す。
CaseBlock : { }
  1. 新しい空の List を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在する場合、decls1 を最初の CaseClauses の VarScopedDeclarations とする。
  2. そうでない場合、decls1 を新しい空の List とする。
  3. decls2 を DefaultClause の VarScopedDeclarations とする。
  4. 2番目の CaseClauses が存在する場合、decls3 を2番目の CaseClauses の VarScopedDeclarations とする。
  5. そうでない場合、decls3 を新しい空の List とする。
  6. decls1、decls2、および decls3 のリスト連結を返す。
CaseClauses : CaseClauses CaseClause
  1. decls1 を CaseClauses の VarScopedDeclarations とする。
  2. decls2 を CaseClause の VarScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在する場合、StatementList の VarScopedDeclarations を返す。
  2. 新しい空の List を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在する場合、StatementList の VarScopedDeclarations を返す。
  2. 新しい空の List を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItem の VarScopedDeclarations を返す。
LabelledItem : FunctionDeclaration
  1. 新しい空の List を返す。
TryStatement : try Block Catch
  1. decls1 を Block の VarScopedDeclarations とする。
  2. decls2 を Catch の VarScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
TryStatement : try Block Finally
  1. decls1 を Block の VarScopedDeclarations とする。
  2. decls2 を Finally の VarScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
TryStatement : try Block Catch Finally
  1. decls1 を Block の VarScopedDeclarations とする。
  2. decls2 を Catch の VarScopedDeclarations とする。
  3. decls3 を Finally の VarScopedDeclarations とする。
  4. decls1、decls2、および decls3 のリスト連結を返す。
Catch : catch ( CatchParameter ) Block
  1. Block の VarScopedDeclarations を返す。
FunctionStatementList : [empty]
  1. 新しい空の List を返す。
FunctionStatementList : StatementList
  1. StatementList の TopLevelVarScopedDeclarations を返す。
ClassStaticBlockStatementList : [empty]
  1. 新しい空の List を返す。
ClassStaticBlockStatementList : StatementList
  1. StatementList の TopLevelVarScopedDeclarations を返す。
ConciseBody : ExpressionBody
  1. 新しい空の List を返す。
AsyncConciseBody : ExpressionBody
  1. 新しい空の List を返す。
Script : [empty]
  1. 新しい空の List を返す。
ScriptBody : StatementList
  1. StatementList の TopLevelVarScopedDeclarations を返す。
Module : [empty]
  1. 新しい空の List を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. decls1 を ModuleItemList の VarScopedDeclarations とする。
  2. decls2 を ModuleItem の VarScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
ModuleItem : ImportDeclaration
  1. 新しい空の List を返す。
ModuleItem : ExportDeclaration
  1. ExportDeclaration が export VariableStatement である場合、VariableStatement の VarScopedDeclarations を返す。
  2. 新しい空の List を返す。

8.2.10 Static Semantics: TopLevelLexicallyDeclaredNames

構文指向操作 TopLevelLexicallyDeclaredNames。引数なし。戻り値:リスト (要素:String)。 次の生成規則ごとに定義される。

StatementList : StatementList StatementListItem
  1. names1 を StatementList の TopLevelLexicallyDeclaredNames とする。
  2. names2 を StatementListItem の TopLevelLexicallyDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
StatementListItem : Statement
  1. 新しい空の List を返す。
StatementListItem : Declaration
  1. Declaration が Declaration : HoistableDeclaration である場合、
    1. 新しい空の List を返す。
  2. Declaration の BoundNames を返す。
注

関数またはスクリプトのトップレベルでは、関数宣言はレキシカル宣言ではなく var 宣言のように扱われます。

8.2.11 Static Semantics: TopLevelLexicallyScopedDeclarations

構文指向操作 TopLevelLexicallyScopedDeclarations。引数なし。戻り値:リスト (要素:構文解析ノード)。 次の生成規則ごとに定義される。

StatementList : StatementList StatementListItem
  1. decls1 を StatementList の TopLevelLexicallyScopedDeclarations とする。
  2. decls2 を StatementListItem の TopLevelLexicallyScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
StatementListItem : Statement
  1. 新しい空の List を返す。
StatementListItem : Declaration
  1. Declaration が Declaration : HoistableDeclaration である場合、
    1. 新しい空の List を返す。
  2. « Declaration » を返す。

8.2.12 Static Semantics: TopLevelVarDeclaredNames

構文指向操作 TopLevelVarDeclaredNames。引数なし。戻り値:リスト (要素:String)。 次の生成規則ごとに定義される。

StatementList : StatementList StatementListItem
  1. names1 を StatementList の TopLevelVarDeclaredNames とする。
  2. names2 を StatementListItem の TopLevelVarDeclaredNames とする。
  3. names1 と names2 のリスト連結を返す。
StatementListItem : Declaration
  1. Declaration が Declaration : HoistableDeclaration である場合、
    1. HoistableDeclaration の BoundNames を返す。
  2. 新しい空の List を返す。
StatementListItem : Statement
  1. Statement が Statement : LabelledStatement である場合、Statement の TopLevelVarDeclaredNames を返す。
  2. Statement の VarDeclaredNames を返す。
注

関数またはスクリプトのトップレベルでは、内部の関数宣言は var 宣言のように扱われます。

LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItem の TopLevelVarDeclaredNames を返す。
LabelledItem : Statement
  1. Statement が Statement : LabelledStatement である場合、Statement の TopLevelVarDeclaredNames を返す。
  2. Statement の VarDeclaredNames を返す。
LabelledItem : FunctionDeclaration
  1. FunctionDeclaration の BoundNames を返す。

8.2.13 Static Semantics: TopLevelVarScopedDeclarations

構文指向操作 TopLevelVarScopedDeclarations。引数なし。戻り値:リスト (要素:構文解析ノード)。 次の生成規則ごとに定義される。

StatementList : StatementList StatementListItem
  1. decls1 を StatementList の TopLevelVarScopedDeclarations とする。
  2. decls2 を StatementListItem の TopLevelVarScopedDeclarations とする。
  3. decls1 と decls2 のリスト連結を返す。
StatementListItem : Statement
  1. Statement が Statement : LabelledStatement である場合、Statement の TopLevelVarScopedDeclarations を返す。
  2. Statement の VarScopedDeclarations を返す。
StatementListItem : Declaration
  1. Declaration が Declaration : HoistableDeclaration である場合、
    1. decl を HoistableDeclaration の DeclarationPart とする。
    2. « decl » を返す。
  2. 新しい空の List を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. LabelledItem の TopLevelVarScopedDeclarations を返す。
LabelledItem : Statement
  1. Statement が Statement : LabelledStatement である場合、Statement の TopLevelVarScopedDeclarations を返す。
  2. Statement の VarScopedDeclarations を返す。
LabelledItem : FunctionDeclaration
  1. « FunctionDeclaration » を返す。

8.3 ラベル

8.3.1 Static Semantics: ContainsDuplicateLabels

構文指向操作 ContainsDuplicateLabels。引数 labelSet (リスト (要素:String))。戻り値:Boolean。 次の生成規則ごとに定義される。

Statement : VariableStatement EmptyStatement ExpressionStatement ContinueStatement BreakStatement ReturnStatement ThrowStatement DebuggerStatement Block : { } StatementListItem : Declaration
  1. false を返す。
StatementList : StatementList StatementListItem
  1. hasDuplicates を、引数 labelSet を指定した StatementList の ContainsDuplicateLabels とする。
  2. hasDuplicates が true である場合、true を返す。
  3. 引数 labelSet を指定した StatementListItem の ContainsDuplicateLabels を返す。
IfStatement : if ( Expression ) Statement else Statement
  1. hasDuplicate を、引数 labelSet を指定した最初の Statement の ContainsDuplicateLabels とする。
  2. hasDuplicate が true である場合、true を返す。
  3. 引数 labelSet を指定した2番目の Statement の ContainsDuplicateLabels を返す。
IfStatement : if ( Expression ) Statement
  1. 引数 labelSet を指定した Statement の ContainsDuplicateLabels を返す。
DoWhileStatement : do Statement while ( Expression ) ;
  1. 引数 labelSet を指定した Statement の ContainsDuplicateLabels を返す。
WhileStatement : while ( Expression ) Statement
  1. 引数 labelSet を指定した Statement の ContainsDuplicateLabels を返す。
ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
  1. 引数 labelSet を指定した Statement の ContainsDuplicateLabels を返す。
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 を指定した Statement の ContainsDuplicateLabels を返す。
注

この節は、附属書 B.3.5 によって拡張されます。

WithStatement : with ( Expression ) Statement
  1. 引数 labelSet を指定した Statement の ContainsDuplicateLabels を返す。
SwitchStatement : switch ( Expression ) CaseBlock
  1. 引数 labelSet を指定した CaseBlock の ContainsDuplicateLabels を返す。
CaseBlock : { }
  1. false を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在する場合、
    1. 引数 labelSet を指定した最初の CaseClauses の ContainsDuplicateLabels が true である場合、true を返す。
  2. 引数 labelSet を指定した DefaultClause の ContainsDuplicateLabels が true である場合、true を返す。
  3. 2番目の CaseClauses が存在しない場合、false を返す。
  4. 引数 labelSet を指定した2番目の CaseClauses の ContainsDuplicateLabels を返す。
CaseClauses : CaseClauses CaseClause
  1. hasDuplicates を、引数 labelSet を指定した CaseClauses の ContainsDuplicateLabels とする。
  2. hasDuplicates が true である場合、true を返す。
  3. 引数 labelSet を指定した CaseClause の ContainsDuplicateLabels を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在する場合、引数 labelSet を指定した StatementList の ContainsDuplicateLabels を返す。
  2. false を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在する場合、引数 labelSet を指定した StatementList の ContainsDuplicateLabels を返す。
  2. false を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. label を LabelIdentifier の StringValue とする。
  2. labelSet が label を含む場合、true を返す。
  3. newLabelSet を labelSet と « label » のリスト連結とする。
  4. 引数 newLabelSet を指定した LabelledItem の ContainsDuplicateLabels を返す。
LabelledItem : FunctionDeclaration
  1. false を返す。
TryStatement : try Block Catch
  1. hasDuplicates を、引数 labelSet を指定した Block の ContainsDuplicateLabels とする。
  2. hasDuplicates が true である場合、true を返す。
  3. 引数 labelSet を指定した Catch の ContainsDuplicateLabels を返す。
TryStatement : try Block Finally
  1. hasDuplicates を、引数 labelSet を指定した Block の ContainsDuplicateLabels とする。
  2. hasDuplicates が true である場合、true を返す。
  3. 引数 labelSet を指定した Finally の ContainsDuplicateLabels を返す。
TryStatement : try Block Catch Finally
  1. 引数 labelSet を指定した Block の ContainsDuplicateLabels が true である場合、true を返す。
  2. 引数 labelSet を指定した Catch の ContainsDuplicateLabels が true である場合、true を返す。
  3. 引数 labelSet を指定した Finally の ContainsDuplicateLabels を返す。
Catch : catch ( CatchParameter ) Block
  1. 引数 labelSet を指定した Block の ContainsDuplicateLabels を返す。
FunctionStatementList : [empty]
  1. false を返す。
ClassStaticBlockStatementList : [empty]
  1. false を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. hasDuplicates を、引数 labelSet を指定した ModuleItemList の ContainsDuplicateLabels とする。
  2. hasDuplicates が true である場合、true を返す。
  3. 引数 labelSet を指定した ModuleItem の ContainsDuplicateLabels を返す。
ModuleItem : ImportDeclaration ExportDeclaration
  1. false を返す。

8.3.2 Static Semantics: ContainsUndefinedBreakTarget

構文指向操作 ContainsUndefinedBreakTarget。引数 labelSet (リスト (要素:String))。戻り値:Boolean。 次の生成規則ごとに定義される。

Statement : VariableStatement EmptyStatement ExpressionStatement ContinueStatement ReturnStatement ThrowStatement DebuggerStatement Block : { } StatementListItem : Declaration
  1. false を返す。
StatementList : StatementList StatementListItem
  1. hasUndefinedLabels を、引数 labelSet を指定した StatementList の ContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 labelSet を指定した StatementListItem の ContainsUndefinedBreakTarget を返す。
IfStatement : if ( Expression ) Statement else Statement
  1. hasUndefinedLabels を、引数 labelSet を指定した最初の Statement の ContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 labelSet を指定した2番目の Statement の ContainsUndefinedBreakTarget を返す。
IfStatement : if ( Expression ) Statement
  1. 引数 labelSet を指定した Statement の ContainsUndefinedBreakTarget を返す。
DoWhileStatement : do Statement while ( Expression ) ;
  1. 引数 labelSet を指定した Statement の ContainsUndefinedBreakTarget を返す。
WhileStatement : while ( Expression ) Statement
  1. 引数 labelSet を指定した Statement の ContainsUndefinedBreakTarget を返す。
ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
  1. 引数 labelSet を指定した Statement の ContainsUndefinedBreakTarget を返す。
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 を指定した Statement の ContainsUndefinedBreakTarget を返す。
注

この節は、附属書 B.3.5 によって拡張されます。

BreakStatement : break ;
  1. false を返す。
BreakStatement : break LabelIdentifier ;
  1. labelSet が LabelIdentifier の StringValue を含む場合、false を返す。
  2. true を返す。
WithStatement : with ( Expression ) Statement
  1. 引数 labelSet を指定した Statement の ContainsUndefinedBreakTarget を返す。
SwitchStatement : switch ( Expression ) CaseBlock
  1. 引数 labelSet を指定した CaseBlock の ContainsUndefinedBreakTarget を返す。
CaseBlock : { }
  1. false を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在する場合、
    1. 引数 labelSet を指定した最初の CaseClauses の ContainsUndefinedBreakTarget が true である場合、true を返す。
  2. 引数 labelSet を指定した DefaultClause の ContainsUndefinedBreakTarget が true である場合、true を返す。
  3. 2番目の CaseClauses が存在しない場合、false を返す。
  4. 引数 labelSet を指定した2番目の CaseClauses の ContainsUndefinedBreakTarget を返す。
CaseClauses : CaseClauses CaseClause
  1. hasUndefinedLabels を、引数 labelSet を指定した CaseClauses の ContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 labelSet を指定した CaseClause の ContainsUndefinedBreakTarget を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在する場合、引数 labelSet を指定した StatementList の ContainsUndefinedBreakTarget を返す。
  2. false を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在する場合、引数 labelSet を指定した StatementList の ContainsUndefinedBreakTarget を返す。
  2. false を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. label を LabelIdentifier の StringValue とする。
  2. newLabelSet を labelSet と « label » のリスト連結とする。
  3. 引数 newLabelSet を指定した LabelledItem の ContainsUndefinedBreakTarget を返す。
LabelledItem : FunctionDeclaration
  1. false を返す。
TryStatement : try Block Catch
  1. hasUndefinedLabels を、引数 labelSet を指定した Block の ContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 labelSet を指定した Catch の ContainsUndefinedBreakTarget を返す。
TryStatement : try Block Finally
  1. hasUndefinedLabels を、引数 labelSet を指定した Block の ContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 labelSet を指定した Finally の ContainsUndefinedBreakTarget を返す。
TryStatement : try Block Catch Finally
  1. 引数 labelSet を指定した Block の ContainsUndefinedBreakTarget が true である場合、true を返す。
  2. 引数 labelSet を指定した Catch の ContainsUndefinedBreakTarget が true である場合、true を返す。
  3. 引数 labelSet を指定した Finally の ContainsUndefinedBreakTarget を返す。
Catch : catch ( CatchParameter ) Block
  1. 引数 labelSet を指定した Block の ContainsUndefinedBreakTarget を返す。
FunctionStatementList : [empty]
  1. false を返す。
ClassStaticBlockStatementList : [empty]
  1. false を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. hasUndefinedLabels を、引数 labelSet を指定した ModuleItemList の ContainsUndefinedBreakTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 labelSet を指定した ModuleItem の ContainsUndefinedBreakTarget を返す。
ModuleItem : ImportDeclaration ExportDeclaration
  1. false を返す。

8.3.3 Static Semantics: ContainsUndefinedContinueTarget

構文指向操作 ContainsUndefinedContinueTarget。引数 iterationSet (リスト (要素:String)) および labelSet (リスト (要素:String))。戻り値:Boolean。 次の生成規則ごとに定義される。

Statement : VariableStatement EmptyStatement ExpressionStatement BreakStatement ReturnStatement ThrowStatement DebuggerStatement Block : { } StatementListItem : Declaration
  1. false を返す。
Statement : BlockStatement
  1. 引数 iterationSet および « » を指定した BlockStatement の ContainsUndefinedContinueTarget を返す。
BreakableStatement : IterationStatement
  1. newIterationSet を iterationSet と labelSet のリスト連結とする。
  2. 引数 newIterationSet および « » を指定した IterationStatement の ContainsUndefinedContinueTarget を返す。
StatementList : StatementList StatementListItem
  1. hasUndefinedLabels を、引数 iterationSet および « » を指定した StatementList の ContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 iterationSet および « » を指定した StatementListItem の ContainsUndefinedContinueTarget を返す。
IfStatement : if ( Expression ) Statement else Statement
  1. hasUndefinedLabels を、引数 iterationSet および « » を指定した最初の Statement の ContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 iterationSet および « » を指定した2番目の Statement の ContainsUndefinedContinueTarget を返す。
IfStatement : if ( Expression ) Statement
  1. 引数 iterationSet および « » を指定した Statement の ContainsUndefinedContinueTarget を返す。
DoWhileStatement : do Statement while ( Expression ) ;
  1. 引数 iterationSet および « » を指定した Statement の ContainsUndefinedContinueTarget を返す。
WhileStatement : while ( Expression ) Statement
  1. 引数 iterationSet および « » を指定した Statement の ContainsUndefinedContinueTarget を返す。
ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
  1. 引数 iterationSet および « » を指定した Statement の ContainsUndefinedContinueTarget を返す。
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 および « » を指定した Statement の ContainsUndefinedContinueTarget を返す。
注

この節は、附属書 B.3.5 によって拡張されます。

ContinueStatement : continue ;
  1. false を返す。
ContinueStatement : continue LabelIdentifier ;
  1. iterationSet が LabelIdentifier の StringValue を含む場合、false を返す。
  2. true を返す。
WithStatement : with ( Expression ) Statement
  1. 引数 iterationSet および « » を指定した Statement の ContainsUndefinedContinueTarget を返す。
SwitchStatement : switch ( Expression ) CaseBlock
  1. 引数 iterationSet および « » を指定した CaseBlock の ContainsUndefinedContinueTarget を返す。
CaseBlock : { }
  1. false を返す。
CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }
  1. 最初の CaseClauses が存在する場合、
    1. 引数 iterationSet および « » を指定した最初の CaseClauses の ContainsUndefinedContinueTarget が true である場合、true を返す。
  2. 引数 iterationSet および « » を指定した DefaultClause の ContainsUndefinedContinueTarget が true である場合、true を返す。
  3. 2番目の CaseClauses が存在しない場合、false を返す。
  4. 引数 iterationSet および « » を指定した2番目の CaseClauses の ContainsUndefinedContinueTarget を返す。
CaseClauses : CaseClauses CaseClause
  1. hasUndefinedLabels を、引数 iterationSet および « » を指定した CaseClauses の ContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 iterationSet および « » を指定した CaseClause の ContainsUndefinedContinueTarget を返す。
CaseClause : case Expression : StatementListopt
  1. StatementList が存在する場合、引数 iterationSet および « » を指定した StatementList の ContainsUndefinedContinueTarget を返す。
  2. false を返す。
DefaultClause : default : StatementListopt
  1. StatementList が存在する場合、引数 iterationSet および « » を指定した StatementList の ContainsUndefinedContinueTarget を返す。
  2. false を返す。
LabelledStatement : LabelIdentifier : LabelledItem
  1. label を LabelIdentifier の StringValue とする。
  2. newLabelSet を labelSet と « label » のリスト連結とする。
  3. 引数 iterationSet および newLabelSet を指定した LabelledItem の ContainsUndefinedContinueTarget を返す。
LabelledItem : FunctionDeclaration
  1. false を返す。
TryStatement : try Block Catch
  1. hasUndefinedLabels を、引数 iterationSet および « » を指定した Block の ContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 iterationSet および « » を指定した Catch の ContainsUndefinedContinueTarget を返す。
TryStatement : try Block Finally
  1. hasUndefinedLabels を、引数 iterationSet および « » を指定した Block の ContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 iterationSet および « » を指定した Finally の ContainsUndefinedContinueTarget を返す。
TryStatement : try Block Catch Finally
  1. 引数 iterationSet および « » を指定した Block の ContainsUndefinedContinueTarget が true である場合、true を返す。
  2. 引数 iterationSet および « » を指定した Catch の ContainsUndefinedContinueTarget が true である場合、true を返す。
  3. 引数 iterationSet および « » を指定した Finally の ContainsUndefinedContinueTarget を返す。
Catch : catch ( CatchParameter ) Block
  1. 引数 iterationSet および « » を指定した Block の ContainsUndefinedContinueTarget を返す。
FunctionStatementList : [empty]
  1. false を返す。
ClassStaticBlockStatementList : [empty]
  1. false を返す。
ModuleItemList : ModuleItemList ModuleItem
  1. hasUndefinedLabels を、引数 iterationSet および « » を指定した ModuleItemList の ContainsUndefinedContinueTarget とする。
  2. hasUndefinedLabels が true である場合、true を返す。
  3. 引数 iterationSet および « » を指定した ModuleItem の ContainsUndefinedContinueTarget を返す。
ModuleItem : ImportDeclaration ExportDeclaration
  1. false を返す。

8.4 関数名の推論

8.4.1 Static Semantics: HasName

構文指向操作 HasName。引数なし。戻り値:Boolean。 次の生成規則ごとに定義される。

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList
  1. expr を CoverParenthesizedExpressionAndArrowParameterList によって被覆される ParenthesizedExpression とする。
  2. expr の IsFunctionDefinition が false である場合、false を返す。
  3. expr の HasName を返す。
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

構文指向操作 IsFunctionDefinition。引数なし。戻り値:Boolean。 次の生成規則ごとに定義される。

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList
  1. expr を CoverParenthesizedExpressionAndArrowParameterList によって被覆される ParenthesizedExpression とする。
  2. expr の IsFunctionDefinition を返す。
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 CoverAwaitExpressionAndAwaitUsingDeclarationHead 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 )

抽象操作 IsAnonymousFunctionDefinition。引数 expr ((an AssignmentExpression Parse Node、an Initializer Parse Node または an Expression Parse Node))。戻り値:Boolean。 引数が、名前を束縛しない関数定義であるかどうかを判定します。 呼び出されると、次の手順を実行する。

  1. expr の IsFunctionDefinition が false である場合、false を返す。
  2. hasName を expr の HasName とする。
  3. hasName が true である場合、false を返す。
  4. true を返す。

8.4.4 Static Semantics: IsIdentifierRef

構文指向操作 IsIdentifierRef。引数なし。戻り値:Boolean。 次の生成規則ごとに定義される。

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

構文指向操作 NamedEvaluation。引数 name ((プロパティキー または プライベート名))。戻り値:(正常完了 (値:関数オブジェクト) または 中途完了)。 次の生成規則ごとに定義される。

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList
  1. expr を CoverParenthesizedExpressionAndArrowParameterList によって被覆される ParenthesizedExpression とする。
  2. 引数 name を指定した expr の ? NamedEvaluation を返す。
ParenthesizedExpression : ( Expression )
  1. 表明: IsAnonymousFunctionDefinition(Expression) は true である。
  2. 引数 name を指定した Expression の ? NamedEvaluation を返す。
FunctionExpression : function ( FormalParameters ) { FunctionBody }
  1. 引数 name を指定した FunctionExpression の InstantiateOrdinaryFunctionExpression を返す。
GeneratorExpression : function * ( FormalParameters ) { GeneratorBody }
  1. 引数 name を指定した GeneratorExpression の InstantiateGeneratorFunctionExpression を返す。
AsyncGeneratorExpression : async function * ( FormalParameters ) { AsyncGeneratorBody }
  1. 引数 name を指定した AsyncGeneratorExpression の InstantiateAsyncGeneratorFunctionExpression を返す。
AsyncFunctionExpression : async function ( FormalParameters ) { AsyncFunctionBody }
  1. 引数 name を指定した AsyncFunctionExpression の InstantiateAsyncFunctionExpression を返す。
ArrowFunction : ArrowParameters => ConciseBody
  1. 引数 name を指定した ArrowFunction の InstantiateArrowFunctionExpression を返す。
AsyncArrowFunction : async AsyncArrowBindingIdentifier => AsyncConciseBody CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody
  1. 引数 name を指定した AsyncArrowFunction の InstantiateAsyncArrowFunctionExpression を返す。
ClassExpression : class ClassTail
  1. sourceText を ClassExpression に一致するソーステキストとする。
  2. 引数 undefined、name、および sourceText を指定した ClassTail の ? ClassDefinitionEvaluation を返す。

8.5 Contains

8.5.1 Static Semantics: Contains

構文指向操作 Contains。引数 symbol (文法記号)。戻り値:Boolean。

以下に列挙されていない、この仕様内のすべての文法生成規則の選択肢には、Contains の次の既定の定義が暗黙にあります。

  1. この Parse Node の各子ノード child について、次を行う。
    1. child が symbol のインスタンスである場合、true を返す。
    2. child が非終端記号のインスタンスである場合、
      1. contained を child Contains symbol の結果とする。
      2. contained が true である場合、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 を返す。
注 1

下位構造に依存する静的意味論規則は、一般に関数定義の内部を調べません。

ClassTail : ClassHeritageopt { ClassBody }
  1. symbol が ClassBody である場合、true を返す。
  2. symbol が ClassHeritage である場合、
    1. ClassHeritage が存在する場合、true を返す。
    2. false を返す。
  3. ClassHeritage が存在する場合、
    1. ClassHeritage Contains symbol が true である場合、true を返す。
  4. 引数 symbol を指定した ClassBody の ComputedPropertyContains の結果を返す。
注 2

下位構造に依存する静的意味論規則は、一般に PropertyName を除いてクラス本体の内部を調べません。

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

下位構造に依存する静的意味論規則は、一般に static 初期化ブロックの内部を調べません。

ArrowFunction : ArrowParameters => ConciseBody
  1. symbol が NewTarget、SuperProperty、SuperCall、super、または this のいずれでもない場合、false を返す。
  2. ArrowParameters Contains symbol が true である場合、true を返す。
  3. ConciseBody Contains symbol を返す。
ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList
  1. formals を CoverParenthesizedExpressionAndArrowParameterList によって被覆される ArrowFormalParameters とする。
  2. formals Contains symbol を返す。
AsyncArrowFunction : async AsyncArrowBindingIdentifier => AsyncConciseBody
  1. symbol が NewTarget、SuperProperty、SuperCall、super、または this のいずれでもない場合、false を返す。
  2. AsyncConciseBody Contains symbol を返す。
AsyncArrowFunction : CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody
  1. symbol が NewTarget、SuperProperty、SuperCall、super、または this のいずれでもない場合、false を返す。
  2. head を CoverCallExpressionAndAsyncArrowHead によって被覆される AsyncArrowHead とする。
  3. head Contains symbol が true である場合、true を返す。
  4. AsyncConciseBody Contains symbol を返す。
注 4

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

PropertyDefinition : MethodDefinition
  1. symbol が MethodDefinition である場合、true を返す。
  2. 引数 symbol を指定した MethodDefinition の ComputedPropertyContains の結果を返す。
LiteralPropertyName : IdentifierName
  1. false を返す。
MemberExpression : MemberExpression . IdentifierName
  1. MemberExpression Contains symbol が true である場合、true を返す。
  2. false を返す。
SuperProperty : super . IdentifierName
  1. symbol が ReservedWord super である場合、true を返す。
  2. false を返す。
CallExpression : CallExpression . IdentifierName
  1. CallExpression Contains symbol が true である場合、true を返す。
  2. false を返す。
OptionalChain : ?. IdentifierName
  1. false を返す。
OptionalChain : OptionalChain . IdentifierName
  1. OptionalChain Contains symbol が true である場合、true を返す。
  2. false を返す。

8.5.2 Static Semantics: ComputedPropertyContains

構文指向操作 ComputedPropertyContains。引数 symbol (文法記号)。戻り値:Boolean。 次の生成規則ごとに定義される。

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 を指定した ClassElementName の ComputedPropertyContains の結果を返す。
GeneratorMethod : * ClassElementName ( UniqueFormalParameters ) { GeneratorBody }
  1. 引数 symbol を指定した ClassElementName の ComputedPropertyContains の結果を返す。
AsyncGeneratorMethod : async * ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }
  1. 引数 symbol を指定した ClassElementName の ComputedPropertyContains の結果を返す。
ClassElementList : ClassElementList ClassElement
  1. inList を、引数 symbol を指定した ClassElementList の ComputedPropertyContains とする。
  2. inList が true である場合、true を返す。
  3. 引数 symbol を指定した ClassElement の ComputedPropertyContains の結果を返す。
ClassElement : ClassStaticBlock
  1. false を返す。
ClassElement : ;
  1. false を返す。
AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }
  1. 引数 symbol を指定した ClassElementName の ComputedPropertyContains の結果を返す。
FieldDefinition : ClassElementName Initializeropt
  1. 引数 symbol を指定した ClassElementName の ComputedPropertyContains の結果を返す。

8.6 その他

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

8.6.1 Runtime Semantics: InstantiateFunctionObject

構文指向操作 InstantiateFunctionObject。引数 envRecord (Environmentレコード) および privateEnv ((PrivateEnvironmentレコード または null))。戻り値:ECMAScript 関数オブジェクト。 次の生成規則ごとに定義される。

FunctionDeclaration : function BindingIdentifier ( FormalParameters ) { FunctionBody } function ( FormalParameters ) { FunctionBody }
  1. 引数 envRecord および privateEnv を指定した FunctionDeclaration の InstantiateOrdinaryFunctionObject を返す。
GeneratorDeclaration : function * BindingIdentifier ( FormalParameters ) { GeneratorBody } function * ( FormalParameters ) { GeneratorBody }
  1. 引数 envRecord および privateEnv を指定した GeneratorDeclaration の InstantiateGeneratorFunctionObject を返す。
AsyncGeneratorDeclaration : async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody } async function * ( FormalParameters ) { AsyncGeneratorBody }
  1. 引数 envRecord および privateEnv を指定した AsyncGeneratorDeclaration の InstantiateAsyncGeneratorFunctionObject を返す。
AsyncFunctionDeclaration : async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody } async function ( FormalParameters ) { AsyncFunctionBody }
  1. 引数 envRecord および privateEnv を指定した AsyncFunctionDeclaration の InstantiateAsyncFunctionObject を返す。

8.6.2 Runtime Semantics: BindingInitialization

構文指向操作 BindingInitialization。引数 value (ECMAScript 言語値) および envRecord ((Environmentレコード または undefined))。戻り値:(正常完了 (値:unused) または 中途完了)。

注

初期化値を代入するために PutValue 操作を使用するべきことを示すため、envRecord に undefined が渡されます。これは var 文、および一部の非 strict 関数の仮引数リストの場合です(10.2.11 を参照)。これらの場合、レキシカル束縛は、その初期化子を評価する前に巻き上げられ、事前に初期化されます。

次の生成規則ごとに定義される。

BindingIdentifier : Identifier
  1. name を Identifier の StringValue とする。
  2. ? InitializeBoundName(name, value, envRecord) を返す。
BindingIdentifier : yield
  1. ? InitializeBoundName("yield", value, envRecord) を返す。
BindingIdentifier : await
  1. ? InitializeBoundName("await", value, envRecord) を返す。
BindingPattern : ObjectBindingPattern
  1. ? RequireObjectCoercible(value) を実行する。
  2. 引数 value および envRecord を指定した ObjectBindingPattern の ? BindingInitialization を返す。
BindingPattern : ArrayBindingPattern
  1. iteratorRecord を ? GetIterator(value, sync) とする。
  2. result を、引数 iteratorRecord および envRecord を指定した ArrayBindingPattern の Completion(IteratorBindingInitialization) とする。
  3. iteratorRecord.[[Done]] が false である場合、? IteratorClose(iteratorRecord, result) を返す。
  4. ? result を返す。
ObjectBindingPattern : { }
  1. unused を返す。
ObjectBindingPattern : { BindingPropertyList ,opt }
  1. 引数 value および envRecord を指定した BindingPropertyList の ? PropertyBindingInitialization を実行する。
  2. unused を返す。
ObjectBindingPattern : { BindingRestProperty }
  1. excludedNames を新しい空の List とする。
  2. 引数 value、envRecord、および excludedNames を指定した BindingRestProperty の ? RestBindingInitialization を返す。
ObjectBindingPattern : { BindingPropertyList , BindingRestProperty }
  1. excludedNames を、引数 value および envRecord を指定した BindingPropertyList の ? PropertyBindingInitialization とする。
  2. 引数 value、envRecord、および excludedNames を指定した BindingRestProperty の ? RestBindingInitialization を返す。

8.6.2.1 InitializeBoundName ( name, value, envRecord )

抽象操作 InitializeBoundName。引数 name (String)、value (ECMAScript 言語値) および envRecord ((Environmentレコード または undefined))。戻り値:(正常完了 (値:unused) または 中途完了)。 呼び出されると、次の手順を実行する。

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

8.6.3 Runtime Semantics: IteratorBindingInitialization

構文指向操作 IteratorBindingInitialization。引数 iteratorRecord (Iteratorレコード) および envRecord ((Environmentレコード または undefined))。戻り値:(正常完了 (値:unused) または 中途完了)。

注

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

次の生成規則ごとに定義される。

ArrayBindingPattern : [ ]
  1. unused を返す。
ArrayBindingPattern : [ Elision ]
  1. 引数 iteratorRecord を指定した Elision の ? IteratorDestructuringAssignmentEvaluation を返す。
ArrayBindingPattern : [ Elisionopt BindingRestElement ]
  1. Elision が存在する場合、
    1. 引数 iteratorRecord を指定した Elision の ? IteratorDestructuringAssignmentEvaluation を実行する。
  2. 引数 iteratorRecord および envRecord を指定した BindingRestElement の ? IteratorBindingInitialization を返す。
ArrayBindingPattern : [ BindingElementList , Elision ]
  1. 引数 iteratorRecord および envRecord を指定した BindingElementList の ? IteratorBindingInitialization を実行する。
  2. 引数 iteratorRecord を指定した Elision の ? IteratorDestructuringAssignmentEvaluation を返す。
ArrayBindingPattern : [ BindingElementList , Elisionopt BindingRestElement ]
  1. 引数 iteratorRecord および envRecord を指定した BindingElementList の ? IteratorBindingInitialization を実行する。
  2. Elision が存在する場合、
    1. 引数 iteratorRecord を指定した Elision の ? IteratorDestructuringAssignmentEvaluation を実行する。
  3. 引数 iteratorRecord および envRecord を指定した BindingRestElement の ? IteratorBindingInitialization を返す。
BindingElementList : BindingElementList , BindingElisionElement
  1. 引数 iteratorRecord および envRecord を指定した BindingElementList の ? IteratorBindingInitialization を実行する。
  2. 引数 iteratorRecord および envRecord を指定した BindingElisionElement の ? IteratorBindingInitialization を返す。
BindingElisionElement : Elision BindingElement
  1. 引数 iteratorRecord を指定した Elision の ? IteratorDestructuringAssignmentEvaluation を実行する。
  2. 引数 iteratorRecord および envRecord を指定した BindingElement の ? IteratorBindingInitialization を返す。
SingleNameBinding : BindingIdentifier Initializeropt
  1. name を BindingIdentifier の StringValue とする。
  2. lhs を ? ResolveBinding(name, envRecord) とする。
  3. value を undefined とする。
  4. iteratorRecord.[[Done]] が false である場合、
    1. next を ? IteratorStepValue(iteratorRecord) とする。
    2. next が done でない場合、
      1. value を next に設定する。
  5. Initializer が存在し、value が undefined である場合、
    1. IsAnonymousFunctionDefinition(Initializer) が true である場合、
      1. value を、引数 name を指定した Initializer の ? NamedEvaluation に設定する。
    2. そうでない場合、
      1. defaultValue を Initializer の ? Evaluation とする。
      2. value を ? GetValue(defaultValue) に設定する。
  6. envRecord が undefined である場合、? PutValue(lhs, value) を返す。
  7. ? InitializeReferencedBinding(lhs, value) を返す。
BindingElement : BindingPattern Initializeropt
  1. value を undefined とする。
  2. iteratorRecord.[[Done]] が false である場合、
    1. next を ? IteratorStepValue(iteratorRecord) とする。
    2. next が done でない場合、
      1. value を next に設定する。
  3. Initializer が存在し、value が undefined である場合、
    1. defaultValue を Initializer の ? Evaluation とする。
    2. value を ? GetValue(defaultValue) に設定する。
  4. 引数 value および envRecord を指定した BindingPattern の ? BindingInitialization を返す。
BindingRestElement : ... BindingIdentifier
  1. lhs を ? ResolveBinding(BindingIdentifier の StringValue, envRecord) とする。
  2. array を ! ArrayCreate(0) とする。
  3. n を 0 とする。
  4. 次を繰り返す。
    1. next を done とする。
    2. iteratorRecord.[[Done]] が false である場合、
      1. next を ? IteratorStepValue(iteratorRecord) に設定する。
    3. next が done である場合、
      1. envRecord が undefined である場合、? PutValue(lhs, array) を返す。
      2. ? InitializeReferencedBinding(lhs, array) を返す。
    4. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(n)), next) を実行する。
    5. n を n + 1 に設定する。
BindingRestElement : ... BindingPattern
  1. array を ! ArrayCreate(0) とする。
  2. n を 0 とする。
  3. 次を繰り返す。
    1. next を done とする。
    2. iteratorRecord.[[Done]] が false である場合、
      1. next を ? IteratorStepValue(iteratorRecord) に設定する。
    3. next が done である場合、
      1. 引数 array および envRecord を指定した BindingPattern の ? BindingInitialization を返す。
    4. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(n)), next) を実行する。
    5. n を n + 1 に設定する。
FormalParameters : [empty]
  1. unused を返す。
FormalParameters : FormalParameterList , FunctionRestParameter
  1. 引数 iteratorRecord および envRecord を指定した FormalParameterList の ? IteratorBindingInitialization を実行する。
  2. 引数 iteratorRecord および envRecord を指定した FunctionRestParameter の ? IteratorBindingInitialization を返す。
FormalParameterList : FormalParameterList , FormalParameter
  1. 引数 iteratorRecord および envRecord を指定した FormalParameterList の ? IteratorBindingInitialization を実行する。
  2. 引数 iteratorRecord および envRecord を指定した FormalParameter の ? IteratorBindingInitialization を返す。
ArrowParameters : BindingIdentifier
  1. value を undefined とする。
  2. 表明: iteratorRecord.[[Done]] は false である。
  3. next を ? IteratorStepValue(iteratorRecord) とする。
  4. next が done でない場合、
    1. value を next に設定する。
  5. 引数 value および envRecord を指定した BindingIdentifier の ? BindingInitialization を返す。
ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList
  1. formals を CoverParenthesizedExpressionAndArrowParameterList によって被覆される ArrowFormalParameters とする。
  2. 引数 iteratorRecord および envRecord を指定した formals の ? IteratorBindingInitialization を返す。
AsyncArrowBindingIdentifier : BindingIdentifier
  1. value を undefined とする。
  2. 表明: iteratorRecord.[[Done]] は false である。
  3. next を ? IteratorStepValue(iteratorRecord) とする。
  4. next が done でない場合、
    1. value を next に設定する。
  5. 引数 value および envRecord を指定した BindingIdentifier の ? BindingInitialization を返す。

8.6.4 Static Semantics: AssignmentTargetType

構文指向操作 AssignmentTargetType。引数なし。戻り値:(simple、web-compat または invalid)。 次の生成規則ごとに定義される。

IdentifierReference : Identifier
  1. IsStrict(this IdentifierReference) が true であり、Identifier の StringValue が "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. expr の AssignmentTargetType を返す。
CallExpression : CoverCallExpressionAndAsyncArrowHead CallExpression Arguments
  1. Normative Optional
    ホストが Web ブラウザーであるか、その他の方法で 関数呼出し代入ターゲットの実行時エラー をサポートし、かつ 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 CoverAwaitExpressionAndAwaitUsingDeclarationHead 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

構文指向操作 PropName。引数なし。戻り値:(String または empty)。 次の生成規則ごとに定義される。

PropertyDefinition : IdentifierReference
  1. IdentifierReference の StringValue を返す。
PropertyDefinition : ... AssignmentExpression
  1. empty を返す。
PropertyDefinition : PropertyName : AssignmentExpression
  1. PropertyName の PropName を返す。
LiteralPropertyName : IdentifierName AttributeKey : IdentifierName
  1. IdentifierName の StringValue を返す。
LiteralPropertyName : StringLiteral AttributeKey : StringLiteral
  1. StringLiteral の SV を返す。
LiteralPropertyName : NumericLiteral
  1. number を NumericLiteral の NumericValue とする。
  2. ! ToString(number) を返す。
ComputedPropertyName : [ AssignmentExpression ]
  1. empty を返す。
MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody } get ClassElementName ( ) { FunctionBody } set ClassElementName ( PropertySetParameterList ) { FunctionBody }
  1. ClassElementName の PropName を返す。
GeneratorMethod : * ClassElementName ( UniqueFormalParameters ) { GeneratorBody }
  1. ClassElementName の PropName を返す。
AsyncGeneratorMethod : async * ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }
  1. ClassElementName の PropName を返す。
ClassElement : ClassStaticBlock
  1. empty を返す。
ClassElement : ;
  1. empty を返す。
AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }
  1. ClassElementName の PropName を返す。
FieldDefinition : ClassElementName Initializeropt
  1. ClassElementName の PropName を返す。
ClassElementName : PrivateIdentifier
  1. empty を返す。

8.6.6 Static Semantics: ContainsUsing

構文指向操作 ContainsUsing。引数なし。戻り値:Boolean。 次の生成規則ごとに定義される。

StatementList : StatementList StatementListItem
  1. 派生した StatementList の ContainsUsing が true である場合、true を返す。
  2. StatementListItem の ContainsUsing が true である場合、true を返す。
  3. false を返す。
StatementListItem : Statement
  1. false を返す。
StatementListItem : Declaration
  1. Declaration の IsUsingDeclaration が true である場合、true を返す。
  2. Declaration の IsAwaitUsingDeclaration が true である場合、true を返す。
  3. false を返す。