8.2.1 SS: ContainsDuplicateLabels
8.2.2 SS: ContainsUndefinedBreakTarget
8.2.3 SS: ContainsUndefinedContinueTarget
8.2.1 Статическая семантика: ContainsDuplicateLabels (Содержит повторяющиеся ярлыки)
Операция ContainsDuplicateLabels (Содержит повторяющиеся ярлыки), управляемая синтаксисом, принимает аргумент labelSet. Она определяется кусочно по следующим производствам:
Block : { }
StatementListItem : Declaration
1. Вернуть false.
StatementList : StatementList StatementListItem
1. Пусть hasDuplicates будет ContainsDuplicateLabels из StatementList с аргументом labelSet. 2. Если hasDuplicates является true, вернуть true. 3. Верните ContainsDuplicateLabels из StatementListItem с аргументом labelSet.
IfStatement : if ( Expression ) Statement else Statement
1. Пусть hasDuplicate будет ContainsDuplicateLabels первого Statement с аргументом labelSet. 2. Если hasDuplicate является true, вернуть true. 3. Верните ContainsDuplicateLabels второго Statement с аргументом labelSet.
IfStatement : if ( Expression ) Statement
1. Верните ContainsDuplicateLabels для Statement с параметром labelSet.
DoWhileStatement : do Statement while ( Expression ) ;
1. Верните ContainsDuplicateLabels утверждения Statement с параметром labelSet.
WhileStatement : while ( Expression ) Statement
1. Верните ContainsDuplicateLabels утверждения Statement с параметром labelSet.
for ( Expression opt ; Expression opt ; Expression opt ) Statement
for ( var VariableDeclarationList ; Expression opt ; Expression opt ) Statement
for ( LexicalDeclaration Expression opt ; Expression opt ) Statement
1. Верните ContainsDuplicateLabels утверждения Statement с параметром labelSet.
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. Верните ContainsDuplicateLabels утверждения Statement с параметром labelSet.
Этот раздел расширен Приложением B.3.5.
WithStatement : with ( Expression ) Statement
1. Верните ContainsDuplicateLabels утверждения Statement с параметром labelSet.
SwitchStatement : switch ( Expression ) CaseBlock
1. Верните ContainsDuplicateLabels из CaseBlock с аргументом labelSet.
CaseBlock : { }
1. Вернуть false.
CaseBlock : { CaseClauses opt DefaultClause CaseClauses opt }
1. Если присутствует первый CaseClauses, то а. Если ContainsDuplicateLabels первых CaseClauses с аргументом labelSet имеет значение true, вернуть true. 2. Если ContainsDuplicateLabels из DefaultClause с аргументом labelSet имеет значение true, вернуть true. 3. Если второго CaseClauses нет, верните false. 4. Верните ContainsDuplicateLabels второго CaseClauses с аргументом labelSet.
CaseClauses : CaseClauses CaseClause
1. Пусть hasDuplicates будет ContainsDuplicateLabels из CaseClauses с аргументом labelSet. 2. Если hasDuplicates является true, вернуть true. 3. Верните ContainsDuplicateLabels из CaseClause с аргументом labelSet.
CaseClause : case Expression : StatementList opt
1. Если список инструкций StatementList присутствует, верните ContainsDuplicateLabels списка инструкций StatementList с аргументом labelSet. 2. Вернуть false.
DefaultClause : default : StatementList opt
1. Если список инструкций StatementList присутствует, верните ContainsDuplicateLabels списка инструкций StatementList с аргументом labelSet. 2. Вернуть false.
LabelledStatement : LabelIdentifier : LabelledItem
1. Пусть label будет строковым значением StringValue для LabelIdentifier. 2. Если label является элементом labelSet, вернуть true. 3. Пусть newLabelSet будет конкатенацией списка labelSet и « label ». 4. Верните ContainsDuplicateLabels из LabelledItem с аргументом newLabelSet.
LabelledItem : FunctionDeclaration
1. Вернуть false.
TryStatement : try Block Catch
1. Пусть hasDuplicates будет ContainsDuplicateLabels блока Block с аргументом labelSet. 2. Если hasDuplicates является true, вернуть true. 3. Верните ContainsDuplicateLabels из Catch с аргументом labelSet.
TryStatement : try Block Finally
1. Пусть hasDuplicates будет ContainsDuplicateLabels блока с аргументом labelSet. 2. Если hasDuplicates является true, вернуть true. 3. Верните ContainsDuplicateLabels из Finally с аргументом labelSet.
TryStatement : try Block Catch Finally
1. Если ContainsDuplicateLabels блока Block с аргументом labelSet имеет значение true, вернуть true. 2. Если ContainsDuplicateLabels из Catch с аргументом labelSet имеет значение true, вернуть true. 3. Верните ContainsDuplicateLabels из Finally с аргументом labelSet.
Catch : catch ( CatchParameter ) Block
1. Верните ContainsDuplicateLabels блока Block с параметром labelSet.
FunctionStatementList : [empty]
1. Вернуть false.
ClassStaticBlockStatementList : [empty]
1. Вернуть false.
ModuleItemList : ModuleItemList ModuleItem
1. Пусть hasDuplicates будет ContainsDuplicateLabels из ModuleItemList с аргументом labelSet. 2. Если hasDuplicates является true, вернуть true. 3. Верните ContainsDuplicateLabels из ModuleItem с аргументом labelSet.
1. Вернуть false.
8.2.2 Статическая семантика: ContainsUndefinedBreakTarget (Содержит неопределенную цель Прерывания)
Операция ContainsUndefinedBreakTarget (Содержит неопределенную цель Прерывания), управляемая синтаксисом, принимает аргумент labelSet. Она определяется кусочно по следующим производствам:
Block : { }
StatementListItem : Declaration
1. Вернуть false.
StatementList : StatementList StatementListItem
1. Пусть hasUndefinedLabels будет ContainsUndefinedBreakTarget списка StatementList с аргументом labelSet. 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedBreakTarget из StatementListItem с аргументом labelSet.
IfStatement : if ( Expression ) Statement else Statement
1. Пусть hasUndefinedLabels будет ContainsUndefinedBreakTarget первого Statement с аргументом labelSet. 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedBreakTarget второго Statement с аргументом labelSet.
IfStatement : if ( Expression ) Statement
1. Верните ContainsUndefinedBreakTarget из Statement с аргументом labelSet.
DoWhileStatement : do Statement while ( Expression ) ;
1. Верните ContainsUndefinedBreakTarget из Statement с аргументом labelSet.
WhileStatement : while ( Expression ) Statement
1. Верните ContainsUndefinedBreakTarget из Statement с аргументом labelSet.
for ( Expression opt ; Expression opt ; Expression opt ) Statement
for ( var VariableDeclarationList ; Expression opt ; Expression opt ) Statement
for ( LexicalDeclaration Expression opt ; Expression opt ) Statement
1. Верните ContainsUndefinedBreakTarget из Statement с аргументом labelSet.
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. Верните ContainsUndefinedBreakTarget из Statement с аргументом labelSet.
BreakStatement : break ;
1. Вернуть false.
BreakStatement : break LabelIdentifier ;
1. Если строковое значение StringValue из LabelIdentifier не является элементом labelSet, верните true. 2. Вернуть false.
WithStatement : with ( Expression ) Statement
1. Верните ContainsUndefinedBreakTarget из Statement с аргументом labelSet.
SwitchStatement : switch ( Expression ) CaseBlock
1. Верните ContainsUndefinedBreakTarget из CaseBlock с аргументом labelSet.
CaseBlock : { }
1. Вернуть false.
CaseBlock : { CaseClauses opt DefaultClause CaseClauses opt }
1. Если присутствует первый CaseClauses, то а. Если ContainsUndefinedBreakTarget из первого CaseClauses с аргументом labelSet имеет значение true, вернуть true. 2. Если ContainsUndefinedBreakTarget из DefaultClause с аргументом labelSet имеет значение true, вернуть true. 3. Если второго CaseClauses нет, верните false. 4. Верните ContainsUndefinedBreakTarget из второго CaseClauses с аргументом labelSet.
CaseClauses : CaseClauses CaseClause
1. Пусть hasUndefinedLabels будет ContainsUndefinedBreakTarget из CaseClauses с аргументом labelSet. 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedBreakTarget из CaseClause с аргументом labelSet.
CaseClause : case Expression : StatementList opt
1. Если список StatementList присутствует, верните ContainsUndefinedBreakTarget из списка StatementList с аргументом labelSet. 2. Вернуть false.
DefaultClause : default : StatementList opt
1. Если список StatementList присутствует, верните ContainsUndefinedBreakTarget из списка StatementList с аргументом labelSet. 2. Вернуть false.
LabelledStatement : LabelIdentifier : LabelledItem
1. Пусть label будет StringValue для LabelIdentifier. 2. Пусть newLabelSet будет конкатенацией списков labelSet и « label ». 3. Верните ContainsUndefinedBreakTarget из LabelledItem с аргументом newLabelSet.
LabelledItem : FunctionDeclaration
1. Вернуть false.
TryStatement : try Block Catch
1. Пусть hasUndefinedLabels будет ContainsUndefinedBreakTarget блока Block с аргументом labelSet. 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedBreakTarget из Catch с аргументом labelSet.
TryStatement : try Block Finally
1. Пусть hasUndefinedLabels будет ContainsUndefinedBreakTarget блока Block с аргументом labelSet. 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedBreakTarget из числа Finally с аргументом labelSet.
TryStatement : try Block Catch Finally
1. Если ContainsUndefinedBreakTarget блока Block с аргументом labelSet имеет значение true, вернуть true. 2. Если ContainsUndefinedBreakTarget из Catch с аргументом labelSet имеет значение true, вернуть true. 3. Верните ContainsUndefinedBreakTarget из Finally с аргументом labelSet.
Catch : catch ( CatchParameter ) Block
1. Верните ContainsUndefinedBreakTarget блока Block с аргументом labelSet.
FunctionStatementList : [empty]
1. Вернуть false.
ClassStaticBlockStatementList : [empty]
1. Вернуть false.
ModuleItemList : ModuleItemList ModuleItem
1. Пусть hasUndefinedLabels будет ContainsUndefinedBreakTarget для ModuleItemList с аргументом labelSet. 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedBreakTarget из ModuleItem с аргументом labelSet.
1. Вернуть false.
8.2.3 Статическая семантика: ContainsUndefinedContinueTarget (Содержит неопределенную цель Продолжения)
Операция ContainsUndefinedContinueTarget (Содержит неопределенную цель Продолжения), управляемая синтаксисом, принимает аргументы iterationSet и labelSet. Она определяется кусочно по следующим производствам:
Block : { }
StatementListItem : Declaration
1. Вернуть false.
1. Верните ContainsUndefinedContinueTarget из BlockStatement с аргументами iterationSet и « ».
BreakableStatement : IterationStatement
1. Пусть newIterationSet будет конкатенацией списков iterationSet и labelSet. 2. Верните ContainsUndefinedContinueTarget из IterationStatement с аргументами newIterationSet и « ».
StatementList : StatementList StatementListItem
1. Пусть hasUndefinedLabels будет ContainsUndefinedContinueTarget списка StatementList с аргументами iterationSet и « ». 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedContinueTarget из StatementListItem с аргументами iterationSet и « ».
IfStatement : if ( Expression ) Statement else Statement
1. Пусть hasUndefinedLabels будет ContainsUndefinedContinueTarget первого Statement с аргументами iterationSet и « ». 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedContinueTarget второго Statement с аргументами iterationSet и « ».
IfStatement : if ( Expression ) Statement
1. Верните ContainsUndefinedContinueTarget из Statement с аргументами iterationSet и « ».
DoWhileStatement : do Statement while ( Expression ) ;
1. Верните ContainsUndefinedContinueTarget из Statement с аргументами iterationSet и « ».
WhileStatement : while ( Expression ) Statement
1. Верните ContainsUndefinedContinueTarget из Statement с аргументами iterationSet и « ».
for ( Expression opt ; Expression opt ; Expression opt ) Statement
for ( var VariableDeclarationList ; Expression opt ; Expression opt ) Statement
for ( LexicalDeclaration Expression opt ; Expression opt ) Statement
1. Верните ContainsUndefinedContinueTarget из Statement с аргументами iterationSet и « ».
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. Верните ContainsUndefinedContinueTarget из Statement с аргументами iterationSet и « ».
Этот раздел расширен Приложением B.3.5.
ContinueStatement : continue ;
1. Вернуть false.
ContinueStatement : continue LabelIdentifier ;
1. Если StringValue LabelIdentifier не является элементом iterationSet, верните true. 2. Вернуть false.
WithStatement : with ( Expression ) Statement
1. Верните ContainsUndefinedContinueTarget из Statement с аргументами iterationSet и « ».
SwitchStatement : switch ( Expression ) CaseBlock
1. Верните ContainsUndefinedContinueTarget из CaseBlock с аргументами iterationSet и « ».
CaseBlock : { }
1. Вернуть false.
CaseBlock : { CaseClauses opt DefaultClause CaseClauses opt }
1. Если присутствует первый CaseClauses, то а. Если ContainsUndefinedContinueTarget первых CaseClauses с аргументами iterationSet и « » является true, вернуть true. 2. Если ContainsUndefinedContinueTarget из DefaultClause с аргументами iterationSet и « » является true, вернуть true. 3. Если второго CaseClauses нет, верните false. 4. Верните ContainsUndefinedContinueTarget второго CaseClauses с аргументами iterationSet и « ».
CaseClauses : CaseClauses CaseClause
1. Пусть hasUndefinedLabels будет ContainsUndefinedContinueTarget из CaseClauses с аргументами iterationSet и « ». 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedContinueTarget из CaseClause с аргументами iterationSet и « ».
CaseClause : case Expression : StatementList opt
1. Если StatementList присутствует, верните ContainsUndefinedContinueTarget из StatementList с аргументами iterationSet и « ». 2. Вернуть false.
DefaultClause : default : StatementList opt
1. Если StatementList присутствует, верните ContainsUndefinedContinueTarget из StatementList с аргументами iterationSet и « ». 2. Вернуть false.
LabelledStatement : LabelIdentifier : LabelledItem
1. Пусть label будет строковым значением StringValue для LabelIdentifier. 2. Пусть newLabelSet будет конкатенацией списков labelSet и « label ». 3. Верните ContainsUndefinedContinueTarget из LabelledItem с аргументами iterationSet и newLabelSet.
LabelledItem : FunctionDeclaration
1. Вернуть false.
TryStatement : try Block Catch
1. Пусть hasUndefinedLabels будет ContainsUndefinedContinueTarget блока Block с аргументами iterationSet и « ». 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedContinueTarget из Catch с аргументами iterationSet и « ».
TryStatement : try Block Finally
1. Пусть hasUndefinedLabels будет ContainsUndefinedContinueTarget блока Block с аргументами iterationSet и « ». 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedContinueTarget из Finally с аргументами iterationSet и « ».
TryStatement : try Block Catch Finally
1. Если ContainsUndefinedContinueTarget блока Block с аргументами iterationSet и « » является true, вернуть true. 2. Если ContainsUndefinedContinueTarget из Catch с аргументами iterationSet и « » является true, вернуть true. 3. Верните ContainsUndefinedContinueTarget из Finally с аргументами iterationSet и « ».
Catch : catch ( CatchParameter ) Block
1. Верните ContainsUndefinedContinueTarget блока Block с аргументами iterationSet и « ».
FunctionStatementList : [empty]
1. Вернуть false.
ClassStaticBlockStatementList : [empty]
1. Вернуть false.
ModuleItemList : ModuleItemList ModuleItem
1. Пусть hasUndefinedLabels будет ContainsUndefinedContinueTarget из ModuleItemList с аргументами iterationSet и « ». 2. Если hasUndefinedLabels является true, вернуть true. 3. Верните ContainsUndefinedContinueTarget из ModuleItem с аргументами iterationSet и « ».
1. Вернуть false.
Информационные ссылки
Стандарт ECMAScript — Раздел «8.2 Labels» — https://tc39.es/ecma262/#sec-syntax-directed-operations-labels