← ECMAScript 2027 · İçindekiler
ECMA-262 · 18inci Baskı
15

ECMAScript Dili: İşlevler ve Sınıflar

15.1 Parametre Listeleri

Sözdizimi

UniqueFormalParameters UniqueFormalParameters[Yield, Await] : FormalParameters[?Yield, ?Await]

FormalParameters FormalParameters[Yield, Await] : [empty] FunctionRestParameter[?Yield, ?Await] FormalParameterList[?Yield, ?Await] FormalParameterList[?Yield, ?Await] , FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]

FormalParameterList FormalParameterList[Yield, Await] : FormalParameter[?Yield, ?Await] FormalParameterList[?Yield, ?Await] , FormalParameter[?Yield, ?Await]

FunctionRestParameter FunctionRestParameter[Yield, Await] : BindingRestElement[?Yield, ?Await]

FormalParameter FormalParameter[Yield, Await] : BindingElement[?Yield, ?Await]

15.1.1 Statik Anlambilim: Erken Hatalar

UniqueFormalParameters UniqueFormalParameters : FormalParameters

FormalParameters FormalParameters : FormalParameterList

15.1.2 Statik Anlambilim: ContainsExpression

Sözdizimi yönelimli işlem ContainsExpression hiçbir argüman almaz ve bir Boole değeri döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ObjectBindingPattern ObjectBindingPattern : { } { BindingRestProperty }

  1. false döndür.

ObjectBindingPattern ObjectBindingPattern : { BindingPropertyList , BindingRestProperty }

  1. BindingPropertyList'in ContainsExpression değerini döndür.

ArrayBindingPattern ArrayBindingPattern : [ Elisionopt ]

  1. false döndür.

ArrayBindingPattern ArrayBindingPattern : [ Elisionopt BindingRestElement ]

  1. BindingRestElement'in ContainsExpression değerini döndür.

ArrayBindingPattern ArrayBindingPattern : [ BindingElementList , Elisionopt ]

  1. BindingElementList'in ContainsExpression değerini döndür.

ArrayBindingPattern ArrayBindingPattern : [ BindingElementList , Elisionopt BindingRestElement ]

  1. has, BindingElementList'in ContainsExpression değeri olsun.

  2. has true ise, true döndür.

  3. BindingRestElement'in ContainsExpression değerini döndür.

BindingPropertyList BindingPropertyList : BindingPropertyList , BindingProperty

  1. has, BindingPropertyList'in ContainsExpression değeri olsun.

  2. has true ise, true döndür.

  3. BindingProperty'in ContainsExpression değerini döndür.

BindingElementList BindingElementList : BindingElementList , BindingElisionElement

  1. has, BindingElementList'in ContainsExpression değeri olsun.

  2. has true ise, true döndür.

  3. BindingElisionElement'in ContainsExpression değerini döndür.

BindingElisionElement BindingElisionElement : Elisionopt BindingElement

  1. BindingElement'in ContainsExpression değerini döndür.

BindingProperty BindingProperty : PropertyName : BindingElement

  1. has, PropertyName'in IsComputedPropertyKey değeri olsun.

  2. has true ise, true döndür.

  3. BindingElement'in ContainsExpression değerini döndür.

BindingElement BindingElement : BindingPattern Initializer

  1. true döndür.

SingleNameBinding SingleNameBinding : BindingIdentifier

  1. false döndür.

SingleNameBinding SingleNameBinding : BindingIdentifier Initializer

  1. true döndür.

BindingRestElement BindingRestElement : ... BindingIdentifier

  1. false döndür.

BindingRestElement BindingRestElement : ... BindingPattern

  1. BindingPattern'in ContainsExpression değerini döndür.

FormalParameters FormalParameters : [empty]

  1. false döndür.

FormalParameters FormalParameters : FormalParameterList , FunctionRestParameter

  1. FormalParameterList'in ContainsExpression değeri true ise, true döndür.

  2. FunctionRestParameter'in ContainsExpression değerini döndür.

FormalParameterList FormalParameterList : FormalParameterList , FormalParameter

  1. FormalParameterList'in ContainsExpression değeri true ise, true döndür.

  2. FormalParameter'in ContainsExpression değerini döndür.

ArrowParameters ArrowParameters : BindingIdentifier

  1. false döndür.

ArrowParameters ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList

  1. formals, CoverParenthesizedExpressionAndArrowParameterList tarafından kapsanan ArrowFormalParameters olsun.

  2. formals'ın ContainsExpression değerini döndür.

AsyncArrowBindingIdentifier AsyncArrowBindingIdentifier : BindingIdentifier

  1. false döndür.

15.1.3 Statik Anlambilim: IsSimpleParameterList

Sözdizimi yönelimli işlem IsSimpleParameterList hiçbir argüman almaz ve bir Boole değeri döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

BindingElement BindingElement : BindingPattern

  1. false döndür.

BindingElement BindingElement : BindingPattern Initializer

  1. false döndür.

SingleNameBinding SingleNameBinding : BindingIdentifier

  1. true döndür.

SingleNameBinding SingleNameBinding : BindingIdentifier Initializer

  1. false döndür.

FormalParameters FormalParameters : [empty]

  1. true döndür.

FormalParameters FormalParameters : FunctionRestParameter

  1. false döndür.

FormalParameters FormalParameters : FormalParameterList , FunctionRestParameter

  1. false döndür.

FormalParameterList FormalParameterList : FormalParameterList , FormalParameter

  1. FormalParameterList'in IsSimpleParameterList değeri false ise, false döndür.

  2. FormalParameter'in IsSimpleParameterList değerini döndür.

FormalParameter FormalParameter : BindingElement

  1. BindingElement'in IsSimpleParameterList değerini döndür.

ArrowParameters ArrowParameters : BindingIdentifier

  1. true döndür.

ArrowParameters ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList

  1. formals, CoverParenthesizedExpressionAndArrowParameterList tarafından kapsanan ArrowFormalParameters olsun.

  2. formals'ın IsSimpleParameterList değerini döndür.

AsyncArrowBindingIdentifier AsyncArrowBindingIdentifier : BindingIdentifier

  1. true döndür.

CoverCallExpressionAndAsyncArrowHead CoverCallExpressionAndAsyncArrowHead : MemberExpression Arguments

  1. head, CoverCallExpressionAndAsyncArrowHead tarafından kapsanan AsyncArrowHead olsun.

  2. head'in IsSimpleParameterList değerini döndür.

15.1.4 Statik Anlambilim: HasInitializer

Sözdizimi yönelimli işlem HasInitializer hiçbir argüman almaz ve bir Boole değeri döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

BindingElement BindingElement : BindingPattern

  1. false döndür.

BindingElement BindingElement : BindingPattern Initializer

  1. true döndür.

SingleNameBinding SingleNameBinding : BindingIdentifier

  1. false döndür.

SingleNameBinding SingleNameBinding : BindingIdentifier Initializer

  1. true döndür.

FormalParameterList FormalParameterList : FormalParameterList , FormalParameter

  1. FormalParameterList'in HasInitializer değeri true ise, true döndür.

  2. FormalParameter'in HasInitializer değerini döndür.

15.1.5 Statik Anlambilim: ExpectedArgumentCount

Sözdizimi yönelimli işlem ExpectedArgumentCount hiçbir argüman almaz ve negatif olmayan bir tamsayı döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

FormalParameters FormalParameters : [empty] FunctionRestParameter

  1. 0 döndür.

FormalParameters FormalParameters : FormalParameterList , FunctionRestParameter

  1. FormalParameterList'in ExpectedArgumentCount değerini döndür.

FormalParameterList FormalParameterList : FormalParameter

  1. FormalParameter'in HasInitializer değeri true ise, 0 döndür.

  2. 1 döndür.

FormalParameterList FormalParameterList : FormalParameterList , FormalParameter

  1. count, FormalParameterList'in ExpectedArgumentCount değeri olsun.

  2. FormalParameterList'in HasInitializer değeri true ise veya FormalParameter'ın HasInitializer değeri true ise, count döndür.

  3. count + 1 döndür.

ArrowParameters ArrowParameters : BindingIdentifier

  1. 1 döndür.

ArrowParameters ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList

  1. formals, CoverParenthesizedExpressionAndArrowParameterList tarafından kapsanan ArrowFormalParameters olsun.

  2. formals'ın ExpectedArgumentCount değerini döndür.

PropertySetParameterList PropertySetParameterList : FormalParameter

  1. FormalParameter'in HasInitializer değeri true ise, 0 döndür.

  2. 1 döndür.

AsyncArrowBindingIdentifier AsyncArrowBindingIdentifier : BindingIdentifier

  1. 1 döndür.

15.2 İşlev Tanımları

Sözdizimi

FunctionDeclaration FunctionDeclaration[Yield, Await, Default] : function BindingIdentifier[?Yield, ?Await] ( FormalParameters[~Yield, ~Await] ) { FunctionBody[~Yield, ~Await] } [+Default] function ( FormalParameters[~Yield, ~Await] ) { FunctionBody[~Yield, ~Await] }

FunctionExpression FunctionExpression : function BindingIdentifier[~Yield, ~Await]opt ( FormalParameters[~Yield, ~Await] ) { FunctionBody[~Yield, ~Await] }

FunctionBody FunctionBody[Yield, Await] : FunctionStatementList[?Yield, ?Await]

FunctionStatementList FunctionStatementList[Yield, Await] : StatementList[?Yield, ?Await, +Return]opt

15.2.1 Statik Anlambilim: Erken Hatalar

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

FunctionExpression FunctionExpression : function BindingIdentifieropt ( FormalParameters ) { FunctionBody }

FunctionBody FunctionBody : FunctionStatementList

15.2.2 Statik Anlambilim: FunctionBodyContainsUseStrict

Sözdizimi yönelimli işlem FunctionBodyContainsUseStrict hiçbir argüman almaz ve bir Boole değeri döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

FunctionBody FunctionBody : FunctionStatementList

  1. FunctionBody'nin Directive Prologue kısmı bir Use Strict Directive içeriyorsa, true döndür.

  2. false döndür.

15.2.3 Çalışma Zamanı Anlambilimi: EvaluateFunctionBody

Sözdizimi yönelimli işlem EvaluateFunctionBody argümanları funcObj (bir ECMAScript işlev nesnesi) ve argList (bir ECMAScript dil değerleri Listesi) alır ve bir dönüş tamamlanması veya bir fırlatma tamamlanması döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

FunctionBody FunctionBody : FunctionStatementList

  1. ? FunctionDeclarationInstantiation(funcObj, argList) işlemini gerçekleştir.

  2. FunctionStatementList'in ? Evaluation işlemini gerçekleştir.

  3. NOTE: Önceki adım bir normal completion ile sonuçlandıysa, değerlendirme FunctionStatementList'in sonunu geçerek tamamlanmıştır.

  4. ReturnCompletion(undefined) döndür.

15.2.4 Çalışma Zamanı Anlambilimi: InstantiateOrdinaryFunctionObject

Sözdizimi yönelimli işlem InstantiateOrdinaryFunctionObject argümanları envRecord (bir Ortam Kaydı) ve privateEnv (bir PrivateEnvironment Kaydı veya null) alır ve bir ECMAScript işlev nesnesi döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

FunctionDeclaration FunctionDeclaration : function BindingIdentifier ( FormalParameters ) { FunctionBody }

  1. name, BindingIdentifier'ın StringValue değeri olsun.

  2. sourceText, FunctionDeclaration tarafından eşleşen kaynak metin olsun.

  3. closure, OrdinaryFunctionCreate(%Function.prototype%, sourceText, FormalParameters, FunctionBody, non-lexical-this, envRecord, privateEnv) olsun.

  4. SetFunctionName(closure, name) işlemini gerçekleştir.

  5. MakeConstructor(closure) işlemini gerçekleştir.

  6. closure döndür.

FunctionDeclaration FunctionDeclaration : function ( FormalParameters ) { FunctionBody }

  1. sourceText, FunctionDeclaration tarafından eşleşen kaynak metin olsun.

  2. closure, OrdinaryFunctionCreate(%Function.prototype%, sourceText, FormalParameters, FunctionBody, non-lexical-this, envRecord, privateEnv) olsun.

  3. SetFunctionName(closure, "default") işlemini gerçekleştir.

  4. MakeConstructor(closure) işlemini gerçekleştir.

  5. closure döndür.

