ECMAScript | Смешанные

Эти операции используются во многих местах спецификации.

Оглавление

8.5.1 RS: InstantiateFunctionObject
8.5.2 RS: BindingInitialization
8.5.3 RS: IteratorBindingInitialization
8.5.4 SS: AssignmentTargetType
8.5.5 SS: PropName

 

8.5.1 Семантика времени выполнения: InstantiateFunctionObject

Операция InstantiateFunctionObject (Создание экземпляра функционального объекта), управляемая синтаксисом, принимает аргументы scope и privateScope. Она определяется кусочно по следующим производствам:

FunctionDeclaration :function BindingIdentifier ( FormalParameters ) { FunctionBody }function ( FormalParameters ) { FunctionBody }

1. Вернуться? InstantiateOrdinaryFunctionObject из FunctionDeclaration с областью аргументов и privateScope.

GeneratorDeclaration :function * BindingIdentifier ( FormalParameters ) { GeneratorBody }function * ( FormalParameters ) { GeneratorBody }

1. Вернуться? InstantiateGeneratorFunctionObject из GeneratorDeclaration с областью аргументов и privateScope.

AsyncGeneratorDeclaration :async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody }async function * ( FormalParameters ) { AsyncGeneratorBody }

1. Вернуться? InstantiateAsyncGeneratorFunctionObject из AsyncGeneratorDeclaration с областью аргументов и privateScope.

AsyncFunctionDeclaration :async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody }async function ( FormalParameters ) { AsyncFunctionBody }

1. Вернуться? InstantiateAsyncFunctionObject из AsyncFunctionDeclaration с областью аргументов и privateScope.

 

8.5.2 Семантика времени выполнения: BindingInitialization

Операция BindingInitialization, управляемая синтаксисом, принимает значение аргумента и среду.

Примечание

undefined передается для среды, чтобы указать, что для присвоения значения инициализации следует использовать операцию PutValue. Так обстоит дело с операторами var и списками формальных параметров некоторых нестрогих функций (см. 10.2.11). В этих случаях лексическая привязка поднимается и предварительно инициализируется до оценки ее инициализатора.

Она определяется кусочно по следующим производствам:

BindingIdentifier : Identifier

1. Пусть name будет StringValue of Identifier.
2. Вернуть? InitializeBoundName (имя, значение, среда).

BindingIdentifier : yield

1. Вернуться? InitializeBoundName («доходность», значение, среда).

BindingIdentifier : await

1. Вернуться? InitializeBoundName («ожидание», значение, среда).

BindingPattern : ObjectBindingPattern

1. Выполнить? RequireObjectCoercible (значение).
2. Вернуть результат выполнения BindingInitialization для ObjectBindingPattern, используя значение и среду в качестве аргументов.

BindingPattern : ArrayBindingPattern

1. Пусть будет iteratorRecord? GetIterator (значение).
2. Пусть результатом будет IteratorBindingInitialization из ArrayBindingPattern с аргументами iteratorRecord и environment.
3. Если iteratorRecord. [[Done]] ложен, вернуть? IteratorClose (iteratorRecord, результат).
4. Вернуть результат.

ObjectBindingPattern : { }

1. Верните NormalCompletion (пусто).

ObjectBindingPattern :{ BindingPropertyList }{ BindingPropertyList , }

1. Выполнить? PropertyBindingInitialization для BindingPropertyList с использованием значения и среды в качестве аргументов.
2. Верните NormalCompletion (пусто).

ObjectBindingPattern : { BindingRestProperty }

1. Пусть excludedNames будет новым пустым списком.
2. Вернуть результат выполнения RestBindingInitialization BindingRestProperty со значением, средой и excludedNames в качестве аргументов.

ObjectBindingPattern : { BindingPropertyList , BindingRestProperty }

1. Пусть будет excludedNames? PropertyBinding Инициализация BindingPropertyList со значением аргументов и средой.
2. Вернуть результат выполнения RestBindingInitialization BindingRestProperty с аргументами value, environment и excludedNames.

 

8.5.2.1 InitializeBoundName ( name, value, environment )

Абстрактная операция InitializeBoundName принимает имя аргумента (String), значение и среду. При вызове он выполняет следующие шаги:

1. Если среда не определена, тогда
а. Выполните environment.InitializeBinding (имя, значение).
b. Вернуть NormalCompletion (не определено).
2. Иначе,
а. Пусть lhs будет ResolveBinding (имя).
b. Возвращение ? PutValue (lhs, значение).

 

8.5.3 Семантика времени выполнения: IteratorBindingInitialization

