ECMAScript | Ярлыки

ECMAScript | Ярлыки

8.2.1 SS: ContainsDuplicateLabels
8.2.2 SS: ContainsUndefinedBreakTarget
8.2.3 SS: ContainsUndefinedContinueTarget

 

8.2.1 Статическая семантика: ContainsDuplicateLabels (Содержит повторяющиеся ярлыки)

Операция ContainsDuplicateLabels (Содержит повторяющиеся ярлыки), управляемая синтаксисом, принимает аргумент labelSet. Она определяется кусочно по следующим производствам:

Statement :

VariableStatement

EmptyStatement

ExpressionStatement

ContinueStatement

BreakStatement

ReturnStatement

ThrowStatement

DebuggerStatement

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.

ForStatement :

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.

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. Верните 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.

ModuleItem :

ImportDeclaration

ExportDeclaration

1. Вернуть false.

 

 

8.2.2 Статическая семантика: ContainsUndefinedBreakTarget (Содержит неопределенную цель Прерывания)

Операция ContainsUndefinedBreakTarget (Содержит неопределенную цель Прерывания), управляемая синтаксисом, принимает аргумент labelSet. Она определяется кусочно по следующим производствам:

Statement :

VariableStatement

EmptyStatement

ExpressionStatement

ContinueStatement

ReturnStatement

ThrowStatement

DebuggerStatement

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.

ForStatement :

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.

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. Верните 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.

ModuleItem :

ImportDeclaration

ExportDeclaration

1. Вернуть false.

 

 

8.2.3 Статическая семантика: ContainsUndefinedContinueTarget (Содержит неопределенную цель Продолжения)

Операция ContainsUndefinedContinueTarget (Содержит неопределенную цель Продолжения), управляемая синтаксисом, принимает аргументы iterationSet и labelSet. Она определяется кусочно по следующим производствам:

Statement :

VariableStatement

EmptyStatement

ExpressionStatement

BreakStatement

ReturnStatement

ThrowStatement

DebuggerStatement

Block : { }

StatementListItem : Declaration

1. Вернуть false.

Statement : BlockStatement

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 и « ».

ForStatement :

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 и « ».

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. Верните 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 и « ».

ModuleItem :

ImportDeclaration

ExportDeclaration

1. Вернуть false.

 

Информационные ссылки

Стандарт ECMAScript — Раздел «8.2 Labels» — https://tc39.es/ecma262/#sec-syntax-directed-operations-labels