15.2.5 Çalışma Zamanı Anlambilimi: InstantiateOrdinaryFunctionExpression

Sözdizimi yönelimli işlem InstantiateOrdinaryFunctionExpression isteğe bağlı name (bir özellik anahtarı veya bir Özel Ad (Private Name)) argümanını alır ve bir ECMAScript işlev nesnesi döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

FunctionExpression FunctionExpression : function ( FormalParameters ) { FunctionBody }

  1. name mevcut değilse, name değerini boş Dize (String) yap.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, FunctionExpression tarafından eşleşen kaynak metin olsun.

  5. closure, OrdinaryFunctionCreate(%Function.prototype%, sourceText, FormalParameters, FunctionBody, non-lexical-this, envRecord, privateEnv) olsun.

  6. SetFunctionName(closure, name) işlemini gerçekleştir.

  7. MakeConstructor(closure) işlemini gerçekleştir.

  8. closure döndür.

FunctionExpression FunctionExpression : function BindingIdentifier ( FormalParameters ) { FunctionBody }

  1. Assert: name mevcut değil.

  2. name değerini BindingIdentifier'ın StringValue değerine ayarla.

  3. outerEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  4. funcEnv, NewDeclarativeEnvironment(outerEnv) olsun.

  5. ! funcEnv.CreateImmutableBinding(name, false) işlemini gerçekleştir.

  6. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  7. sourceText, FunctionExpression tarafından eşleşen kaynak metin olsun.

  8. closure, OrdinaryFunctionCreate(%Function.prototype%, sourceText, FormalParameters, FunctionBody, non-lexical-this, funcEnv, privateEnv) olsun.

  9. SetFunctionName(closure, name) işlemini gerçekleştir.

  10. MakeConstructor(closure) işlemini gerçekleştir.

  11. ! funcEnv.InitializeBinding(name, closure) işlemini gerçekleştir.

  12. closure döndür.

15.2.6 Çalışma Zamanı Anlambilimi: Değerlendirme

FunctionDeclaration FunctionDeclaration : function BindingIdentifier ( FormalParameters ) { FunctionBody }

  1. empty döndür.

FunctionDeclaration FunctionDeclaration : function ( FormalParameters ) { FunctionBody }

  1. empty döndür.

FunctionExpression FunctionExpression : function BindingIdentifieropt ( FormalParameters ) { FunctionBody }

  1. FunctionExpression'in InstantiateOrdinaryFunctionExpression değerini döndür.

FunctionStatementList FunctionStatementList : [empty]

  1. undefined döndür.

15.3 Ok İşlevi (Arrow Function) Tanımları

Sözdizimi

ArrowFunction ArrowFunction[In, Yield, Await] : ArrowParameters[?Yield, ?Await] [no LineTerminator here] => ConciseBody[?In]

ArrowParameters ArrowParameters[Yield, Await] : BindingIdentifier[?Yield, ?Await] CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]

ConciseBody ConciseBody[In] : [lookahead ≠ {] ExpressionBody[?In, ~Await] { FunctionBody[~Yield, ~Await] }

ExpressionBody ExpressionBody[In, Await] : AssignmentExpression[?In, ~Yield, ?Await]

Ek Sözdizimi

Üretimin bir örneği işlenirken:

ArrowParameters ArrowParameters[Yield, Await] : CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]

CoverParenthesizedExpressionAndArrowParameterList'in yorumlanması aşağıdaki dilbilgisi kullanılarak netleştirilir:

ArrowFormalParameters ArrowFormalParameters[Yield, Await] : ( UniqueFormalParameters[?Yield, ?Await] )

15.3.1 Statik Anlambilim: Erken Hatalar

ArrowFunction ArrowFunction : ArrowParameters => ConciseBody

ArrowParameters ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList

15.3.2 Statik Anlambilim: ConciseBodyContainsUseStrict

Sözdizimi yönelimli işlem ConciseBodyContainsUseStrict hiçbir argüman almaz ve bir Boole değeri döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ConciseBody ConciseBody : ExpressionBody

  1. false döndür.

ConciseBody ConciseBody : { FunctionBody }

  1. FunctionBody'nin FunctionBodyContainsUseStrict değerini döndür.

15.3.3 Çalışma Zamanı Anlambilimi: EvaluateConciseBody

Sözdizimi yönelimli işlem EvaluateConciseBody argümanları funcObj (bir ECMAScript işlev nesnesi) ve argList (bir ECMAScript dil değerleri Listesi) alır ve bir dönüş tamamlanması veya bir fırlatma tamamlanması döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ConciseBody ConciseBody : ExpressionBody

  1. ? FunctionDeclarationInstantiation(funcObj, argList) işlemini gerçekleştir.

  2. ExpressionBody'nin ? Evaluation işlemini gerçekleştir.

15.3.4 Çalışma Zamanı Anlambilimi: InstantiateArrowFunctionExpression

Sözdizimi yönelimli işlem InstantiateArrowFunctionExpression isteğe bağlı name (bir özellik anahtarı veya bir Özel Ad (Private Name)) argümanını alır ve bir ECMAScript işlev nesnesi döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ArrowFunction ArrowFunction : ArrowParameters => ConciseBody

  1. name mevcut değilse, name değerini boş Dize (String) yap.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, ArrowFunction tarafından eşleşen kaynak metin olsun.

  5. closure, OrdinaryFunctionCreate(%Function.prototype%, sourceText, ArrowParameters, ConciseBody, lexical-this, envRecord, privateEnv) olsun.

  6. SetFunctionName(closure, name) işlemini gerçekleştir.

  7. closure döndür.

15.3.5 Çalışma Zamanı Anlambilimi: Değerlendirme

ArrowFunction ArrowFunction : ArrowParameters => ConciseBody

  1. ArrowFunction'ın InstantiateArrowFunctionExpression değerini döndür.

ExpressionBody ExpressionBody : AssignmentExpression

  1. exprRef, AssignmentExpression'in ? Evaluation değeri olsun.

  2. exprValue, ? GetValue(exprRef) olsun.

  3. ReturnCompletion(exprValue) döndür.

15.4 Metot Tanımları

Sözdizimi

MethodDefinition MethodDefinition[Yield, Await] : ClassElementName[?Yield, ?Await] ( UniqueFormalParameters[~Yield, ~Await] ) { FunctionBody[~Yield, ~Await] } GeneratorMethod[?Yield, ?Await] AsyncMethod[?Yield, ?Await] AsyncGeneratorMethod[?Yield, ?Await] get ClassElementName[?Yield, ?Await] ( ) { FunctionBody[~Yield, ~Await] } set ClassElementName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }

PropertySetParameterList PropertySetParameterList : FormalParameter[~Yield, ~Await]

15.4.1 Statik Anlambilim: Erken Hatalar

MethodDefinition MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody }

MethodDefinition MethodDefinition : set ClassElementName ( PropertySetParameterList ) { FunctionBody }

15.4.2 Statik Anlambilim: HasDirectSuper

Sözdizimi yönelimli işlem HasDirectSuper hiçbir argüman almaz ve bir Boole değeri döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

MethodDefinition MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody }

  1. UniqueFormalParameters Contains SuperCall değeri true ise, true döndür.

  2. FunctionBody Contains SuperCall değerini döndür.

MethodDefinition MethodDefinition : get ClassElementName ( ) { FunctionBody }

  1. FunctionBody Contains SuperCall değerini döndür.

MethodDefinition MethodDefinition : set ClassElementName ( PropertySetParameterList ) { FunctionBody }

  1. PropertySetParameterList Contains SuperCall değeri true ise, true döndür.

  2. FunctionBody Contains SuperCall değerini döndür.

GeneratorMethod GeneratorMethod : ***** ClassElementName ( UniqueFormalParameters ) { GeneratorBody }

  1. UniqueFormalParameters Contains SuperCall değeri true ise, true döndür.

  2. GeneratorBody Contains SuperCall değerini döndür.

AsyncGeneratorMethod AsyncGeneratorMethod : async ***** ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }

  1. UniqueFormalParameters Contains SuperCall değeri true ise, true döndür.

  2. AsyncGeneratorBody Contains SuperCall değerini döndür.

AsyncMethod AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }

  1. UniqueFormalParameters Contains SuperCall değeri true ise, true döndür.

  2. AsyncFunctionBody Contains SuperCall değerini döndür.

15.4.3 Statik Anlambilim: SpecialMethod

Sözdizimi yönelimli işlem SpecialMethod hiçbir argüman almaz ve bir Boole değeri döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

MethodDefinition MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody }

  1. false döndür.

MethodDefinition MethodDefinition : GeneratorMethod AsyncMethod AsyncGeneratorMethod get ClassElementName ( ) { FunctionBody } set ClassElementName ( PropertySetParameterList ) { FunctionBody }

  1. true döndür.

15.4.4 Çalışma Zamanı Anlambilimi: DefineMethod

Sözdizimi yönelimli işlem DefineMethod, obj (bir Nesne) argümanını ve isteğe bağlı proto (bir Nesne) argümanını alır ve [[Key]] (bir property key) ve [[Closure]] (bir ECMAScript işlev nesnesi) alanlarına sahip bir Record içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

MethodDefinition MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody }

  1. propertyKey, ClassElementName'in ? Evaluation değeri olsun.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. If proto is not present, set proto to %Function.prototype%.

  5. sourceText, MethodDefinition tarafından eşleşen kaynak metin olsun.

  6. closure, OrdinaryFunctionCreate(proto, sourceText, UniqueFormalParameters, FunctionBody, non-lexical-this, envRecord, privateEnv) olsun.

  7. MakeMethod(closure, obj) işlemini gerçekleştir.

  8. Return the Record { [[Key]]: propertyKey, [[Closure]]: closure }.

15.4.5 Çalışma Zamanı Anlambilimi: MethodDefinitionEvaluation

Sözdizimi yönelimli işlem MethodDefinitionEvaluation, obj (bir Nesne) ve enumerable (bir Boole) argümanlarını alır ve bir PrivateElement veya unused içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

MethodDefinition MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody }

  1. methodDef be ? DefineMethod of MethodDefinition with argument obj.

  2. SetFunctionName(methodDef.[[Closure]], methodDef.[[Key]]) işlemini gerçekleştir.

  3. Return ? DefineMethodProperty(obj, methodDef.[[Key]], methodDef.[[Closure]], enumerable).

MethodDefinition MethodDefinition : get ClassElementName ( ) { FunctionBody }

  1. propertyKey, ClassElementName'in ? Evaluation değeri olsun.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, MethodDefinition tarafından eşleşen kaynak metin olsun.

  5. formalParamList, aşağıdaki üretimin bir örneği olsun:

FormalParameters FormalParameters : [empty]

.

  1. closure, OrdinaryFunctionCreate(%Function.prototype%, sourceText, formalParamList, FunctionBody, non-lexical-this, envRecord, privateEnv) olsun.

  2. MakeMethod(closure, obj) işlemini gerçekleştir.

  3. SetFunctionName(closure, propertyKey, "get") işlemini gerçekleştir.

  4. propertyKey bir Private Name ise, o zaman

    1. PrivateElement { [[Key]]: propertyKey, [[Kind]]: accessor, [[Get]]: closure, [[Set]]: undefined } döndür.
  5. propertyDesc, PropertyDescriptor { [[Get]]: closure, [[Enumerable]]: enumerable, [[Configurable]]: true } olsun.

  6. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc) işlemini gerçekleştir.

  7. unused döndür.

MethodDefinition MethodDefinition : set ClassElementName ( PropertySetParameterList ) { FunctionBody }

  1. propertyKey, ClassElementName'in ? Evaluation değeri olsun.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, MethodDefinition tarafından eşleşen kaynak metin olsun.

  5. closure, OrdinaryFunctionCreate(%Function.prototype%, sourceText, PropertySetParameterList, FunctionBody, non-lexical-this, envRecord, privateEnv) olsun.

  6. MakeMethod(closure, obj) işlemini gerçekleştir.

  7. SetFunctionName(closure, propertyKey, "set") işlemini gerçekleştir.

  8. propertyKey bir Private Name ise, o zaman

    1. PrivateElement { [[Key]]: propertyKey, [[Kind]]: accessor, [[Get]]: undefined, [[Set]]: closure } döndür.
  9. propertyDesc, PropertyDescriptor { [[Set]]: closure, [[Enumerable]]: enumerable, [[Configurable]]: true } olsun.

  10. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc) işlemini gerçekleştir.

  11. unused döndür.