Синтаксически управляемая операция IteratorBindingInitialization принимает аргументы iteratorRecord и environment.

Примечание

Если для среды передается undefined, это означает, что для присвоения значения инициализации следует использовать операцию PutValue. Так обстоит дело со списками формальных параметров нестрогих функций. В этом случае привязки формальных параметров предварительно инициализируются, чтобы иметь дело с возможностью нескольких параметров с одним и тем же именем.

Он определяется кусочно по следующим продукциям:

ArrayBindingPattern : [ ]

1. Верните NormalCompletion (пусто).

ArrayBindingPattern : [ Elision ]

1. Верните результат выполнения IteratorDestructuringAssignmentEvaluation для Elision с помощью iteratorRecord в качестве аргумента.

ArrayBindingPattern : [ Elisionopt BindingRestElement ]

1. Если присутствует Elision, то
а. Выполнять ? IteratorDestructuringAssignmentEvaluation of Elision с параметром iteratorRecord в качестве аргумента.
2. Верните результат выполнения IteratorBindingInitialization для BindingRestElement с помощью iteratorRecord и environment в качестве аргументов.

ArrayBindingPattern : [ BindingElementList , Elision ]

1. Выполнить? IteratorBindingInitialization для BindingElementList с iteratorRecord и средой в качестве аргументов.
2. Верните результат выполнения IteratorDestructuringAssignmentEvaluation для Elision с помощью iteratorRecord в качестве аргумента.

ArrayBindingPattern : [ BindingElementList , Elisionopt BindingRestElement ]

1. Выполнить? IteratorBindingInitialization для BindingElementList с iteratorRecord и средой в качестве аргументов.
2. Если присутствует Elision, то
а. Выполнять ? IteratorDestructuringAssignmentEvaluation of Elision с параметром iteratorRecord в качестве аргумента.
3. Верните результат выполнения IteratorBindingInitialization для BindingRestElement с помощью iteratorRecord и environment в качестве аргументов.

BindingElementList : BindingElementList , BindingElisionElement

1. Выполнить? IteratorBindingInitialization для BindingElementList с iteratorRecord и средой в качестве аргументов.
2. Вернуть результат выполнения IteratorBindingInitialization для BindingElisionElement с использованием iteratorRecord и environment в качестве аргументов.

BindingElisionElement : Elision BindingElement

1. Выполнить? IteratorDestructuringAssignmentEvaluation of Elision с параметром iteratorRecord в качестве аргумента.
2. Верните результат выполнения IteratorBindingInitialization для BindingElement с помощью iteratorRecord и environment в качестве аргументов.

SingleNameBinding : BindingIdentifier Initializeropt

1. Пусть bindingId будет StringValue для BindingIdentifier.
2. Пусть будет lhs? ResolveBinding (bindingId, среда).
3. Пусть v не определено.
4. Если iteratorRecord. [[Done]] имеет значение false, то
а. Следующим пусть будет IteratorStep (iteratorRecord).
б. Если следующее — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
c. ReturnIfAbrupt (следующий).
d. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
е. Еще,
я. Установите для v значение IteratorValue (далее).
II. Если v — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
iii. ReturnIfAbrupt (v).
5. Если инициализатор присутствует и v не определено, то
а. Если IsAnonymousFunctionDefinition (Initializer) истинно, то
я. Установите v равным результату выполнения NamedEvaluation для инициализатора с аргументом bindingId.
б. Еще,
я. Пусть defaultValue будет результатом оценки Initializer.
II. Установите v на? GetValue (defaultValue).
6. Если среда не определена, вернуть? PutValue (lhs, v).
7. Верните InitializeReferencedBinding (lhs, v).

BindingElement : BindingPattern Initializeropt

1. Пусть v не определено.
2. Если iteratorRecord. [[Done]] имеет значение false, то
а. Следующим пусть будет IteratorStep (iteratorRecord).
б. Если следующее — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
c. ReturnIfAbrupt (следующий).
d. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
е. Еще,
я. Установите для v значение IteratorValue (далее).
II. Если v — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
iii. ReturnIfAbrupt (v).
3. Если инициализатор присутствует и v не определено, то
а. Пусть defaultValue будет результатом оценки Initializer.
б. Установите v на? GetValue (defaultValue).
4. Верните результат выполнения BindingInitialization для BindingPattern с v и средой в качестве аргументов.

BindingRestElement : … BindingIdentifier