GeneratorMethod GeneratorMethod : ***** ClassElementName ( UniqueFormalParameters ) { GeneratorBody }

  1. propertyKey, ClassElementName'in ? Evaluation değeri olsun.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, GeneratorMethod tarafından eşleşen kaynak metin olsun.

  5. closure, OrdinaryFunctionCreate(%GeneratorFunction.prototype%, sourceText, UniqueFormalParameters, GeneratorBody, non-lexical-this, envRecord, privateEnv) olsun.

  6. MakeMethod(closure, obj) işlemini gerçekleştir.

  7. SetFunctionName(closure, propertyKey) işlemini gerçekleştir.

  8. proto, OrdinaryObjectCreate(%GeneratorPrototype%) olsun.

  9. ! DefinePropertyOrThrow(closure, "prototype", PropertyDescriptor { [[Value]]: proto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  10. ? DefineMethodProperty(obj, propertyKey, closure, enumerable) değerini döndür.

AsyncGeneratorMethod AsyncGeneratorMethod : async ***** ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }

  1. propertyKey, ClassElementName'in ? Evaluation değeri olsun.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, AsyncGeneratorMethod tarafından eşleşen kaynak metin olsun.

  5. closure, OrdinaryFunctionCreate(%AsyncGeneratorFunction.prototype%, sourceText, UniqueFormalParameters, AsyncGeneratorBody, non-lexical-this, envRecord, privateEnv) olsun.

  6. MakeMethod(closure, obj) işlemini gerçekleştir.

  7. SetFunctionName(closure, propertyKey) işlemini gerçekleştir.

  8. proto, OrdinaryObjectCreate(%AsyncGeneratorPrototype%) olsun.

  9. ! DefinePropertyOrThrow(closure, "prototype", PropertyDescriptor { [[Value]]: proto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  10. ? DefineMethodProperty(obj, propertyKey, closure, enumerable) değerini döndür.

AsyncMethod AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }

  1. propertyKey, ClassElementName'in ? Evaluation değeri olsun.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, AsyncMethod tarafından eşleşen kaynak metin olsun.

  5. closure, OrdinaryFunctionCreate(%AsyncFunction.prototype%, sourceText, UniqueFormalParameters, AsyncFunctionBody, non-lexical-this, envRecord, privateEnv) olsun.

  6. MakeMethod(closure, obj) işlemini gerçekleştir.

  7. SetFunctionName(closure, propertyKey) işlemini gerçekleştir.

  8. ? DefineMethodProperty(obj, propertyKey, closure, enumerable) değerini döndür.

15.5 Üreteç (Generator) İşlevi Tanımları

Sözdizimi

GeneratorDeclaration GeneratorDeclaration[Yield, Await, Default] : function ***** BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } [+Default] function ***** ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }

GeneratorExpression GeneratorExpression : function ***** BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }

GeneratorMethod GeneratorMethod[Yield, Await] : ***** ClassElementName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody }

GeneratorBody GeneratorBody : FunctionBody[+Yield, ~Await]

YieldExpression YieldExpression[In, Await] : yield yield [no LineTerminator here] AssignmentExpression[?In, +Yield, ?Await] yield [no LineTerminator here] ***** AssignmentExpression[?In, +Yield, ?Await]

15.5.1 Statik Anlambilim: Erken Hatalar

GeneratorMethod GeneratorMethod : ***** ClassElementName ( UniqueFormalParameters ) { GeneratorBody }

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

GeneratorExpression GeneratorExpression : function ***** BindingIdentifieropt ( FormalParameters ) { GeneratorBody }

15.5.2 Çalışma Zamanı Anlambilimi: EvaluateGeneratorBody

Sözdizimi yönelimli işlem EvaluateGeneratorBody argümanları funcObj (bir ECMAScript işlev nesnesi) ve argList (bir ECMAScript dil değerleri Listesi) alır ve bir fırlatma tamamlanması veya bir dönüş tamamlanması döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

GeneratorBody GeneratorBody : FunctionBody

  1. ? FunctionDeclarationInstantiation(funcObj, argList) işlemini gerçekleştir.

  2. gen, ? OrdinaryCreateFromConstructor(funcObj, "%GeneratorPrototype%", « [[GeneratorState]], [[GeneratorContext]], [[GeneratorBrand]] ») olsun.

  3. gen.[[GeneratorBrand]] değerini empty olarak ayarla.

  4. gen.[[GeneratorState]] değerini suspended-start olarak ayarla.

  5. GeneratorStart(gen, FunctionBody) işlemini gerçekleştir.

  6. ReturnCompletion(gen) döndür.

15.5.3 Çalışma Zamanı Anlambilimi: InstantiateGeneratorFunctionObject

Sözdizimi yönelimli işlem InstantiateGeneratorFunctionObject argümanları envRecord (bir Ortam Kaydı) ve privateEnv (bir PrivateEnvironment Kaydı veya null) alır ve bir ECMAScript işlev nesnesi döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

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

  1. name, BindingIdentifier'ın StringValue değeri olsun.

  2. sourceText, GeneratorDeclaration tarafından eşleşen kaynak metin olsun.

  3. closure, OrdinaryFunctionCreate(%GeneratorFunction.prototype%, sourceText, FormalParameters, GeneratorBody, non-lexical-this, envRecord, privateEnv) olsun.

  4. SetFunctionName(closure, name) işlemini gerçekleştir.

  5. proto, OrdinaryObjectCreate(%GeneratorPrototype%) olsun.

  6. ! DefinePropertyOrThrow(closure, "prototype", PropertyDescriptor { [[Value]]: proto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  7. closure döndür.

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

  1. sourceText, GeneratorDeclaration tarafından eşleşen kaynak metin olsun.

  2. closure, OrdinaryFunctionCreate(%GeneratorFunction.prototype%, sourceText, FormalParameters, GeneratorBody, non-lexical-this, envRecord, privateEnv) olsun.

  3. SetFunctionName(closure, "default") işlemini gerçekleştir.

  4. proto, OrdinaryObjectCreate(%GeneratorPrototype%) olsun.

  5. ! DefinePropertyOrThrow(closure, "prototype", PropertyDescriptor { [[Value]]: proto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  6. closure döndür.

15.5.4 Çalışma Zamanı Anlambilimi: InstantiateGeneratorFunctionExpression

Sözdizimi yönelimli işlem InstantiateGeneratorFunctionExpression isteğe bağlı name (bir özellik anahtarı veya bir Özel Ad (Private Name)) argümanını alır ve bir ECMAScript işlev nesnesi döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

GeneratorExpression GeneratorExpression : function ***** ( FormalParameters ) { GeneratorBody }

  1. name mevcut değilse, name değerini boş Dize (String) yap.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, GeneratorExpression tarafından eşleşen kaynak metin olsun.

  5. closure, OrdinaryFunctionCreate(%GeneratorFunction.prototype%, sourceText, FormalParameters, GeneratorBody, non-lexical-this, envRecord, privateEnv) olsun.

  6. SetFunctionName(closure, name) işlemini gerçekleştir.

  7. proto, OrdinaryObjectCreate(%GeneratorPrototype%) olsun.

  8. ! DefinePropertyOrThrow(closure, "prototype", PropertyDescriptor { [[Value]]: proto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  9. closure döndür.

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

  1. Assert: name mevcut değil.

  2. name değerini BindingIdentifier'ın StringValue değerine ayarla.

  3. outerEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  4. funcEnv, NewDeclarativeEnvironment(outerEnv) olsun.

  5. ! funcEnv.CreateImmutableBinding(name, false) işlemini gerçekleştir.

  6. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  7. sourceText, GeneratorExpression tarafından eşleşen kaynak metin olsun.

  8. closure, OrdinaryFunctionCreate(%GeneratorFunction.prototype%, sourceText, FormalParameters, GeneratorBody, non-lexical-this, funcEnv, privateEnv) olsun.

  9. SetFunctionName(closure, name) işlemini gerçekleştir.

  10. proto, OrdinaryObjectCreate(%GeneratorPrototype%) olsun.

  11. ! DefinePropertyOrThrow(closure, "prototype", PropertyDescriptor { [[Value]]: proto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  12. ! funcEnv.InitializeBinding(name, closure) işlemini gerçekleştir.

  13. closure döndür.

15.5.5 Çalışma Zamanı Anlambilimi: Değerlendirme

GeneratorExpression GeneratorExpression : function ***** BindingIdentifieropt ( FormalParameters ) { GeneratorBody }

  1. GeneratorExpression'in InstantiateGeneratorFunctionExpression değerini döndür.

YieldExpression YieldExpression : yield

  1. ? Yield(undefined) değerini döndür.

YieldExpression YieldExpression : yield AssignmentExpression

  1. exprRef, AssignmentExpression'in ? Evaluation değeri olsun.

  2. value, ? GetValue(exprRef) olsun.

  3. ? Yield(value) değerini döndür.

YieldExpression YieldExpression : yield ***** AssignmentExpression

  1. genKind, GetGeneratorKind() olsun.

  2. Assert: genKind ya sync ya da async'tir.

  3. exprRef, AssignmentExpression'in ? Evaluation değeri olsun.

  4. value, ? GetValue(exprRef) olsun.

  5. iteratorRecord, ? GetIterator(value, genKind) olsun.

  6. iterator, iteratorRecord.[[Iterator]] olsun.

  7. received, NormalCompletion(undefined) olsun.

  8. Tekrarla,

    1. If received is a normal completion, then

      1. innerResult, ? Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]], « received.[[Value]] ») olsun.

      2. genKind async ise, innerResult değerini ? Await(innerResult) olarak ayarla.

      3. innerResult bir Nesne değilse, bir TypeError istisnası fırlat.

      4. done, ? IteratorComplete(innerResult) olsun.

      5. done true ise, o zaman

         1. ? [IteratorValue](08_sec-abstract-operations.md#sec-iteratorvalue)(*innerResult*) değerini döndür.
      6. genKind async ise, received değerini Completion(AsyncGeneratorYield(? IteratorValue(innerResult))) olarak ayarla.

      7. Aksi takdirde, received değerini Completion(GeneratorYield(innerResult)) olarak ayarla.

    2. Else if received is a throw completion, then

      1. throw, ? GetMethod(iterator, "throw") olsun.

      2. throw undefined değilse, o zaman

         1. *innerResult*, ? [Call](08_sec-abstract-operations.md#sec-call)(*throw*, *iterator*, « *received*.*[[Value]]* ») olsun.
        
         2. *genKind* `async` ise, *innerResult* değerini ? [Await](28_sec-control-abstraction-objects.md#await)(*innerResult*) olarak ayarla.
        
         3. [NOTE](06_sec-notational-conventions.md#note-step): İçteki [yineleyicinin (iterator)](28_sec-control-abstraction-objects.md#sec-iterator-interface) `throw` metodundan kaynaklanan istisnalar yayılır. İçteki bir `throw` metodundan kaynaklanan [normal tamamlanmalar (normal completions)](07_sec-ecmascript-data-types-and-values.md#sec-completion-record-specification-type), içteki bir `next` metoduna benzer şekilde işlenir.
        
         4. *innerResult* [bir Nesne değilse](07_sec-ecmascript-data-types-and-values.md#sec-object-type), bir `TypeError` istisnası fırlat.
        
         5. *done*, ? [IteratorComplete](08_sec-abstract-operations.md#sec-iteratorcomplete)(*innerResult*) olsun.
        
         6. *done* `true` ise, o zaman
           
                    1. ? [IteratorValue](08_sec-abstract-operations.md#sec-iteratorvalue)(*innerResult*) değerini döndür.
        
         7. *genKind* `async` ise, *received* değerini [Completion](06_sec-notational-conventions.md#sec-completion-ao)([AsyncGeneratorYield](28_sec-control-abstraction-objects.md#sec-asyncgeneratoryield)(? [IteratorValue](08_sec-abstract-operations.md#sec-iteratorvalue)(*innerResult*))) olarak ayarla.
        
         8. Aksi takdirde, *received* değerini [Completion](06_sec-notational-conventions.md#sec-completion-ao)([GeneratorYield](28_sec-control-abstraction-objects.md#sec-generatoryield)(*innerResult*)) olarak ayarla.
      3. Aksi takdirde,

         1. [NOTE](06_sec-notational-conventions.md#note-step): *iterator* bir `throw` metoduna sahip değilse, bu fırlatma işlemi `yield*` döngüsünü sonlandıracaktır. Ancak önce *iterator*'a temizlik yapması için bir şans vermemiz gerekir.
        
         2. *closeCompletion*, [NormalCompletion](07_sec-ecmascript-data-types-and-values.md#sec-normalcompletion)(`empty`) olsun.
        
         3. *genKind* `async` ise, ? [AsyncIteratorClose](08_sec-abstract-operations.md#sec-asynciteratorclose)(*iteratorRecord*, *closeCompletion*) işlemini gerçekleştir.
        
         4. Aksi takdirde, ? [IteratorClose](08_sec-abstract-operations.md#sec-iteratorclose)(*iteratorRecord*, *closeCompletion*) işlemini gerçekleştir.
        
         5. [NOTE](06_sec-notational-conventions.md#note-step): Bir sonraki adım, bir `yield*` protokolü ihlali olduğunu belirtmek için bir `TypeError` fırlatır: *iterator* bir `throw` metoduna sahip değildir.
        
         6. Bir `TypeError` istisnası fırlat.
    3. Aksi takdirde,

      1. Assert: received bir return completion (dönüş tamamlanması) dur.

      2. return, ? GetMethod(iterator, "return") olsun.

      3. return undefined ise, o zaman

         1. *receivedValue*, *received*.*[[Value]]* olsun.
        
         2. *genKind* `async` ise, o zaman
           
                    1. *receivedValue* değerini ? [Await](28_sec-control-abstraction-objects.md#await)(*receivedValue*) olarak ayarla.
        
         3. [ReturnCompletion](07_sec-ecmascript-data-types-and-values.md#sec-returncompletion)(*receivedValue*) döndür.
      4. innerReturnResult, ? Call(return, iterator, « received.[[Value]] ») olsun.

      5. genKind async ise, innerReturnResult değerini ? Await(innerReturnResult) olarak ayarla.

      6. innerReturnResult bir Nesne değilse, bir TypeError istisnası fırlat.

      7. done, ? IteratorComplete(innerReturnResult) olsun.

      8. done true ise, o zaman

         1. *returnedValue*, ? [IteratorValue](08_sec-abstract-operations.md#sec-iteratorvalue)(*innerReturnResult*) olsun.
        
         2. [ReturnCompletion](07_sec-ecmascript-data-types-and-values.md#sec-returncompletion)(*returnedValue*) döndür.
      9. genKind async ise, received değerini Completion(AsyncGeneratorYield(? IteratorValue(innerReturnResult))) olarak ayarla.

      10. Aksi takdirde, received değerini Completion(GeneratorYield(innerReturnResult)) olarak ayarla.

15.6 Eşzamansız Üreteç (Async Generator) İşlevi Tanımları

Sözdizimi

AsyncGeneratorDeclaration AsyncGeneratorDeclaration[Yield, Await, Default] : async [no LineTerminator here] function ***** BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, +Await] ) { AsyncGeneratorBody } [+Default] async [no LineTerminator here] function ***** ( FormalParameters[+Yield, +Await] ) { AsyncGeneratorBody }

AsyncGeneratorExpression AsyncGeneratorExpression : async [no LineTerminator here] function ***** BindingIdentifier[+Yield, +Await]opt ( FormalParameters[+Yield, +Await] ) { AsyncGeneratorBody }

AsyncGeneratorMethod AsyncGeneratorMethod[Yield, Await] : async [no LineTerminator here] ***** ClassElementName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, +Await] ) { AsyncGeneratorBody }

AsyncGeneratorBody AsyncGeneratorBody : FunctionBody[+Yield, +Await]

15.6.1 Statik Anlambilim: Erken Hatalar

AsyncGeneratorMethod AsyncGeneratorMethod : async ***** ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }

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

AsyncGeneratorExpression AsyncGeneratorExpression : async function ***** BindingIdentifieropt ( FormalParameters ) { AsyncGeneratorBody }

15.6.2 Çalışma Zamanı Anlambilimi: EvaluateAsyncGeneratorBody

Sözdizimi yönelimli işlem EvaluateAsyncGeneratorBody argümanları funcObj (bir ECMAScript işlev nesnesi) ve argList (bir ECMAScript dil değerleri Listesi) alır ve bir fırlatma tamamlanması veya bir dönüş tamamlanması döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AsyncGeneratorBody AsyncGeneratorBody : FunctionBody

  1. ? FunctionDeclarationInstantiation(funcObj, argList) işlemini gerçekleştir.

  2. gen, ? OrdinaryCreateFromConstructor(funcObj, "%AsyncGeneratorPrototype%", « [[AsyncGeneratorState]], [[AsyncGeneratorContext]], [[AsyncGeneratorQueue]], [[GeneratorBrand]] ») olsun.

  3. gen.[[GeneratorBrand]] değerini empty olarak ayarla.

  4. gen.[[AsyncGeneratorState]] değerini suspended-start olarak ayarla.

  5. AsyncGeneratorStart(gen, FunctionBody) işlemini gerçekleştir.

  6. ReturnCompletion(gen) döndür.

15.6.3 Çalışma Zamanı Anlambilimi: InstantiateAsyncGeneratorFunctionObject

Sözdizimi yönelimli işlem InstantiateAsyncGeneratorFunctionObject argümanları envRecord (bir Ortam Kaydı) ve privateEnv (bir PrivateEnvironment Kaydı veya null) alır ve bir ECMAScript işlev nesnesi döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

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

  1. name, BindingIdentifier'ın StringValue değeri olsun.

  2. sourceText, AsyncGeneratorDeclaration tarafından eşleşen kaynak metin olsun.

  3. closure, OrdinaryFunctionCreate(%AsyncGeneratorFunction.prototype%, sourceText, FormalParameters, AsyncGeneratorBody, non-lexical-this, envRecord, privateEnv) olsun.

  4. SetFunctionName(closure, name) işlemini gerçekleştir.

  5. proto, OrdinaryObjectCreate(%AsyncGeneratorPrototype%) olsun.

  6. ! DefinePropertyOrThrow(closure, "prototype", PropertyDescriptor { [[Value]]: proto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  7. closure döndür.

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

  1. sourceText, AsyncGeneratorDeclaration tarafından eşleşen kaynak metin olsun.

  2. closure, OrdinaryFunctionCreate(%AsyncGeneratorFunction.prototype%, sourceText, FormalParameters, AsyncGeneratorBody, non-lexical-this, envRecord, privateEnv) olsun.

  3. SetFunctionName(closure, "default") işlemini gerçekleştir.

  4. proto, OrdinaryObjectCreate(%AsyncGeneratorPrototype%) olsun.

  5. ! DefinePropertyOrThrow(closure, "prototype", PropertyDescriptor { [[Value]]: proto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  6. closure döndür.

15.6.4 Çalışma Zamanı Anlambilimi: InstantiateAsyncGeneratorFunctionExpression

Sözdizimi yönelimli işlem InstantiateAsyncGeneratorFunctionExpression isteğe bağlı name (bir özellik anahtarı veya bir Özel Ad (Private Name)) argümanını alır ve bir ECMAScript işlev nesnesi döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AsyncGeneratorExpression AsyncGeneratorExpression : async function ***** ( FormalParameters ) { AsyncGeneratorBody }

  1. name mevcut değilse, name değerini boş Dize (String) yap.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, AsyncGeneratorExpression tarafından eşleşen kaynak metin olsun.

  5. closure, OrdinaryFunctionCreate(%AsyncGeneratorFunction.prototype%, sourceText, FormalParameters, AsyncGeneratorBody, non-lexical-this, envRecord, privateEnv) olsun.

  6. SetFunctionName(closure, name) işlemini gerçekleştir.

  7. proto, OrdinaryObjectCreate(%AsyncGeneratorPrototype%) olsun.

  8. ! DefinePropertyOrThrow(closure, "prototype", PropertyDescriptor { [[Value]]: proto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  9. closure döndür.

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

  1. Assert: name mevcut değil.

  2. name değerini BindingIdentifier'ın StringValue değerine ayarla.

  3. outerEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  4. funcEnv, NewDeclarativeEnvironment(outerEnv) olsun.

  5. ! funcEnv.CreateImmutableBinding(name, false) işlemini gerçekleştir.

  6. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  7. sourceText, AsyncGeneratorExpression tarafından eşleşen kaynak metin olsun.

  8. closure, OrdinaryFunctionCreate(%AsyncGeneratorFunction.prototype%, sourceText, FormalParameters, AsyncGeneratorBody, non-lexical-this, funcEnv, privateEnv) olsun.

  9. SetFunctionName(closure, name) işlemini gerçekleştir.

  10. proto, OrdinaryObjectCreate(%AsyncGeneratorPrototype%) olsun.

  11. ! DefinePropertyOrThrow(closure, "prototype", PropertyDescriptor { [[Value]]: proto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  12. ! funcEnv.InitializeBinding(name, closure) işlemini gerçekleştir.

  13. closure döndür.

15.6.5 Çalışma Zamanı Anlambilimi: Değerlendirme

AsyncGeneratorExpression AsyncGeneratorExpression : async function ***** BindingIdentifieropt ( FormalParameters ) { AsyncGeneratorBody }

  1. AsyncGeneratorExpression'in InstantiateAsyncGeneratorFunctionExpression değerini döndür.

15.7 Sınıf Tanımları

Sözdizimi

ClassDeclaration ClassDeclaration[Yield, Await, Default] : class BindingIdentifier[?Yield, ?Await] ClassTail[?Yield, ?Await] [+Default] class ClassTail[?Yield, ?Await]

ClassExpression ClassExpression[Yield, Await] : class BindingIdentifier[?Yield, ?Await]opt ClassTail[?Yield, ?Await]

ClassTail ClassTail[Yield, Await] : ClassHeritage[?Yield, ?Await]opt { ClassBody[?Yield, ?Await]opt }

ClassHeritage ClassHeritage[Yield, Await] : extends LeftHandSideExpression[?Yield, ?Await]

ClassBody ClassBody[Yield, Await] : ClassElementList[?Yield, ?Await]

ClassElementList ClassElementList[Yield, Await] : ClassElement[?Yield, ?Await] ClassElementList[?Yield, ?Await] ClassElement[?Yield, ?Await]

ClassElement ClassElement[Yield, Await] : MethodDefinition[?Yield, ?Await] static MethodDefinition[?Yield, ?Await] FieldDefinition[?Yield, ?Await] ; static FieldDefinition[?Yield, ?Await] ; ClassStaticBlock ;

FieldDefinition FieldDefinition[Yield, Await] : ClassElementName[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]opt

ClassElementName ClassElementName[Yield, Await] : PropertyName[?Yield, ?Await] PrivateIdentifier

ClassStaticBlock ClassStaticBlock : static { ClassStaticBlockBody }

ClassStaticBlockBody ClassStaticBlockBody : ClassStaticBlockStatementList

ClassStaticBlockStatementList ClassStaticBlockStatementList : StatementList[~Yield, +Await, ~Return]opt

15.7.1 Statik Anlambilim: Erken Hatalar

ClassTail ClassTail : ClassHeritageopt { ClassBody }

ClassBody ClassBody : ClassElementList

  • ClassElementList'in PrototypePropertyNameList değeri birden fazla kez "constructor" içeriyorsa bu bir Sözdizimi Hatasıdır.

  • ClassElementList'in PrivateBoundIdentifiers değeri yinelenen girdiler içeriyorsa bu bir Sözdizimi Hatasıdır. Ancak bu ad, bir kez getter ve bir kez setter için kullanılmışsa, başka hiçbir girdide yer almıyorsa ve bu getter ile setter'ın her ikisi de static ya da her ikisi de non-static ise bu durum hariçtir.

ClassElement ClassElement : MethodDefinition

ClassElement ClassElement : static MethodDefinition

ClassElement ClassElement : FieldDefinition ;

ClassElement ClassElement : static FieldDefinition ;

FieldDefinition FieldDefinition : ClassElementName Initializeropt

ClassElementName ClassElementName : PrivateIdentifier

ClassStaticBlockBody ClassStaticBlockBody : ClassStaticBlockStatementList

15.7.2 Statik Anlambilim: ClassElementKind

Sözdizimi yönelimli işlem ClassElementKind hiçbir argüman almaz ve constructor-method, non-constructor-method veya empty döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ClassElement ClassElement : MethodDefinition

  1. MethodDefinition'in PropName değeri "constructor" ise, constructor-method döndür.

  2. non-constructor-method döndür.

ClassElement ClassElement : static MethodDefinition FieldDefinition ; static FieldDefinition ;

  1. non-constructor-method döndür.

ClassElement ClassElement : ClassStaticBlock

  1. non-constructor-method döndür.

ClassElement ClassElement : ;

  1. empty döndür.

15.7.3 Statik Anlambilim: ConstructorMethod

Sözdizimi yönelimli işlem ConstructorMethod hiçbir argüman almaz ve bir ClassElement Ayrıştırma Düğümü (Parse Node) veya empty döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ClassElementList ClassElementList : ClassElement

  1. ClassElement'in ClassElementKind değeri constructor-method ise, ClassElement döndür.

  2. empty döndür.

ClassElementList ClassElementList : ClassElementList ClassElement

  1. head, ClassElementList'in ConstructorMethod değeri olsun.

  2. head empty değilse, head döndür.

  3. ClassElement'in ClassElementKind değeri constructor-method ise, ClassElement döndür.

  4. empty döndür.

15.7.4 Statik Anlambilim: IsStatic

Sözdizimi yönelimli işlem IsStatic hiçbir argüman almaz ve bir Boole değeri döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ClassElement ClassElement : MethodDefinition

  1. false döndür.

ClassElement ClassElement : static MethodDefinition

  1. true döndür.

ClassElement ClassElement : FieldDefinition ;

  1. false döndür.

ClassElement ClassElement : static FieldDefinition ;

  1. true döndür.

ClassElement ClassElement : ClassStaticBlock

  1. true döndür.

ClassElement ClassElement : ;

  1. false döndür.

15.7.5 Statik Anlambilim: NonConstructorElements

Sözdizimi yönelimli işlem NonConstructorElements hiçbir argüman almaz ve ClassElement Ayrıştırma Düğümlerinin bir Listesini döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ClassElementList ClassElementList : ClassElement

  1. ClassElement'in ClassElementKind değeri non-constructor-method ise, o zaman

    1. « ClassElement » döndür.
  2. Yeni ve boş bir Liste (List) döndür.

ClassElementList ClassElementList : ClassElementList ClassElement

  1. list, ClassElementList'in NonConstructorElements değeri olsun.

  2. ClassElement'in ClassElementKind değeri non-constructor-method ise, o zaman

    1. ClassElement'i list'e ekle.
  3. list döndür.

15.7.6 Statik Anlambilim: PrototypePropertyNameList

Sözdizimi yönelimli işlem PrototypePropertyNameList hiçbir argüman almaz ve özellik anahtarlarının bir Listesini döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ClassElementList ClassElementList : ClassElement

  1. propertyName, ClassElement'in PropName değeri olsun.

  2. propertyName empty ise, yeni ve boş bir Liste döndür.

  3. ClassElement'in IsStatic değeri true ise, yeni ve boş bir Liste döndür.

  4. « propertyName » döndür.

ClassElementList ClassElementList : ClassElementList ClassElement

  1. list, ClassElementList'in PrototypePropertyNameList değeri olsun.

  2. propertyName, ClassElement'in PropName değeri olsun.

  3. propertyName empty ise, list döndür.

  4. ClassElement'in IsStatic değeri true ise, list döndür.

  5. list ile « propertyName » list-concatenation (liste birleşimi) sonucunu döndür.

15.7.7 Statik Anlambilim: AllPrivateIdentifiersValid

Sözdizimi yönelimli işlem AllPrivateIdentifiersValid, names (Dizelerin bir Listesi) argümanını alır ve bir Boole değeri döndürür.

Bu şartnamede aşağıda listelenmeyen her dilbilgisi üretimi alternatifi, örtük olarak aşağıdaki varsayılan AllPrivateIdentifiersValid tanımına sahiptir:

  1. Bu Ayrıştırma Düğümünün her bir çocuk düğümü child için şunları yap:

    1. child, bir terminal olmayan (nonterminal) örneği ise, o zaman

      1. names argümanıyla child'ın AllPrivateIdentifiersValid değeri false ise, false döndür.
  2. true döndür.

MemberExpression MemberExpression : MemberExpression . PrivateIdentifier

  1. names, PrivateIdentifier'ın StringValue değerini içeriyorsa, o zaman

    1. names argümanıyla MemberExpression'in AllPrivateIdentifiersValid değerini döndür.
  2. false döndür.

CallExpression CallExpression : CallExpression . PrivateIdentifier

  1. names, PrivateIdentifier'ın StringValue değerini içeriyorsa, o zaman

    1. names argümanıyla CallExpression'in AllPrivateIdentifiersValid değerini döndür.
  2. false döndür.

OptionalChain OptionalChain : ?. PrivateIdentifier

  1. names, PrivateIdentifier'ın StringValue değerini içeriyorsa, true döndür.

  2. false döndür.

OptionalChain OptionalChain : OptionalChain . PrivateIdentifier

  1. names, PrivateIdentifier'ın StringValue değerini içeriyorsa, o zaman

    1. names argümanıyla OptionalChain'in AllPrivateIdentifiersValid değerini döndür.
  2. false döndür.

ClassBody ClassBody : ClassElementList

  1. newNames, names ile ClassBody'nin PrivateBoundIdentifiers değerinin list-concatenation (liste birleşimi) olsun.

  2. newNames argümanıyla ClassElementList'in AllPrivateIdentifiersValid değerini döndür.

RelationalExpression RelationalExpression : PrivateIdentifier in ShiftExpression

  1. names, PrivateIdentifier'ın StringValue değerini içeriyorsa, o zaman

    1. names argümanıyla ShiftExpression'in AllPrivateIdentifiersValid değerini döndür.
  2. false döndür.

15.7.8 Statik Anlambilim: PrivateBoundIdentifiers

Sözdizimi yönelimli işlem PrivateBoundIdentifiers hiçbir argüman almaz ve Dizelerin bir Listesini döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

FieldDefinition FieldDefinition : ClassElementName Initializeropt

  1. ClassElementName'in PrivateBoundIdentifiers değerini döndür.

ClassElementName ClassElementName : PrivateIdentifier

  1. Tek öğesi PrivateIdentifier'ın StringValue değeri olan bir Liste döndür.

ClassElementName ClassElementName : PropertyName

ClassElement ClassElement : ClassStaticBlock ;

  1. Yeni ve boş bir Liste döndür.

ClassElementList ClassElementList : ClassElementList ClassElement

  1. names1, ClassElementList'in PrivateBoundIdentifiers değeri olsun.

  2. names2, ClassElement'in PrivateBoundIdentifiers değeri olsun.

  3. names1 ve names2'nin list-concatenation (liste birleşimi) sonucunu döndür.

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

GeneratorMethod GeneratorMethod : ***** ClassElementName ( UniqueFormalParameters ) { GeneratorBody }

AsyncMethod AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }

AsyncGeneratorMethod AsyncGeneratorMethod : async ***** ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }

  1. ClassElementName'in PrivateBoundIdentifiers değerini döndür.

15.7.9 Statik Anlambilim: ContainsArguments

Sözdizimi yönelimli işlem ContainsArguments hiçbir argüman almaz ve bir Boole değeri döndürür.

Bu şartnamede aşağıda listelenmeyen her dilbilgisi üretimi alternatifi, örtük olarak aşağıdaki varsayılan ContainsArguments tanımına sahiptir:

  1. Bu Ayrıştırma Düğümünün her bir çocuk düğümü child için şunları yap:

    1. child, bir terminal olmayan (nonterminal) örneği ise, o zaman

      1. child'ın ContainsArguments değeri true ise, true döndür.
  2. false döndür.

IdentifierReference IdentifierReference : Identifier

  1. Identifier'ın StringValue değeri "arguments" ise, true döndür.

  2. false döndür.

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

FunctionExpression FunctionExpression : function BindingIdentifieropt ( FormalParameters ) { FunctionBody }

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

GeneratorExpression GeneratorExpression : function ***** BindingIdentifieropt ( FormalParameters ) { GeneratorBody }

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

AsyncGeneratorExpression AsyncGeneratorExpression : async function ***** BindingIdentifieropt ( FormalParameters ) { AsyncGeneratorBody }

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

AsyncFunctionExpression AsyncFunctionExpression : async function BindingIdentifieropt ( FormalParameters ) { AsyncFunctionBody }

  1. false döndür.

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

GeneratorMethod GeneratorMethod : ***** ClassElementName ( UniqueFormalParameters ) { GeneratorBody }

AsyncGeneratorMethod AsyncGeneratorMethod : async ***** ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }

AsyncMethod AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }

  1. ClassElementName'in ContainsArguments değerini döndür.

15.7.10 Çalışma Zamanı Anlambilimi: ClassFieldDefinitionEvaluation

Sözdizimi yönelimli işlem ClassFieldDefinitionEvaluation, homeObj (bir Nesne) argümanını alır ve ya bir ClassFieldDefinition Record (Sınıf Alan Tanım Kaydı) içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

FieldDefinition FieldDefinition : ClassElementName Initializeropt

  1. name, ClassElementName'in ? Evaluation değeri olsun.

  2. Initializer mevcutsa, o zaman

    1. formalParamList, aşağıdaki üretimin bir örneği olsun:

      FormalParameters FormalParameters : [empty]

      .

    2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

    3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

    4. sourceText Unicode kod noktalarının boş dizisi olsun.

    5. initializer, OrdinaryFunctionCreate(%Function.prototype%, sourceText, formalParamList, Initializer, non-lexical-this, envRecord, privateEnv) olsun.

    6. MakeMethod(initializer, homeObj) işlemini gerçekleştir.

    7. initializer.[[ClassFieldInitializerName]] değerini name olarak ayarla.

  3. Aksi takdirde,

    1. initializer empty olsun.
  4. { [[Name]]: name, [[Initializer]]: initializer } ClassFieldDefinition Record'unu döndür.

15.7.11 Çalışma Zamanı Anlambilimi: ClassStaticBlockDefinitionEvaluation

Sözdizimi yönelimli işlem ClassStaticBlockDefinitionEvaluation, homeObj (bir Nesne) argümanını alır ve bir ClassStaticBlockDefinition Record döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ClassStaticBlock ClassStaticBlock : static { ClassStaticBlockBody }

  1. lexical, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  2. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  3. sourceText Unicode kod noktalarının boş dizisi olsun.

  4. formalParams, aşağıdaki üretimin bir örneği olsun:

    FormalParameters FormalParameters : [empty]

    .

  5. bodyFunc, OrdinaryFunctionCreate(%Function.prototype%, sourceText, formalParams, ClassStaticBlockBody, non-lexical-this, lexical, privateEnv) olsun.

  6. MakeMethod(bodyFunc, homeObj) işlemini gerçekleştir.

  7. { [[BodyFunction]]: bodyFunc } ClassStaticBlockDefinition Record'unu döndür.

15.7.12 Çalışma Zamanı Anlambilimi: EvaluateClassStaticBlockBody

Sözdizimi yönelimli işlem EvaluateClassStaticBlockBody, funcObj (bir ECMAScript işlev nesnesi) argümanını alır ve bir dönüş tamamlanması veya bir fırlatma tamamlanması döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ClassStaticBlockBody ClassStaticBlockBody : ClassStaticBlockStatementList

  1. Assert: funcObj, ClassStaticBlockDefinitionEvaluation'ın 5. adımında oluşturulan sentetik bir işlevdir.

  2. ! FunctionDeclarationInstantiation(funcObj, « ») işlemini gerçekleştir.

  3. ClassStaticBlockStatementList'in ? Evaluation işlemini gerçekleştir.

  4. ReturnCompletion(undefined) döndür.

15.7.13 Çalışma Zamanı Anlambilimi: ClassElementEvaluation

Sözdizimi yönelimli işlem ClassElementEvaluation, obj (bir Nesne) argümanını alır ve bir ClassFieldDefinition Record, bir ClassStaticBlockDefinition Record, bir PrivateElement veya unused içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ClassElement ClassElement : FieldDefinition ; static FieldDefinition ;

  1. FieldDefinition'in obj argümanıyla ? ClassFieldDefinitionEvaluation değerini döndür.

ClassElement ClassElement : MethodDefinition static MethodDefinition

  1. MethodDefinition'in obj ve false argümanlarıyla ? MethodDefinitionEvaluation değerini döndür.

ClassElement ClassElement : ClassStaticBlock

  1. ClassStaticBlock'un obj argümanıyla ClassStaticBlockDefinitionEvaluation değerini döndür.

ClassElement ClassElement : ;

  1. unused döndür.

15.7.14 Çalışma Zamanı Anlambilimi: ClassDefinitionEvaluation

Sözdizimi yönelimli işlem ClassDefinitionEvaluation, classBinding (bir Dize veya undefined), className (bir özellik anahtarı veya bir Özel Ad (Private Name)) ve sourceText (ECMAScript kaynak metni) argümanını alır ve bir işlev nesnesi içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür.

Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ClassTail ClassTail : ClassHeritageopt { ClassBodyopt }

  1. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  2. classEnv, NewDeclarativeEnvironment(envRecord) olsun.

  3. classBinding undefined değilse, o zaman

    1. ! classEnv.CreateImmutableBinding(classBinding, true) işlemini gerçekleştir.
  4. outerPrivateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  5. classPrivateEnv, NewPrivateEnvironment(outerPrivateEnv) olsun.

  6. ClassBody mevcutsa, o zaman

    1. ClassBody'nin PrivateBoundIdentifiers değerindeki her bir dn Dizesi için şunları yap:

      1. classPrivateEnv.[[Names]], privateName.[[Description]] değeri dn olan bir Private Name privateName içeriyorsa, o zaman

         1. [Assert](06_sec-notational-conventions.md#assert): Bu durum yalnızca getter/setter çiftleri için mümkündür.
      2. Aksi takdirde,

         1. *name*, *[[Description]]* değeri *dn* olan yeni bir [Private Name](07_sec-ecmascript-data-types-and-values.md#sec-private-names) olsun.
        
         2. *name*'i *classPrivateEnv*.*[[Names]]*'e ekle.
  7. ClassHeritage mevcut değilse, o zaman

    1. protoParent, %Object.prototype% olsun.

    2. ctorParent, %Function.prototype% olsun.

  8. Aksi takdirde,

    1. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını classEnv olarak ayarla.

    2. NOTE: ClassHeritage değerlendirilirken yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı outerPrivateEnv'dir.

    3. superclassRef = Completion(ClassHeritage'ın Evaluation değeri) olsun.

    4. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını envRecord olarak ayarla.

    5. superclass, ? GetValue(? superclassRef) olsun.

    6. superclass null ise, o zaman

      1. protoParent null olsun.

      2. ctorParent, %Function.prototype% olsun.

    7. Aksi takdirde, IsConstructor(superclass) değeri false ise, o zaman

      1. Bir TypeError istisnası fırlat.
    8. Aksi takdirde,

      1. protoParent, ? Get(superclass, "prototype") olsun.

      2. protoParent bir Nesne değilse ve protoParent null değilse, bir TypeError istisnası fırlat.

      3. ctorParent superclass olsun.

  9. proto, OrdinaryObjectCreate(protoParent) olsun.

  10. ClassBody mevcut değilse, ctor empty olsun.

  11. Aksi takdirde, ctor, ClassBody'nin ConstructorMethod değeri olsun.

  12. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını classEnv olarak ayarla.

  13. Yürütülmekte olan yürütme bağlamının PrivateEnvironment'ını classPrivateEnv olarak ayarla.

  14. ctor empty ise, o zaman

    1. defaultCtor, hiçbir parametre almayan, hiçbir şey yakalamayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Abstract Closure olsun:

      1. args, [[Call]] veya [[Construct]] tarafından bu işleve geçirilen argümanların Listesi (List) olsun.

      2. NewTarget undefined ise, bir TypeError istisnası fırlat.

      3. ctorFunc, etkin işlev nesnesi (active function object) olsun.

      4. ctorFunc.[[ConstructorKind]] değeri derived ise, o zaman

         1. [NOTE](06_sec-notational-conventions.md#note-step): Bu dal, `constructor(...args) { super(...args); }` ifadesine benzer şekilde davranır. En belirgin fark, yukarıda bahsedilen [ECMAScript kaynak metni](12_sec-ecmascript-language-source-code.md#sec-source-text) gözlemlenebilir şekilde `%Array.prototype%` üzerindeki [%Symbol.iterator%](07_sec-ecmascript-data-types-and-values.md#sec-well-known-symbols) metodunu çağırırken, bu işlevin çağırmamasıdır.
        
         2. *func*, ! *ctorFunc*.*[[GetPrototypeOf]]*() olsun.
        
         3. [IsConstructor](08_sec-abstract-operations.md#sec-isconstructor)(*func*) değeri `false` ise, bir `TypeError` istisnası fırlat.
        
         4. *result*, ? [Construct](08_sec-abstract-operations.md#sec-construct)(*func*, *args*, NewTarget) olsun.
      5. Aksi takdirde,

         1. [NOTE](06_sec-notational-conventions.md#note-step): Bu dal, `constructor() {}` ifadesine benzer şekilde davranır.
        
         2. *result*, ? [OrdinaryCreateFromConstructor](11_sec-ordinary-and-exotic-objects-behaviours.md#sec-ordinarycreatefromconstructor)(NewTarget, `"%Object.prototype%"`) olsun.
      6. ? InitializeInstanceElements(result, ctorFunc) işlemini gerçekleştir.

      7. NormalCompletion(result) döndür.

    2. ctorFunc, CreateBuiltinFunction(defaultCtor, 0, className, « [[ConstructorKind]], [[SourceText]], [[PrivateMethods]], [[Fields]] », geçerli Realm Kaydı, ctorParent) olsun.

  15. Aksi takdirde,

    1. ctorInfo, ctor'un proto ve ctorParent argümanlarıyla ! DefineMethod sonucu olsun.

    2. ctorFunc, ctorInfo.[[Closure]] olsun.

    3. MakeClassConstructor(ctorFunc) işlemini gerçekleştir.

    4. SetFunctionName(ctorFunc, className) işlemini gerçekleştir.

  16. ctorFunc.[[SourceText]] değerini sourceText olarak ayarla.

  17. MakeConstructor(ctorFunc, false, proto) işlemini gerçekleştir.

  18. ClassHeritage mevcutsa, ctorFunc.[[ConstructorKind]] değerini derived olarak ayarla.

  19. ! DefineMethodProperty(proto, "constructor", ctorFunc, false) işlemini gerçekleştir.

  20. ClassBody mevcut değilse, classElements yeni ve boş bir Liste (List) olsun.

  21. Aksi takdirde, classElements, ClassBody'nin NonConstructorElements değeri olsun.

  22. instancePrivateMethods yeni ve boş bir Liste (List) olsun.

  23. staticPrivateMethods yeni ve boş bir Liste (List) olsun.

  24. instanceFields yeni ve boş bir Liste (List) olsun.

  25. staticElements yeni ve boş bir Liste (List) olsun.

  26. classElements listesindeki her bir ClassElement classElement için şunları yap:

    1. classElement'in IsStatic değeri false ise, o zaman

      1. element = Completion(classElement'in proto argümanıyla ClassElementEvaluation değeri) olsun.
    2. Aksi takdirde,

      1. element = Completion(classElement'in ctorFunc argümanıyla ClassElementEvaluation değeri) olsun.
    3. element bir ani tamamlanma ise, o zaman

      1. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını envRecord olarak ayarla.

      2. Yürütülmekte olan yürütme bağlamının PrivateEnvironment'ını outerPrivateEnv olarak ayarla.

      3. ? element döndür.

    4. element değerini ! element olarak ayarla.

    5. element bir PrivateElement ise, o zaman

      1. Assert: element.[[Kind]] değeri method veya accessor'dır.

      2. classElement'in IsStatic değeri false ise, container instancePrivateMethods olsun.

      3. Aksi takdirde, container staticPrivateMethods olsun.

      4. container, pe.[[Key]] değeri element.[[Key]] olan bir PrivateElement pe içeriyorsa, o zaman

         1. [Assert](06_sec-notational-conventions.md#assert): *element*.*[[Kind]]* ve *pe*.*[[Kind]]* değerlerinin her ikisi de `accessor`'dır.
        
         2. *element*.*[[Get]]* `undefined` ise, o zaman
        
                   1. *combined*, [PrivateElement](07_sec-ecmascript-data-types-and-values.md#sec-privateelement-specification-type) { *[[Key]]*: *element*.*[[Key]]*, *[[Kind]]*: `accessor`, *[[Get]]*: *pe*.*[[Get]]*, *[[Set]]*: *element*.*[[Set]]* } olsun.
        
         3. Aksi takdirde,
        
                   1. *combined*, [PrivateElement](07_sec-ecmascript-data-types-and-values.md#sec-privateelement-specification-type) { *[[Key]]*: *element*.*[[Key]]*, *[[Kind]]*: `accessor`, *[[Get]]*: *element*.*[[Get]]*, *[[Set]]*: *pe*.*[[Set]]* } olsun.
        
         4. *container*'daki *pe* öğesini *combined* ile değiştir.
      5. Aksi takdirde,

         1. *element*'i *container*'a ekle.
    6. Aksi takdirde, element bir ClassFieldDefinition Record ise, o zaman

      1. classElement'in IsStatic değeri false ise, element'i instanceFields'a ekle.

      2. Aksi takdirde, element'i staticElements'e ekle.

    7. Aksi takdirde, element bir ClassStaticBlockDefinition Record ise, o zaman

      1. element'i staticElements'e ekle.
  27. Yürütülmekte olan yürütme bağlamının LexicalEnvironment'ını envRecord olarak ayarla.

  28. classBinding undefined değilse, o zaman

    1. ! classEnv.InitializeBinding(classBinding, ctorFunc) işlemini gerçekleştir.
  29. ctorFunc.[[PrivateMethods]] değerini instancePrivateMethods olarak ayarla.

  30. ctorFunc.[[Fields]] değerini instanceFields olarak ayarla.

  31. staticPrivateMethods'taki her bir PrivateElement method için şunları yap:

    1. ! PrivateMethodOrAccessorAdd(ctorFunc, method) işlemini gerçekleştir.
  32. staticElements'in her bir elementRecord öğesi için şunları yap:

    1. elementRecord bir ClassFieldDefinition Record ise, o zaman

      1. result = Completion(DefineField(ctorFunc, elementRecord)) olsun.
    2. Aksi takdirde,

      1. Assert: elementRecord bir ClassStaticBlockDefinition Record'dur.

      2. result = Completion(Call(elementRecord.[[BodyFunction]], ctorFunc)) olsun.

    3. result bir ani tamamlanma ise, o zaman

      1. Yürütülmekte olan yürütme bağlamının PrivateEnvironment'ını outerPrivateEnv olarak ayarla.

      2. ? result döndür.

  33. Yürütülmekte olan yürütme bağlamının PrivateEnvironment'ını outerPrivateEnv olarak ayarla.

  34. ctorFunc döndür.

15.7.15 Çalışma Zamanı Anlambilimi: BindingClassDeclarationEvaluation

Sözdizimi yönelimli işlem BindingClassDeclarationEvaluation hiçbir argüman almaz ve bir işlev nesnesi içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ClassDeclaration ClassDeclaration : class BindingIdentifier ClassTail

  1. className, BindingIdentifier'ın StringValue değeri olsun.

  2. sourceText, ClassDeclaration tarafından eşleşen kaynak metin olsun.

  3. value, ClassTail'ın className, className ve sourceText argümanlarıyla ? ClassDefinitionEvaluation değeri olsun.

  4. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  5. ? InitializeBoundName(className, value, envRecord) işlemini gerçekleştir.

  6. value döndür.

ClassDeclaration ClassDeclaration : class ClassTail

  1. sourceText, ClassDeclaration tarafından eşleşen kaynak metin olsun.

  2. ClassTail'ın undefined, "default" ve sourceText argümanlarıyla ? ClassDefinitionEvaluation değerini döndür.

15.7.16 Çalışma Zamanı Anlambilimi: Değerlendirme

ClassDeclaration ClassDeclaration : class BindingIdentifier ClassTail

  1. Bu ClassDeclaration'ın ? BindingClassDeclarationEvaluation işlemini gerçekleştir.

  2. empty döndür.

ClassExpression ClassExpression : class ClassTail

  1. sourceText, ClassExpression tarafından eşleşen kaynak metin olsun.

  2. ClassTail'ın undefined, boş String ve sourceText argümanlarıyla ? ClassDefinitionEvaluation değerini döndür.

ClassExpression ClassExpression : class BindingIdentifier ClassTail

  1. className, BindingIdentifier'ın StringValue değeri olsun.

  2. sourceText, ClassExpression tarafından eşleşen kaynak metin olsun.

  3. ClassTail'ın className, className ve sourceText argümanlarıyla ? ClassDefinitionEvaluation değerini döndür.

ClassElementName ClassElementName : PrivateIdentifier

  1. privateIdentifier, PrivateIdentifier'ın StringValue değeri olsun.

  2. privateEnvRecord, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  3. names, privateEnvRecord.[[Names]] olsun.

  4. Assert: names'in tam olarak bir öğesi, [[Description]] değeri privateIdentifier olan bir Private Name'dir.

  5. privateName, names içindeki [[Description]] değeri privateIdentifier olan Private Name olsun.

  6. privateName döndür.

ClassStaticBlockStatementList ClassStaticBlockStatementList : [empty]

  1. undefined döndür.

15.8 Async İşlev Tanımları

Sözdizimi

AsyncFunctionDeclaration AsyncFunctionDeclaration[Yield, Await, Default] : async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await] ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody } [+Default] async [no LineTerminator here] function ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }

AsyncFunctionExpression AsyncFunctionExpression : async [no LineTerminator here] function BindingIdentifier[~Yield, +Await]opt ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }

AsyncMethod AsyncMethod[Yield, Await] : async [no LineTerminator here] ClassElementName[?Yield, ?Await] ( UniqueFormalParameters[~Yield, +Await] ) { AsyncFunctionBody }

AsyncFunctionBody AsyncFunctionBody : FunctionBody[~Yield, +Await]

AwaitExpression AwaitExpression[Yield] : await UnaryExpression[?Yield, +Await]

15.8.1 Statik Anlambilim: Erken Hatalar

AsyncMethod AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }

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

AsyncFunctionExpression AsyncFunctionExpression : async function BindingIdentifieropt ( FormalParameters ) { AsyncFunctionBody }

15.8.2 Çalışma Zamanı Anlambilimi: InstantiateAsyncFunctionObject

Sözdizimi yönelimli işlem InstantiateAsyncFunctionObject, envRecord (bir Ortam Kaydı (Environment Record)) ve privateEnv (bir PrivateEnvironment Kaydı veya null) argümanlarını alır ve bir ECMAScript işlev nesnesi döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

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

  1. name, BindingIdentifier'ın StringValue değeri olsun.
  2. sourceText, AsyncFunctionDeclaration tarafından eşleşen kaynak metin olsun.
  3. closure, OrdinaryFunctionCreate(%AsyncFunction.prototype%, sourceText, FormalParameters, AsyncFunctionBody, non-lexical-this, envRecord, privateEnv) olsun.
  4. SetFunctionName(closure, name) işlemini gerçekleştir.
  5. closure döndür.

AsyncFunctionDeclaration AsyncFunctionDeclaration : async function ( FormalParameters ) { AsyncFunctionBody }

  1. sourceText, AsyncFunctionDeclaration tarafından eşleşen kaynak metin olsun.
  2. closure, OrdinaryFunctionCreate(%AsyncFunction.prototype%, sourceText, FormalParameters, AsyncFunctionBody, non-lexical-this, envRecord, privateEnv) olsun.
  3. SetFunctionName(closure, "default") işlemini gerçekleştir.
  4. closure döndür.

15.8.3 Çalışma Zamanı Anlambilimi: InstantiateAsyncFunctionExpression

Sözdizimi yönelimli işlem InstantiateAsyncFunctionExpression isteğe bağlı name (bir özellik anahtarı veya bir Özel Ad (Private Name)) argümanını alır ve bir ECMAScript işlev nesnesi döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AsyncFunctionExpression AsyncFunctionExpression : async function ( FormalParameters ) { AsyncFunctionBody }

  1. name mevcut değilse, name değerini boş String olarak ayarla.
  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.
  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.
  4. sourceText, AsyncFunctionExpression tarafından eşleşen kaynak metin olsun.
  5. closure, OrdinaryFunctionCreate(%AsyncFunction.prototype%, sourceText, FormalParameters, AsyncFunctionBody, non-lexical-this, envRecord, privateEnv) olsun.
  6. SetFunctionName(closure, name) işlemini gerçekleştir.
  7. closure döndür.

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

  1. Assert: name mevcut değildir.
  2. name değerini BindingIdentifier'ın StringValue değeri olarak ayarla.
  3. outerEnv, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.
  4. funcEnv, NewDeclarativeEnvironment(outerEnv) olsun.
  5. ! funcEnv.CreateImmutableBinding(name, false) işlemini gerçekleştir.
  6. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.
  7. sourceText, AsyncFunctionExpression tarafından eşleşen kaynak metin olsun.
  8. closure, OrdinaryFunctionCreate(%AsyncFunction.prototype%, sourceText, FormalParameters, AsyncFunctionBody, non-lexical-this, funcEnv, privateEnv) olsun.
  9. SetFunctionName(closure, name) işlemini gerçekleştir.
  10. ! funcEnv.InitializeBinding(name, closure) işlemini gerçekleştir.
  11. closure döndür.

15.8.4 Çalışma Zamanı Anlambilimi: EvaluateAsyncFunctionBody

Sözdizimi yönelimli işlem EvaluateAsyncFunctionBody, funcObj (bir ECMAScript işlev nesnesi) ve argList (ECMAScript dil değerlerinin bir Listesi) argümanlarını alır ve bir dönüş tamamlanması döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AsyncFunctionBody AsyncFunctionBody : FunctionBody

  1. promiseCapability, ! NewPromiseCapability(%Promise%) olsun.
  2. completion = Completion(FunctionDeclarationInstantiation(funcObj, argList)) olsun.
  3. completion bir ani tamamlanma ise, o zaman
    1. ! Call(promiseCapability.[[Reject]], undefined, « completion.[[Value]] ») işlemini gerçekleştir.
  4. Aksi takdirde,
    1. AsyncFunctionStart(promiseCapability, FunctionBody) işlemini gerçekleştir.
  5. ReturnCompletion(promiseCapability.[[Promise]]) döndür.

15.8.5 Çalışma Zamanı Anlambilimi: Değerlendirme

AsyncFunctionExpression AsyncFunctionExpression : async function BindingIdentifieropt ( FormalParameters ) { AsyncFunctionBody }

  1. AsyncFunctionExpression'ın InstantiateAsyncFunctionExpression değerini döndür.

AwaitExpression AwaitExpression : await UnaryExpression

  1. exprRef, UnaryExpression'ın ? Evaluation değeri olsun.
  2. value, ? GetValue(exprRef) olsun.
  3. ? Await(value) değerini döndür.

15.9 Async Ok İşlev Tanımları

Sözdizimi

AsyncArrowFunction AsyncArrowFunction[In, Yield, Await] : async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In] CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] [no LineTerminator here] => AsyncConciseBody[?In]

AsyncConciseBody AsyncConciseBody[In] : [lookahead ≠ {] ExpressionBody[?In, +Await] { AsyncFunctionBody }

AsyncArrowBindingIdentifier AsyncArrowBindingIdentifier[Yield] : BindingIdentifier[?Yield, +Await]

CoverCallExpressionAndAsyncArrowHead CoverCallExpressionAndAsyncArrowHead[Yield, Await] : MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]

Tamamlayıcı Sözdizimi

Şu üretimin bir örneği işlenirken

AsyncArrowFunction AsyncArrowFunction : CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody

CoverCallExpressionAndAsyncArrowHead yorumu, aşağıdaki dilbilgisi kullanılarak iyileştirilir:

AsyncArrowHead AsyncArrowHead : async [no LineTerminator here] ArrowFormalParameters[~Yield, +Await]

15.9.1 Statik Anlambilim: Erken Hatalar

AsyncArrowFunction AsyncArrowFunction : async AsyncArrowBindingIdentifier => AsyncConciseBody

AsyncArrowFunction AsyncArrowFunction : CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody

15.9.2 Statik Anlambilim: AsyncConciseBodyContainsUseStrict

Sözdizimi yönelimli işlem AsyncConciseBodyContainsUseStrict hiçbir argüman almaz ve bir Boole değeri döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AsyncConciseBody AsyncConciseBody : ExpressionBody

  1. false döndür.

AsyncConciseBody AsyncConciseBody : { AsyncFunctionBody }

  1. AsyncFunctionBody'nin FunctionBodyContainsUseStrict değerini döndür.

15.9.3 Çalışma Zamanı Anlambilimi: EvaluateAsyncConciseBody

Sözdizimi yönelimli işlem EvaluateAsyncConciseBody, funcObj (bir ECMAScript işlev nesnesi) ve argList (ECMAScript dil değerlerinin bir Listesi) argümanlarını alır ve bir dönüş tamamlanması döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AsyncConciseBody AsyncConciseBody : ExpressionBody

  1. promiseCapability, ! NewPromiseCapability(%Promise%) olsun.

  2. completion = Completion(FunctionDeclarationInstantiation(funcObj, argList)) olsun.

  3. completion bir ani tamamlanma ise, o zaman

    1. ! Call(promiseCapability.[[Reject]], undefined, « completion.[[Value]] ») işlemini gerçekleştir.
  4. Aksi takdirde,

    1. AsyncFunctionStart(promiseCapability, ExpressionBody) işlemini gerçekleştir.
  5. ReturnCompletion(promiseCapability.[[Promise]]) döndür.

15.9.4 Çalışma Zamanı Anlambilimi: InstantiateAsyncArrowFunctionExpression

Sözdizimi yönelimli işlem InstantiateAsyncArrowFunctionExpression isteğe bağlı name (bir özellik anahtarı veya bir Özel Ad (Private Name)) argümanını alır ve bir ECMAScript işlev nesnesi döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AsyncArrowFunction AsyncArrowFunction : async AsyncArrowBindingIdentifier => AsyncConciseBody

  1. name mevcut değilse, name değerini boş String olarak ayarla.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, AsyncArrowFunction by source text matched by (tarafından eşleşen kaynak metin) olsun.

  5. params AsyncArrowBindingIdentifier olsun.

  6. closure, OrdinaryFunctionCreate(%AsyncFunction.prototype%, sourceText, params, AsyncConciseBody, lexical-this, envRecord, privateEnv) olsun.

  7. SetFunctionName(closure, name) işlemini gerçekleştir.

  8. closure döndür.

AsyncArrowFunction AsyncArrowFunction : CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody

  1. name mevcut değilse, name değerini boş String olarak ayarla.

  2. envRecord, yürütülmekte olan yürütme bağlamının LexicalEnvironment'ı olsun.

  3. privateEnv, yürütülmekte olan yürütme bağlamının PrivateEnvironment'ı olsun.

  4. sourceText, AsyncArrowFunction tarafından eşleşen kaynak metin olsun.

  5. head, CoverCallExpressionAndAsyncArrowHead tarafından kapsanan AsyncArrowHead olsun.

  6. params, head'in ArrowFormalParameters'ı olsun.

  7. closure, OrdinaryFunctionCreate(%AsyncFunction.prototype%, sourceText, params, AsyncConciseBody, lexical-this, envRecord, privateEnv) olsun.

  8. SetFunctionName(closure, name) işlemini gerçekleştir.

  9. closure döndür.

15.9.5 Çalışma Zamanı Anlambilimi: Değerlendirme

AsyncArrowFunction AsyncArrowFunction : async AsyncArrowBindingIdentifier => AsyncConciseBody CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody

  1. AsyncArrowFunction'ın InstantiateAsyncArrowFunctionExpression değerini döndür.

15.10 Kuyruk Konumu Çağrıları (Tail Position Calls)

15.10.1 Statik Anlambilim: IsInTailPosition ( call )

Soyut işlem IsInTailPosition, call (bir CallExpression Ayrıştırma Düğümü, bir MemberExpression Ayrıştırma Düğümü veya bir OptionalChain Ayrıştırma Düğümü) argümanını alır ve bir Boole değeri döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. IsStrict(call) değeri false ise, false döndür.

  2. call bir FunctionBody, ConciseBody veya AsyncConciseBody içinde yer almıyorsa, false döndür.

  3. body, call'u en yakın şekilde içeren FunctionBody, ConciseBody veya AsyncConciseBody olsun.

  4. body bir GeneratorBody'nin FunctionBody'si ise, false döndür.

  5. body bir AsyncFunctionBody'nin FunctionBody'si ise, false döndür.

  6. body bir AsyncGeneratorBody'nin FunctionBody'si ise, false döndür.

  7. body bir AsyncConciseBody ise, false döndür.

  8. body'nin call argümanıyla HasCallInTailPosition sonucunu döndür.

15.10.2 Statik Anlambilim: HasCallInTailPosition

Sözdizimi yönelimli işlem HasCallInTailPosition, call (bir CallExpression Ayrıştırma Düğümü, bir MemberExpression Ayrıştırma Düğümü veya bir OptionalChain Ayrıştırma Düğümü) argümanını alır ve bir Boole değeri döndürür.

Aşağıdaki üretimler üzerinden parça parça tanımlanır:

StatementList StatementList : StatementList StatementListItem

  1. has, StatementList'in call argümanıyla HasCallInTailPosition değeri olsun.

  2. has true ise, true döndür.

  3. StatementListItem'in call argümanıyla HasCallInTailPosition değerini döndür.

FunctionStatementList FunctionStatementList : [empty]

StatementListItem StatementListItem : Declaration

Statement Statement : VariableStatement EmptyStatement ExpressionStatement ContinueStatement BreakStatement ThrowStatement DebuggerStatement

Block Block : { }

ReturnStatement ReturnStatement : return ;

LabelledItem LabelledItem : FunctionDeclaration

ForInOfStatement ForInOfStatement : for ( LeftHandSideExpression of AssignmentExpression ) Statement for ( var ForBinding of AssignmentExpression ) Statement for ( ForDeclaration of AssignmentExpression ) Statement

CaseBlock CaseBlock : { }

  1. false döndür.

IfStatement IfStatement : if ( Expression ) Statement else Statement

  1. has, ilk Statement'in call argümanıyla HasCallInTailPosition değeri olsun.

  2. has true ise, true döndür.

  3. İkinci Statement'in call argümanıyla HasCallInTailPosition değerini döndür.

IfStatement IfStatement : if ( Expression ) Statement

DoWhileStatement DoWhileStatement : do Statement while ( Expression ) ;

WhileStatement WhileStatement : while ( Expression ) Statement

ForStatement ForStatement : for ( Expressionopt ; Expressionopt ; Expressionopt ) Statement for ( var VariableDeclarationList ; Expressionopt ; Expressionopt ) Statement for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement

ForInOfStatement ForInOfStatement : for ( LeftHandSideExpression in Expression ) Statement for ( var ForBinding in Expression ) Statement for ( ForDeclaration in Expression ) Statement

WithStatement WithStatement : with ( Expression ) Statement

  1. Statement'in call argümanıyla HasCallInTailPosition değerini döndür.

LabelledStatement LabelledStatement : LabelIdentifier : LabelledItem

  1. LabelledItem'in call argümanıyla HasCallInTailPosition değerini döndür.

ReturnStatement ReturnStatement : return Expression ;

  1. Expression'in call argümanıyla HasCallInTailPosition değerini döndür.

SwitchStatement SwitchStatement : switch ( Expression ) CaseBlock

  1. CaseBlock'un call argümanıyla HasCallInTailPosition değerini döndür.

CaseBlock CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt }

  1. has false olsun.

  2. İlk CaseClauses mevcutsa, has değerini ilk CaseClauses'un call argümanıyla HasCallInTailPosition değeri olarak ayarla.

  3. has true ise, true döndür.

  4. has değerini DefaultClause'un call argümanıyla HasCallInTailPosition değeri olarak ayarla.

  5. has true ise, true döndür.

  6. İkinci CaseClauses mevcutsa, has değerini ikinci CaseClauses'un call argümanıyla HasCallInTailPosition değeri olarak ayarla.

  7. has döndür.

CaseClauses CaseClauses : CaseClauses CaseClause

  1. has, CaseClauses'un call argümanıyla HasCallInTailPosition değeri olsun.

  2. has true ise, true döndür.

  3. CaseClause'un call argümanıyla HasCallInTailPosition değerini döndür.

CaseClause CaseClause : case Expression : StatementListopt

DefaultClause DefaultClause : default : StatementListopt

  1. StatementList mevcutsa, StatementList'in call argümanıyla HasCallInTailPosition değerini döndür.

  2. false döndür.

TryStatement TryStatement : try Block Catch

  1. Catch'in call argümanıyla HasCallInTailPosition değerini döndür.

TryStatement TryStatement : try Block Finally try Block Catch Finally

  1. Finally'nin call argümanıyla HasCallInTailPosition değerini döndür.

Catch Catch : catch ( CatchParameter ) Block

  1. Block'un call argümanıyla HasCallInTailPosition değerini döndür.

AssignmentExpression AssignmentExpression : YieldExpression ArrowFunction AsyncArrowFunction LeftHandSideExpression = AssignmentExpression LeftHandSideExpression AssignmentOperator AssignmentExpression LeftHandSideExpression &&= AssignmentExpression LeftHandSideExpression ||= AssignmentExpression LeftHandSideExpression ??= AssignmentExpression

BitwiseANDExpression BitwiseANDExpression : BitwiseANDExpression & EqualityExpression

BitwiseXORExpression BitwiseXORExpression : BitwiseXORExpression ^ BitwiseANDExpression

BitwiseORExpression BitwiseORExpression : BitwiseORExpression | BitwiseXORExpression

EqualityExpression EqualityExpression : EqualityExpression == RelationalExpression EqualityExpression != RelationalExpression EqualityExpression === RelationalExpression EqualityExpression !== RelationalExpression

RelationalExpression RelationalExpression : RelationalExpression <** *ShiftExpression* *RelationalExpression* **> ShiftExpression RelationalExpression <=** *ShiftExpression* *RelationalExpression* **>= ShiftExpression RelationalExpression instanceof ShiftExpression RelationalExpression in ShiftExpression PrivateIdentifier in ShiftExpression

ShiftExpression ShiftExpression : ShiftExpression <<** *AdditiveExpression* *ShiftExpression* **>> AdditiveExpression ShiftExpression >>> AdditiveExpression

AdditiveExpression AdditiveExpression : AdditiveExpression + MultiplicativeExpression AdditiveExpression - MultiplicativeExpression

MultiplicativeExpression MultiplicativeExpression : MultiplicativeExpression MultiplicativeOperator ExponentiationExpression

ExponentiationExpression ExponentiationExpression : UpdateExpression ****** ExponentiationExpression

UpdateExpression UpdateExpression : LeftHandSideExpression ++ LeftHandSideExpression -- ++ UnaryExpression -- UnaryExpression

UnaryExpression UnaryExpression : delete UnaryExpression void UnaryExpression typeof UnaryExpression + UnaryExpression - UnaryExpression ~ UnaryExpression ! UnaryExpression AwaitExpression

CallExpression CallExpression : SuperCall ImportCall CallExpression [ Expression ] CallExpression . IdentifierName CallExpression . PrivateIdentifier

NewExpression NewExpression : new NewExpression

MemberExpression MemberExpression : MemberExpression [ Expression ] MemberExpression . IdentifierName SuperProperty MetaProperty new MemberExpression Arguments MemberExpression . PrivateIdentifier

PrimaryExpression PrimaryExpression : this IdentifierReference Literal ArrayLiteral ObjectLiteral FunctionExpression ClassExpression GeneratorExpression AsyncFunctionExpression AsyncGeneratorExpression RegularExpressionLiteral TemplateLiteral

  1. false döndür.

Expression Expression : AssignmentExpression Expression , AssignmentExpression

  1. AssignmentExpression'ın call argümanıyla HasCallInTailPosition değerini döndür.

ConditionalExpression ConditionalExpression : ShortCircuitExpression ? AssignmentExpression : AssignmentExpression

  1. has, ilk AssignmentExpression'ın call argümanıyla HasCallInTailPosition değeri olsun.

  2. has true ise, true döndür.

  3. İkinci AssignmentExpression'ın call argümanıyla HasCallInTailPosition değerini döndür.

LogicalANDExpression LogicalANDExpression : LogicalANDExpression && BitwiseORExpression

  1. BitwiseORExpression'ın call argümanıyla HasCallInTailPosition değerini döndür.

LogicalORExpression LogicalORExpression : LogicalORExpression || LogicalANDExpression

  1. LogicalANDExpression'ın call argümanıyla HasCallInTailPosition değerini döndür.

CoalesceExpression CoalesceExpression : CoalesceExpressionHead ?? BitwiseORExpression

  1. BitwiseORExpression'ın call argümanıyla HasCallInTailPosition değerini döndür.

CallExpression CallExpression : CoverCallExpressionAndAsyncArrowHead CallExpression Arguments CallExpression TemplateLiteral

  1. Bu CallExpression call ise, true döndür.

  2. false döndür.

OptionalExpression OptionalExpression : MemberExpression OptionalChain CallExpression OptionalChain OptionalExpression OptionalChain

  1. OptionalChain'in call argümanıyla HasCallInTailPosition değerini döndür.

OptionalChain OptionalChain : ?. [ Expression ] ?. IdentifierName ?. PrivateIdentifier OptionalChain [ Expression ] OptionalChain . IdentifierName OptionalChain . PrivateIdentifier

  1. false döndür.

OptionalChain OptionalChain : ?. Arguments OptionalChain Arguments

  1. Bu OptionalChain call ise, true döndür.

  2. false döndür.

MemberExpression MemberExpression : MemberExpression TemplateLiteral

  1. Bu MemberExpression call ise, true döndür.

  2. false döndür.

PrimaryExpression PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList

  1. expr, CoverParenthesizedExpressionAndArrowParameterList tarafından kapsanan ParenthesizedExpression olsun.

  2. expr'in call argümanıyla HasCallInTailPosition değerini döndür.

ParenthesizedExpression ParenthesizedExpression : ( Expression )

  1. Expression'in call argümanıyla HasCallInTailPosition değerini döndür.

15.10.3 PrepareForTailCall ( )

Soyut işlem PrepareForTailCall hiçbir argüman almaz ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: Mevcut yürütme bağlamı (execution context) daha sonra herhangi bir ECMAScript kodunun veya yerleşik işlevin değerlendirilmesi için kullanılmayacaktır. Bu soyut işlemin çağrılmasının ardından gelen Call çağrısı, bu tür bir değerlendirmeyi gerçekleştirmeden önce yeni bir yürütme bağlamı oluşturup yığına itecektir (push).

  2. Mevcut yürütme bağlamıyla ilişkili tüm kaynakları at.

  3. unused döndür.

Bir kuyruk konumu çağrısı, hedef işlevi çağırmadan önce ya şu anda yürütülmekte olan işlev yürütme bağlamıyla ilişkili tüm geçici iç kaynakları serbest bırakmalı ya da hedef işlevi desteklemek için bu kaynakları yeniden kullanmalıdır.