1. Пусть будет lhs? ResolveBinding (StringValue of BindingIdentifier, среда).
2. Пусть будет А! ArrayCreate (0).
3. Пусть n равно 0.
4. Повторите,
а. Если iteratorRecord. [[Done]] false, то
я. Следующим пусть будет IteratorStep (iteratorRecord).
II. Если следующее — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
iii. ReturnIfAbrupt (следующий).
iv. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
б. Если iteratorRecord. [[Done]] истинно, то
я. Если среда не определена, вернуть? PutValue (lhs, A).
II. Верните InitializeReferencedBinding (lhs, A).
c. Пусть nextValue будет IteratorValue (next).
d. Если nextValue является внезапным завершением, установите для iteratorRecord. [[Done]] значение true.
е. ReturnIfAbrupt (nextValue).
f. Выполнять ! CreateDataPropertyOrThrow (A,! ToString (𝔽 (n)), nextValue).
грамм. Установите n равным n + 1.

BindingRestElement : … BindingPattern

1. Пусть A будет! ArrayCreate (0).
2. Пусть n равно 0.
3. Повторите,
а. Если iteratorRecord. [[Done]] false, то
я. Следующим пусть будет IteratorStep (iteratorRecord).
II. Если следующее — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
iii. ReturnIfAbrupt (следующий).
iv. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
б. Если iteratorRecord. [[Done]] истинно, то
я. Верните результат выполнения BindingInitialization BindingPattern с A и средой в качестве аргументов.
c. Пусть nextValue будет IteratorValue (next).
d. Если nextValue является внезапным завершением, установите для iteratorRecord. [[Done]] значение true.
е. ReturnIfAbrupt (nextValue).
f. Выполнять ! CreateDataPropertyOrThrow (A,! ToString (𝔽 (n)), nextValue).
грамм. Установите n равным n + 1.

FormalParameters : [empty]

1. Верните NormalCompletion (пусто).

FormalParameters : FormalParameterList , FunctionRestParameter

1. Выполнить? IteratorBindingInitialization для FormalParameterList с использованием iteratorRecord и окружения в качестве аргументов.
2. Вернуть результат выполнения IteratorBindingInitialization для FunctionRestParameter с использованием iteratorRecord и environment в качестве аргументов.

FormalParameterList : FormalParameterList , FormalParameter

1. Выполнить? IteratorBindingInitialization для FormalParameterList с использованием iteratorRecord и окружения в качестве аргументов.
2. Вернуть результат выполнения IteratorBindingInitialization для FormalParameter с использованием iteratorRecord и environment в качестве аргументов.

ArrowParameters : BindingIdentifier

1. Пусть v не определено.
2. Утверждение: iteratorRecord. [[Done]] ложно.
3. Пусть следующим будет IteratorStep (iteratorRecord).
4. Если далее происходит внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
5. ReturnIfAbrupt (следующий).
6. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
7. Иначе,
а. Установите для v значение IteratorValue (далее).
б. Если v — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
c. ReturnIfAbrupt (v).
8. Верните результат выполнения BindingInitialization для BindingIdentifier, используя v и среду в качестве аргументов.

ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList

1. Пусть формальные формы будут параметрами ArrowFormalParameters, которые покрываются CoverParenthesizedExpressionAndArrowParameterList.
2. Вернуть IteratorBindingInitialization формалов с аргументами iteratorRecord и environment.

AsyncArrowBindingIdentifier : BindingIdentifier

1. Пусть v не определено.
2. Утверждение: iteratorRecord. [[Done]] ложно.
3. Пусть следующим будет IteratorStep (iteratorRecord).
4. Если далее происходит внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
5. ReturnIfAbrupt (следующий).
6. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
7. Иначе,
а. Установите для v значение IteratorValue (далее).
б. Если v — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
c. ReturnIfAbrupt (v).
8. Верните результат выполнения BindingInitialization для BindingIdentifier, используя v и среду в качестве аргументов.

 

8.5.4 Статическая семантика: AssignmentTargetType

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

IdentifierReference : Identifier

1. Если это IdentifierReference содержится в коде строгого режима, а StringValue идентификатора — «eval» или «arguments», возврат недопустим.
2. Вернуть simple.

IdentifierReference :yieldawaitCallExpression :CallExpression [ Expression ]CallExpression . IdentifierNameCallExpression . PrivateIdentifierMemberExpression :MemberExpression [ Expression ]MemberExpression . IdentifierNameSuperPropertyMemberExpression . PrivateIdentifier

1. Вернуть simple.

PrimaryExpression :

CoverParenthesizedExpressionAndArrowParameterList

1. Пусть expr будет ParenthesizedExpression, которое покрывается CoverParenthesizedExpressionAndArrowParameterList.
2. Вернуть AssignmentTargetType выражения expr.

PrimaryExpression :thisLiteralArrayLiteralObjectLiteralFunctionExpressionClassExpressionGeneratorExpressionAsyncFunctionExpressionAsyncGeneratorExpressionRegularExpressionLiteralTemplateLiteralCallExpression :CoverCallExpressionAndAsyncArrowHeadSuperCallImportCallCallExpression ArgumentsCallExpression TemplateLiteralNewExpression :new NewExpressionMemberExpression :MemberExpression TemplateLiteralnew MemberExpression ArgumentsNewTarget :new . targetImportMeta :import . metaLeftHandSideExpression :OptionalExpressionUpdateExpression :LeftHandSideExpression ++LeftHandSideExpression —++ UnaryExpression— UnaryExpressionUnaryExpression :delete UnaryExpressionvoid UnaryExpressiontypeof UnaryExpressionUnaryExpression— UnaryExpressionUnaryExpressionUnaryExpressionAwaitExpressionExponentiationExpression :UpdateExpression ** ExponentiationExpressionMultiplicativeExpression :MultiplicativeExpression MultiplicativeOperator ExponentiationExpressionAdditiveExpression :AdditiveExpression + MultiplicativeExpressionAdditiveExpression — MultiplicativeExpressionShiftExpression :ShiftExpression << AdditiveExpressionShiftExpression >> AdditiveExpressionShiftExpression >>> AdditiveExpressionRelationalExpression :RelationalExpression < ShiftExpressionRelationalExpression > ShiftExpressionRelationalExpression <= ShiftExpressionRelationalExpression >= ShiftExpressionRelationalExpression instanceof ShiftExpressionRelationalExpression in ShiftExpressionPrivateIdentifier in ShiftExpressionEqualityExpression :EqualityExpression == RelationalExpressionEqualityExpression != RelationalExpressionEqualityExpression === RelationalExpressionEqualityExpression !== RelationalExpressionBitwiseANDExpression :BitwiseANDExpression & EqualityExpressionBitwiseXORExpression :BitwiseXORExpression ^ BitwiseANDExpressionBitwiseORExpression :BitwiseORExpression | BitwiseXORExpressionLogicalANDExpression :LogicalANDExpression && BitwiseORExpressionLogicalORExpression :LogicalORExpression || LogicalANDExpressionCoalesceExpression :CoalesceExpressionHead ?? BitwiseORExpressionConditionalExpression :ShortCircuitExpression ? AssignmentExpression : AssignmentExpressionAssignmentExpression :YieldExpressionArrowFunctionAsyncArrowFunctionLeftHandSideExpression = AssignmentExpressionLeftHandSideExpression AssignmentOperator AssignmentExpressionLeftHandSideExpression &&= AssignmentExpressionLeftHandSideExpression ||= AssignmentExpressionLeftHandSideExpression ??= AssignmentExpressionExpression :Expression , AssignmentExpression

1. Вернуть invalid.

 

8.5.5 Статическая семантика: PropName

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

PropertyDefinition : IdentifierReference

1. Вернуть строковое значение ссылки на идентификатор.

PropertyDefinition :AssignmentExpression

1. Вернуть empty.

PropertyDefinition : PropertyName : AssignmentExpression

1. Верните PropName для PropertyName.

LiteralPropertyName : IdentifierName

1. Верните StringValue для IdentifierName.

LiteralPropertyName : StringLiteral

1. Верните SV StringLiteral.

LiteralPropertyName : NumericLiteral

1. Пусть nbr будет числовым значением NumericLiteral.
2. Вернитесь! ToString (число).

ComputedPropertyName : [ AssignmentExpression ]

1. Вернуть empty.

MethodDefinition :

ClassElementName ( UniqueFormalParameters ) { FunctionBody }get ClassElementName ( ) { FunctionBody }set ClassElementName ( PropertySetParameterList ) { FunctionBody }

1. Верните PropName из ClassElementName.

GeneratorMethod : * ClassElementName ( UniqueFormalParameters ) { GeneratorBody }

1. Верните PropName из ClassElementName.

AsyncGeneratorMethod : async * ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }

1. Верните PropName из ClassElementName.

ClassElement : ClassStaticBlock

1. Вернуть empty.

ClassElement : ;

1. Вернуть empty.

AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }

1. Верните PropName из ClassElementName.

FieldDefinition : ClassElementName Initializeropt

1. Верните PropName из ClassElementName.

ClassElementName : PrivateIdentifier

1. Вернуть empty.

 

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

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

Поделись записью