From a3a9551b5244a5d82aba32fb469a73b32564e7e3 Mon Sep 17 00:00:00 2001 From: Kevin Gibbons Date: Mon, 23 Mar 2020 22:12:04 -0700 Subject: [PATCH] Editorial: unify the wording used to introduce abstract operations (#1914) The intent is that the new wording should provide all and only the information in the current wording (except in a couple cases where the existing wording is obviously wrong) --- spec.html | 692 +++++++++++++++++++++++++++--------------------------- 1 file changed, 346 insertions(+), 346 deletions(-) diff --git a/spec.html b/spec.html index 02323c6b64..06b29f8e38 100644 --- a/spec.html +++ b/spec.html @@ -1751,6 +1751,7 @@

Number::sameValueZero ( _x_, _y_ )

NumberBitwiseOp ( _op_, _x_, _y_ )

+

The abstract operation NumberBitwiseOp takes arguments _op_, _x_, and _y_. It performs the following steps when called:

1. Let _lnum_ be ! ToInt32(_x_). 1. Let _rnum_ be ! ToUint32(_y_). @@ -1962,6 +1963,7 @@

BigInt::sameValueZero ( _x_, _y_ )

BinaryAnd ( _x_, _y_ )

+

The abstract operation BinaryAnd takes arguments _x_ and _y_. It performs the following steps when called:

1. Assert: _x_ is 0 or 1. 1. Assert: _y_ is 0 or 1. @@ -1972,6 +1974,7 @@

BinaryAnd ( _x_, _y_ )

BinaryOr ( _x_, _y_ )

+

The abstract operation BinaryOr takes arguments _x_ and _y_. It performs the following steps when called:

1. Assert: _x_ is 0 or 1. 1. Assert: _y_ is 0 or 1. @@ -1982,6 +1985,7 @@

BinaryOr ( _x_, _y_ )

BinaryXor ( _x_, _y_ )

+

The abstract operation BinaryXor takes arguments _x_ and _y_. It performs the following steps when called:

1. Assert: _x_ is 0 or 1. 1. Assert: _y_ is 0 or 1. @@ -1993,6 +1997,7 @@

BinaryXor ( _x_, _y_ )

BigIntBitwiseOp ( _op_, _x_, _y_ )

+

The abstract operation BigIntBitwiseOp takes arguments _op_, _x_, and _y_. It performs the following steps when called:

1. Assert: _op_ is *"&"*, *"|"*, or *"^"*. 1. Let _result_ be *0n*. @@ -4069,11 +4074,10 @@

Await

Await Fulfilled Functions

-

An Await fulfilled function is an anonymous built-in function that is used as part of the Await specification device to deliver the promise fulfillment value to the caller as a normal completion. Each Await fulfilled function has an [[AsyncContext]] internal slot.

-

When an Await fulfilled function is called with argument _value_, the following steps are taken:

+ 1. Let _F_ be the active function object. 1. Let _asyncContext_ be _F_.[[AsyncContext]]. @@ -4090,11 +4094,10 @@

Await Fulfilled Functions

Await Rejected Functions

-

An Await rejected function is an anonymous built-in function that is used as part of the Await specification device to deliver the promise rejection reason to the caller as an abrupt throw completion. Each Await rejected function has an [[AsyncContext]] internal slot.

-

When an Await rejected function is called with argument _reason_, the following steps are taken:

+ 1. Let _F_ be the active function object. 1. Let _asyncContext_ be _F_.[[AsyncContext]]. @@ -4136,7 +4139,7 @@

ThrowCompletion

UpdateEmpty ( _completionRecord_, _value_ )

-

The abstract operation UpdateEmpty with arguments _completionRecord_ and _value_ performs the following steps:

+

The abstract operation UpdateEmpty takes arguments _completionRecord_ and _value_. It performs the following steps when called:

1. Assert: If _completionRecord_.[[Type]] is either ~return~ or ~throw~, then _completionRecord_.[[Value]] is not ~empty~. 1. If _completionRecord_.[[Value]] is not ~empty~, return Completion(_completionRecord_). @@ -4156,6 +4159,7 @@

The Reference Specification Type

GetBase ( _V_ )

+

The abstract operation GetBase takes argument _V_. It performs the following steps when called:

1. Assert: Type(_V_) is Reference. 1. Return the base value component of _V_. @@ -4164,6 +4168,7 @@

GetBase ( _V_ )

GetReferencedName ( _V_ )

+

The abstract operation GetReferencedName takes argument _V_. It performs the following steps when called:

1. Assert: Type(_V_) is Reference. 1. Return the referenced name component of _V_. @@ -4172,6 +4177,7 @@

GetReferencedName ( _V_ )

IsStrictReference ( _V_ )

+

The abstract operation IsStrictReference takes argument _V_. It performs the following steps when called:

1. Assert: Type(_V_) is Reference. 1. Return the strict reference flag of _V_. @@ -4180,6 +4186,7 @@

IsStrictReference ( _V_ )

HasPrimitiveBase ( _V_ )

+

The abstract operation HasPrimitiveBase takes argument _V_. It performs the following steps when called:

1. Assert: Type(_V_) is Reference. 1. If Type(_V_'s base value component) is Boolean, String, Symbol, BigInt, or Number, return *true*; otherwise return *false*. @@ -4188,6 +4195,7 @@

HasPrimitiveBase ( _V_ )

IsPropertyReference ( _V_ )

+

The abstract operation IsPropertyReference takes argument _V_. It performs the following steps when called:

1. Assert: Type(_V_) is Reference. 1. If either the base value component of _V_ is an Object or HasPrimitiveBase(_V_) is *true*, return *true*; otherwise return *false*. @@ -4196,6 +4204,7 @@

IsPropertyReference ( _V_ )

IsUnresolvableReference ( _V_ )

+

The abstract operation IsUnresolvableReference takes argument _V_. It performs the following steps when called:

1. Assert: Type(_V_) is Reference. 1. If the base value component of _V_ is *undefined*, return *true*; otherwise return *false*. @@ -4204,6 +4213,7 @@

IsUnresolvableReference ( _V_ )

IsSuperReference ( _V_ )

+

The abstract operation IsSuperReference takes argument _V_. It performs the following steps when called:

1. Assert: Type(_V_) is Reference. 1. If _V_ has a thisValue component, return *true*; otherwise return *false*. @@ -4212,6 +4222,7 @@

IsSuperReference ( _V_ )

GetValue ( _V_ )

+

The abstract operation GetValue takes argument _V_. It performs the following steps when called:

1. ReturnIfAbrupt(_V_). 1. If Type(_V_) is not Reference, return _V_. @@ -4233,6 +4244,7 @@

GetValue ( _V_ )

PutValue ( _V_, _W_ )

+

The abstract operation PutValue takes arguments _V_ and _W_. It performs the following steps when called:

1. ReturnIfAbrupt(_V_). 1. ReturnIfAbrupt(_W_). @@ -4261,6 +4273,7 @@

PutValue ( _V_, _W_ )

GetThisValue ( _V_ )

+

The abstract operation GetThisValue takes argument _V_. It performs the following steps when called:

1. Assert: IsPropertyReference(_V_) is *true*. 1. If IsSuperReference(_V_) is *true*, then @@ -4271,6 +4284,7 @@

GetThisValue ( _V_ )

InitializeReferencedBinding ( _V_, _W_ )

+

The abstract operation InitializeReferencedBinding takes arguments _V_ and _W_. It performs the following steps when called:

1. ReturnIfAbrupt(_V_). 1. ReturnIfAbrupt(_W_). @@ -4291,7 +4305,7 @@

The Property Descriptor Specification Type

IsAccessorDescriptor ( _Desc_ )

-

When the abstract operation IsAccessorDescriptor is called with Property Descriptor _Desc_, the following steps are taken:

+

The abstract operation IsAccessorDescriptor takes argument _Desc_ (a Property Descriptor or *undefined*). It performs the following steps when called:

1. If _Desc_ is *undefined*, return *false*. 1. If both _Desc_.[[Get]] and _Desc_.[[Set]] are absent, return *false*. @@ -4301,7 +4315,7 @@

IsAccessorDescriptor ( _Desc_ )

IsDataDescriptor ( _Desc_ )

-

When the abstract operation IsDataDescriptor is called with Property Descriptor _Desc_, the following steps are taken:

+

The abstract operation IsDataDescriptor takes argument _Desc_ (a Property Descriptor or *undefined*). It performs the following steps when called:

1. If _Desc_ is *undefined*, return *false*. 1. If both _Desc_.[[Value]] and _Desc_.[[Writable]] are absent, return *false*. @@ -4311,7 +4325,7 @@

IsDataDescriptor ( _Desc_ )

IsGenericDescriptor ( _Desc_ )

-

When the abstract operation IsGenericDescriptor is called with Property Descriptor _Desc_, the following steps are taken:

+

The abstract operation IsGenericDescriptor takes argument _Desc_ (a Property Descriptor or *undefined*). It performs the following steps when called:

1. If _Desc_ is *undefined*, return *false*. 1. If IsAccessorDescriptor(_Desc_) and IsDataDescriptor(_Desc_) are both *false*, return *true*. @@ -4321,7 +4335,7 @@

IsGenericDescriptor ( _Desc_ )

FromPropertyDescriptor ( _Desc_ )

-

When the abstract operation FromPropertyDescriptor is called with Property Descriptor _Desc_, the following steps are taken:

+

The abstract operation FromPropertyDescriptor takes argument _Desc_ (a Property Descriptor or *undefined*). It performs the following steps when called:

1. If _Desc_ is *undefined*, return *undefined*. 1. Let _obj_ be OrdinaryObjectCreate(%Object.prototype%). @@ -4344,7 +4358,7 @@

FromPropertyDescriptor ( _Desc_ )

ToPropertyDescriptor ( _Obj_ )

-

When the abstract operation ToPropertyDescriptor is called with object _Obj_, the following steps are taken:

+

The abstract operation ToPropertyDescriptor takes argument _Obj_. It performs the following steps when called:

1. If Type(_Obj_) is not Object, throw a *TypeError* exception. 1. Let _desc_ be a new Property Descriptor that initially has no fields. @@ -4382,7 +4396,7 @@

ToPropertyDescriptor ( _Obj_ )

CompletePropertyDescriptor ( _Desc_ )

-

When the abstract operation CompletePropertyDescriptor is called with Property Descriptor _Desc_, the following steps are taken:

+

The abstract operation CompletePropertyDescriptor takes argument _Desc_ (a Property Descriptor). It performs the following steps when called:

1. Assert: _Desc_ is a Property Descriptor. 1. Let _like_ be the Record { [[Value]]: *undefined*, [[Writable]]: *false*, [[Get]]: *undefined*, [[Set]]: *undefined*, [[Enumerable]]: *false*, [[Configurable]]: *false* }. @@ -4430,7 +4444,7 @@

Data Blocks

CreateByteDataBlock ( _size_ )

-

When the abstract operation CreateByteDataBlock is called with integer argument _size_, the following steps are taken:

+

The abstract operation CreateByteDataBlock takes argument _size_ (an integer). It performs the following steps when called:

1. Assert: _size_ ≥ 0. 1. Let _db_ be a new Data Block value consisting of _size_ bytes. If it is impossible to create such a Data Block, throw a *RangeError* exception. @@ -4441,7 +4455,7 @@

CreateByteDataBlock ( _size_ )

CreateSharedByteDataBlock ( _size_ )

-

When the abstract operation CreateSharedByteDataBlock is called with integer argument _size_, the following steps are taken:

+

The abstract operation CreateSharedByteDataBlock takes argument _size_ (an integer). It performs the following steps when called:

1. Assert: _size_ ≥ 0. 1. Let _db_ be a new Shared Data Block value consisting of _size_ bytes. If it is impossible to create such a Shared Data Block, throw a *RangeError* exception. @@ -4456,7 +4470,7 @@

CreateSharedByteDataBlock ( _size_ )

CopyDataBlockBytes ( _toBlock_, _toIndex_, _fromBlock_, _fromIndex_, _count_ )

-

When the abstract operation CopyDataBlockBytes is called, the following steps are taken:

+

The abstract operation CopyDataBlockBytes takes arguments _toBlock_, _toIndex_, _fromBlock_, _fromIndex_, and _count_. It performs the following steps when called:

1. Assert: _fromBlock_ and _toBlock_ are distinct Data Block or Shared Data Block values. 1. Assert: _fromIndex_, _toIndex_, and _count_ are integer values ≥ 0. @@ -4501,7 +4515,7 @@

Type Conversion

ToPrimitive ( _input_ [ , _PreferredType_ ] )

-

The abstract operation ToPrimitive takes an _input_ argument and an optional argument _PreferredType_. The abstract operation ToPrimitive converts its _input_ argument to a non-Object type. If an object is capable of converting to more than one primitive type, it may use the optional hint _PreferredType_ to favour that type. Conversion occurs according to the following algorithm:

+

The abstract operation ToPrimitive takes argument _input_ and optional argument _PreferredType_. It converts its _input_ argument to a non-Object type. If an object is capable of converting to more than one primitive type, it may use the optional hint _PreferredType_ to favour that type. It performs the following steps when called:

1. Assert: _input_ is an ECMAScript language value. 1. If Type(_input_) is Object, then @@ -4525,7 +4539,7 @@

ToPrimitive ( _input_ [ , _PreferredType_ ] )

OrdinaryToPrimitive ( _O_, _hint_ )

-

When the abstract operation OrdinaryToPrimitive is called with arguments _O_ and _hint_, the following steps are taken:

+

The abstract operation OrdinaryToPrimitive takes arguments _O_ and _hint_. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: Type(_hint_) is String and its value is either *"string"* or *"number"*. @@ -4545,7 +4559,7 @@

OrdinaryToPrimitive ( _O_, _hint_ )

ToBoolean ( _argument_ )

-

The abstract operation ToBoolean converts _argument_ to a value of type Boolean according to :

+

The abstract operation ToBoolean takes argument _argument_. It converts _argument_ to a value of type Boolean according to :

@@ -4628,7 +4642,7 @@

ToBoolean ( _argument_ )

ToNumeric ( _value_ )

-

The abstract operation ToNumeric returns _value_ converted to a numeric value of type Number or BigInt. This abstract operation functions as follows:

+

The abstract operation ToNumeric takes argument _value_. It returns _value_ converted to a numeric value of type Number or BigInt. It performs the following steps when called:

1. Let _primValue_ be ? ToPrimitive(_value_, hint Number). 1. If Type(_primValue_) is BigInt, return _primValue_. @@ -4638,7 +4652,7 @@

ToNumeric ( _value_ )

ToNumber ( _argument_ )

-

The abstract operation ToNumber converts _argument_ to a value of type Number according to :

+

The abstract operation ToNumber takes argument _argument_. It converts _argument_ to a value of type Number according to :

@@ -4852,7 +4866,7 @@

Runtime Semantics: MV

ToInteger ( _argument_ )

-

The abstract operation ToInteger converts _argument_ to an integral Number value. This abstract operation functions as follows:

+

The abstract operation ToInteger takes argument _argument_. It converts _argument_ to an integral Number value. It performs the following steps when called:

1. Let _number_ be ? ToNumber(_argument_). 1. If _number_ is *NaN*, *+0*, or *-0*, return *+0*. @@ -4865,7 +4879,7 @@

ToInteger ( _argument_ )

ToInt32 ( _argument_ )

-

The abstract operation ToInt32 converts _argument_ to one of 232 integer values in the range -231 through 231 - 1, inclusive. This abstract operation functions as follows:

+

The abstract operation ToInt32 takes argument _argument_. It converts _argument_ to one of 232 integer values in the range -231 through 231 - 1, inclusive. It performs the following steps when called:

1. Let _number_ be ? ToNumber(_argument_). 1. If _number_ is *NaN*, *+0*, *-0*, *+∞*, or *-∞*, return *+0*. @@ -4891,7 +4905,7 @@

ToInt32 ( _argument_ )

ToUint32 ( _argument_ )

-

The abstract operation ToUint32 converts _argument_ to one of 232 integer values in the range 0 through 232 - 1, inclusive. This abstract operation functions as follows:

+

The abstract operation ToUint32 takes argument _argument_. It converts _argument_ to one of 232 integer values in the range 0 through 232 - 1, inclusive. It performs the following steps when called:

1. Let _number_ be ? ToNumber(_argument_). 1. If _number_ is *NaN*, *+0*, *-0*, *+∞*, or *-∞*, return *+0*. @@ -4920,7 +4934,7 @@

ToUint32 ( _argument_ )

ToInt16 ( _argument_ )

-

The abstract operation ToInt16 converts _argument_ to one of 216 integer values in the range -32768 through 32767, inclusive. This abstract operation functions as follows:

+

The abstract operation ToInt16 takes argument _argument_. It converts _argument_ to one of 216 integer values in the range -32768 through 32767, inclusive. It performs the following steps when called:

1. Let _number_ be ? ToNumber(_argument_). 1. If _number_ is *NaN*, *+0*, *-0*, *+∞*, or *-∞*, return *+0*. @@ -4932,7 +4946,7 @@

ToInt16 ( _argument_ )

ToUint16 ( _argument_ )

-

The abstract operation ToUint16 converts _argument_ to one of 216 integer values in the range 0 through 216 - 1, inclusive. This abstract operation functions as follows:

+

The abstract operation ToUint16 takes argument _argument_. It converts _argument_ to one of 216 integer values in the range 0 through 216 - 1, inclusive. It performs the following steps when called:

1. Let _number_ be ? ToNumber(_argument_). 1. If _number_ is *NaN*, *+0*, *-0*, *+∞*, or *-∞*, return *+0*. @@ -4955,7 +4969,7 @@

ToUint16 ( _argument_ )

ToInt8 ( _argument_ )

-

The abstract operation ToInt8 converts _argument_ to one of 28 integer values in the range -128 through 127, inclusive. This abstract operation functions as follows:

+

The abstract operation ToInt8 takes argument _argument_. It converts _argument_ to one of 28 integer values in the range -128 through 127, inclusive. It performs the following steps when called:

1. Let _number_ be ? ToNumber(_argument_). 1. If _number_ is *NaN*, *+0*, *-0*, *+∞*, or *-∞*, return *+0*. @@ -4967,7 +4981,7 @@

ToInt8 ( _argument_ )

ToUint8 ( _argument_ )

-

The abstract operation ToUint8 converts _argument_ to one of 28 integer values in the range 0 through 255, inclusive. This abstract operation functions as follows:

+

The abstract operation ToUint8 takes argument _argument_. It converts _argument_ to one of 28 integer values in the range 0 through 255, inclusive. It performs the following steps when called:

1. Let _number_ be ? ToNumber(_argument_). 1. If _number_ is *NaN*, *+0*, *-0*, *+∞*, or *-∞*, return *+0*. @@ -4979,7 +4993,7 @@

ToUint8 ( _argument_ )

ToUint8Clamp ( _argument_ )

-

The abstract operation ToUint8Clamp converts _argument_ to one of 28 integer values in the range 0 through 255, inclusive. This abstract operation functions as follows:

+

The abstract operation ToUint8Clamp takes argument _argument_. It converts _argument_ to one of 28 integer values in the range 0 through 255, inclusive. It performs the following steps when called:

1. Let _number_ be ? ToNumber(_argument_). 1. If _number_ is *NaN*, return *+0*. @@ -4998,7 +5012,7 @@

ToUint8Clamp ( _argument_ )

ToBigInt ( _argument_ )

-

The abstract operation ToBigInt converts its argument _argument_ to a BigInt value, or throws if an implicit conversion from Number would be required.

+

The abstract operation ToBigInt takes argument _argument_. It converts _argument_ to a BigInt value, or throws if an implicit conversion from Number would be required. It performs the following steps when called:

1. Let _prim_ be ? ToPrimitive(_argument_, hint Number). 1. Return the value that _prim_ corresponds to in . @@ -5090,7 +5104,7 @@

StringToBigInt ( _argument_ )

ToBigInt64 ( _argument_ )

-

The abstract operation ToBigInt64 converts _argument_ to one of 264 integer values in the range -263 through 263-1, inclusive. This abstract operation functions as follows:

+

The abstract operation ToBigInt64 takes argument _argument_. It converts _argument_ to one of 264 integer values in the range -263 through 263-1, inclusive. It performs the following steps when called:

1. Let _n_ be ? ToBigInt(_argument_). 1. Let _int64bit_ be _n_ modulo 264. @@ -5100,7 +5114,7 @@

ToBigInt64 ( _argument_ )

ToBigUint64 ( _argument_ )

-

The abstract operation ToBigUint64 converts _argument_ to one of 264 integer values in the range 0 through 264-1, inclusive. This abstract operation functions as follows:

+

The abstract operation ToBigUint64 takes argument _argument_. It converts _argument_ to one of 264 integer values in the range 0 through 264-1, inclusive. It performs the following steps when called:

1. Let _n_ be ? ToBigInt(_argument_). 1. Let _int64bit_ be _n_ modulo 264. @@ -5110,7 +5124,7 @@

ToBigUint64 ( _argument_ )

ToString ( _argument_ )

-

The abstract operation ToString converts _argument_ to a value of type String according to :

+

The abstract operation ToString takes argument _argument_. It converts _argument_ to a value of type String according to :

@@ -5198,7 +5212,7 @@

ToString ( _argument_ )

ToObject ( _argument_ )

-

The abstract operation ToObject converts _argument_ to a value of type Object according to :

+

The abstract operation ToObject takes argument _argument_. It converts _argument_ to a value of type Object according to :

@@ -5281,7 +5295,7 @@

ToObject ( _argument_ )

ToPropertyKey ( _argument_ )

-

The abstract operation ToPropertyKey converts _argument_ to a value that can be used as a property key by performing the following steps:

+

The abstract operation ToPropertyKey takes argument _argument_. It converts _argument_ to a value that can be used as a property key. It performs the following steps when called:

1. Let _key_ be ? ToPrimitive(_argument_, hint String). 1. If Type(_key_) is Symbol, then @@ -5292,7 +5306,7 @@

ToPropertyKey ( _argument_ )

ToLength ( _argument_ )

-

The abstract operation ToLength converts _argument_ to an integer suitable for use as the length of an array-like object. It performs the following steps:

+

The abstract operation ToLength takes argument _argument_. It converts _argument_ to an integer suitable for use as the length of an array-like object. It performs the following steps when called:

1. Let _len_ be ? ToInteger(_argument_). 1. If _len_ ≤ *+0*, return *+0*. @@ -5302,7 +5316,7 @@

ToLength ( _argument_ )

CanonicalNumericIndexString ( _argument_ )

-

The abstract operation CanonicalNumericIndexString returns _argument_ converted to a Number value if it is a String representation of a Number that would be produced by ToString, or the string *"-0"*. Otherwise, it returns *undefined*. This abstract operation functions as follows:

+

The abstract operation CanonicalNumericIndexString takes argument _argument_. It returns _argument_ converted to a Number value if it is a String representation of a Number that would be produced by ToString, or the string *"-0"*. Otherwise, it returns *undefined*. It performs the following steps when called:

1. Assert: Type(_argument_) is String. 1. If _argument_ is *"-0"*, return *-0*. @@ -5315,7 +5329,7 @@

CanonicalNumericIndexString ( _argument_ )

ToIndex ( _value_ )

-

The abstract operation ToIndex returns _value_ argument converted to a non-negative integer if it is a valid integer index value. This abstract operation functions as follows:

+

The abstract operation ToIndex takes argument _value_. It returns _value_ argument converted to a non-negative integer if it is a valid integer index value. It performs the following steps when called:

1. If _value_ is *undefined*, then 1. Let _index_ be 0. @@ -5334,7 +5348,7 @@

Testing and Comparison Operations

RequireObjectCoercible ( _argument_ )

-

The abstract operation RequireObjectCoercible throws an error if _argument_ is a value that cannot be converted to an Object using ToObject. It is defined by :

+

The abstract operation RequireObjectCoercible takes argument _argument_. It throws an error if _argument_ is a value that cannot be converted to an Object using ToObject. It is defined by :

@@ -5417,7 +5431,7 @@

RequireObjectCoercible ( _argument_ )

IsArray ( _argument_ )

-

The abstract operation IsArray takes one argument _argument_, and performs the following steps:

+

The abstract operation IsArray takes argument _argument_. It performs the following steps when called:

1. If Type(_argument_) is not Object, return *false*. 1. If _argument_ is an Array exotic object, return *true*. @@ -5431,7 +5445,7 @@

IsArray ( _argument_ )

IsCallable ( _argument_ )

-

The abstract operation IsCallable determines if _argument_, which must be an ECMAScript language value, is a callable function with a [[Call]] internal method.

+

The abstract operation IsCallable takes argument _argument_ (an ECMAScript language value). It determines if _argument_ is a callable function with a [[Call]] internal method. It performs the following steps when called:

1. If Type(_argument_) is not Object, return *false*. 1. If _argument_ has a [[Call]] internal method, return *true*. @@ -5441,7 +5455,7 @@

IsCallable ( _argument_ )

IsConstructor ( _argument_ )

-

The abstract operation IsConstructor determines if _argument_, which must be an ECMAScript language value, is a function object with a [[Construct]] internal method.

+

The abstract operation IsConstructor takes argument _argument_ (an ECMAScript language value). It determines if _argument_ is a function object with a [[Construct]] internal method. It performs the following steps when called:

1. If Type(_argument_) is not Object, return *false*. 1. If _argument_ has a [[Construct]] internal method, return *true*. @@ -5451,7 +5465,7 @@

IsConstructor ( _argument_ )

IsExtensible ( _O_ )

-

The abstract operation IsExtensible is used to determine whether additional properties can be added to the object that is _O_. A Boolean value is returned. This abstract operation performs the following steps:

+

The abstract operation IsExtensible takes argument _O_ (an Object) and returns a completion record which, if its [[Type]] is ~normal~, has a [[Value]] which is a Boolean. It is used to determine whether additional properties can be added to _O_. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Return ? _O_.[[IsExtensible]](). @@ -5460,7 +5474,7 @@

IsExtensible ( _O_ )

IsInteger ( _argument_ )

-

The abstract operation IsInteger determines if _argument_ is a finite integer Number value.

+

The abstract operation IsInteger takes argument _argument_. It determines if _argument_ is a finite integer Number value. It performs the following steps when called:

1. If Type(_argument_) is not Number, return *false*. 1. If _argument_ is *NaN*, *+∞*, or *-∞*, return *false*. @@ -5471,7 +5485,7 @@

IsInteger ( _argument_ )

IsNonNegativeInteger ( _argument_ )

-

The abstract operation IsNonNegativeInteger determines if _argument_ is non-negative integer Number value.

+

The abstract operation IsNonNegativeInteger takes argument _argument_. It determines if _argument_ is a non-negative integer Number value. It performs the following steps when called:

1. If ! IsInteger(_argument_) is *true* and _argument_ ≥ 0, return *true*. 1. Otherwise, return *false*. @@ -5480,7 +5494,7 @@

IsNonNegativeInteger ( _argument_ )

IsPropertyKey ( _argument_ )

-

The abstract operation IsPropertyKey determines if _argument_, which must be an ECMAScript language value, is a value that may be used as a property key.

+

The abstract operation IsPropertyKey takes argument _argument_ (an ECMAScript language value). It determines if _argument_ is a value that may be used as a property key. It performs the following steps when called:

1. If Type(_argument_) is String, return *true*. 1. If Type(_argument_) is Symbol, return *true*. @@ -5490,7 +5504,7 @@

IsPropertyKey ( _argument_ )

IsRegExp ( _argument_ )

-

The abstract operation IsRegExp with argument _argument_ performs the following steps:

+

The abstract operation IsRegExp takes argument _argument_. It performs the following steps when called:

1. If Type(_argument_) is not Object, return *false*. 1. Let _matcher_ be ? Get(_argument_, @@match). @@ -5502,7 +5516,7 @@

IsRegExp ( _argument_ )

IsStringPrefix ( _p_, _q_ )

-

The abstract operation IsStringPrefix determines if String _p_ is a prefix of String _q_.

+

The abstract operation IsStringPrefix takes arguments _p_ (a String) and _q_ (a String). It determines if _p_ is a prefix of _q_. It performs the following steps when called:

1. Assert: Type(_p_) is String. 1. Assert: Type(_q_) is String. @@ -5515,7 +5529,7 @@

IsStringPrefix ( _p_, _q_ )

SameValue ( _x_, _y_ )

-

The internal comparison abstract operation SameValue(_x_, _y_), where _x_ and _y_ are ECMAScript language values, produces *true* or *false*. Such a comparison is performed as follows:

+

The abstract operation SameValue takes arguments _x_ (an ECMAScript language value) and _y_ (an ECMAScript language value) and returns a completion record whose [[Type]] is ~normal~ and whose [[Value]] is a Boolean. It performs the following steps when called:

1. If Type(_x_) is different from Type(_y_), return *false*. 1. If Type(_x_) is Number or BigInt, then @@ -5529,7 +5543,7 @@

SameValue ( _x_, _y_ )

SameValueZero ( _x_, _y_ )

-

The internal comparison abstract operation SameValueZero(_x_, _y_), where _x_ and _y_ are ECMAScript language values, produces *true* or *false*. Such a comparison is performed as follows:

+

The abstract operation SameValueZero takes arguments _x_ (an ECMAScript language value) and _y_ (an ECMAScript language value) and returns a completion record whose [[Type]] is ~normal~ and whose [[Value]] is a Boolean. It performs the following steps when called:

1. If Type(_x_) is different from Type(_y_), return *false*. 1. If Type(_x_) is Number or BigInt, then @@ -5543,7 +5557,7 @@

SameValueZero ( _x_, _y_ )

SameValueNonNumeric ( _x_, _y_ )

-

The internal comparison abstract operation SameValueNonNumeric(_x_, _y_), where neither _x_ nor _y_ are numeric type values, produces *true* or *false*. Such a comparison is performed as follows:

+

The abstract operation SameValueNonNumeric takes arguments _x_ (an ECMAScript language value) and _y_ (an ECMAScript language value) and returns a completion record whose [[Type]] is ~normal~ and whose [[Value]] is a Boolean. It performs the following steps when called:

1. Assert: Type(_x_) is not Number or BigInt. 1. Assert: Type(_x_) is the same as Type(_y_). @@ -5650,7 +5664,7 @@

Operations on Objects

MakeBasicObject ( _internalSlotsList_ )

-

The abstract operation MakeBasicObject is the source of all ECMAScript objects that are created algorithmically, including both ordinary objects and exotic objects. It factors out common steps used in creating all objects, and centralizes object creation.

+

The abstract operation MakeBasicObject takes argument _internalSlotsList_. It is the source of all ECMAScript objects that are created algorithmically, including both ordinary objects and exotic objects. It factors out common steps used in creating all objects, and centralizes object creation. It performs the following steps when called:

1. Assert: _internalSlotsList_ is a List of internal slot names. @@ -5669,7 +5683,7 @@

MakeBasicObject ( _internalSlotsList_ )

Get ( _O_, _P_ )

-

The abstract operation Get is used to retrieve the value of a specific property of an object. The operation is called with arguments _O_ and _P_ where _O_ is the object and _P_ is the property key. This abstract operation performs the following steps:

+

The abstract operation Get takes arguments _O_ (an Object) and _P_ (a property key). It is used to retrieve the value of a specific property of an object. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: IsPropertyKey(_P_) is *true*. @@ -5679,7 +5693,7 @@

Get ( _O_, _P_ )

GetV ( _V_, _P_ )

-

The abstract operation GetV is used to retrieve the value of a specific property of an ECMAScript language value. If the value is not an object, the property lookup is performed using a wrapper object appropriate for the type of the value. The operation is called with arguments _V_ and _P_ where _V_ is the value and _P_ is the property key. This abstract operation performs the following steps:

+

The abstract operation GetV takes arguments _V_ (an ECMAScript language value) and _P_ (a property key). It is used to retrieve the value of a specific property of an ECMAScript language value. If the value is not an object, the property lookup is performed using a wrapper object appropriate for the type of the value. It performs the following steps when called:

1. Assert: IsPropertyKey(_P_) is *true*. 1. Let _O_ be ? ToObject(_V_). @@ -5689,7 +5703,7 @@

GetV ( _V_, _P_ )

Set ( _O_, _P_, _V_, _Throw_ )

-

The abstract operation Set is used to set the value of a specific property of an object. The operation is called with arguments _O_, _P_, _V_, and _Throw_ where _O_ is the object, _P_ is the property key, _V_ is the new value for the property and _Throw_ is a Boolean flag. This abstract operation performs the following steps:

+

The abstract operation Set takes arguments _O_ (an Object), _P_ (a property key), _V_ (an ECMAScript language value), and _Throw_ (a Boolean). It is used to set the value of a specific property of an object. _V_ is the new value for the property. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: IsPropertyKey(_P_) is *true*. @@ -5702,7 +5716,7 @@

Set ( _O_, _P_, _V_, _Throw_ )

CreateDataProperty ( _O_, _P_, _V_ )

-

The abstract operation CreateDataProperty is used to create a new own property of an object. The operation is called with arguments _O_, _P_, and _V_ where _O_ is the object, _P_ is the property key, and _V_ is the value for the property. This abstract operation performs the following steps:

+

The abstract operation CreateDataProperty takes arguments _O_ (an Object), _P_ (a property key), and _V_ (an ECMAScript language value). It is used to create a new own property of an object. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: IsPropertyKey(_P_) is *true*. @@ -5716,7 +5730,7 @@

CreateDataProperty ( _O_, _P_, _V_ )

CreateMethodProperty ( _O_, _P_, _V_ )

-

The abstract operation CreateMethodProperty is used to create a new own property of an object. The operation is called with arguments _O_, _P_, and _V_ where _O_ is the object, _P_ is the property key, and _V_ is the value for the property. This abstract operation performs the following steps:

+

The abstract operation CreateMethodProperty takes arguments _O_ (an Object), _P_ (a property key), and _V_ (an ECMAScript language value). It is used to create a new own property of an object. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: IsPropertyKey(_P_) is *true*. @@ -5730,7 +5744,7 @@

CreateMethodProperty ( _O_, _P_, _V_ )

CreateDataPropertyOrThrow ( _O_, _P_, _V_ )

-

The abstract operation CreateDataPropertyOrThrow is used to create a new own property of an object. It throws a *TypeError* exception if the requested property update cannot be performed. The operation is called with arguments _O_, _P_, and _V_ where _O_ is the object, _P_ is the property key, and _V_ is the value for the property. This abstract operation performs the following steps:

+

The abstract operation CreateDataPropertyOrThrow takes arguments _O_ (an Object), _P_ (a property key), and _V_ (an ECMAScript language value). It is used to create a new own property of an object. It throws a *TypeError* exception if the requested property update cannot be performed. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: IsPropertyKey(_P_) is *true*. @@ -5745,7 +5759,7 @@

CreateDataPropertyOrThrow ( _O_, _P_, _V_ )

DefinePropertyOrThrow ( _O_, _P_, _desc_ )

-

The abstract operation DefinePropertyOrThrow is used to call the [[DefineOwnProperty]] internal method of an object in a manner that will throw a *TypeError* exception if the requested property update cannot be performed. The operation is called with arguments _O_, _P_, and _desc_ where _O_ is the object, _P_ is the property key, and _desc_ is the Property Descriptor for the property. This abstract operation performs the following steps:

+

The abstract operation DefinePropertyOrThrow takes arguments _O_ (an Object), _P_ (a property key), and _desc_ (a Property Descriptor). It is used to call the [[DefineOwnProperty]] internal method of an object in a manner that will throw a *TypeError* exception if the requested property update cannot be performed. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: IsPropertyKey(_P_) is *true*. @@ -5757,7 +5771,7 @@

DefinePropertyOrThrow ( _O_, _P_, _desc_ )

DeletePropertyOrThrow ( _O_, _P_ )

-

The abstract operation DeletePropertyOrThrow is used to remove a specific own property of an object. It throws an exception if the property is not configurable. The operation is called with arguments _O_ and _P_ where _O_ is the object and _P_ is the property key. This abstract operation performs the following steps:

+

The abstract operation DeletePropertyOrThrow takes arguments _O_ (an Object) and _P_ (a property key). It is used to remove a specific own property of an object. It throws an exception if the property is not configurable. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: IsPropertyKey(_P_) is *true*. @@ -5769,7 +5783,7 @@

DeletePropertyOrThrow ( _O_, _P_ )

GetMethod ( _V_, _P_ )

-

The abstract operation GetMethod is used to get the value of a specific property of an ECMAScript language value when the value of the property is expected to be a function. The operation is called with arguments _V_ and _P_ where _V_ is the ECMAScript language value, _P_ is the property key. This abstract operation performs the following steps:

+

The abstract operation GetMethod takes arguments _V_ (an ECMAScript language value) and _P_ (a property key). It is used to get the value of a specific property of an ECMAScript language value when the value of the property is expected to be a function. It performs the following steps when called:

1. Assert: IsPropertyKey(_P_) is *true*. 1. Let _func_ be ? GetV(_V_, _P_). @@ -5781,7 +5795,7 @@

GetMethod ( _V_, _P_ )

HasProperty ( _O_, _P_ )

-

The abstract operation HasProperty is used to determine whether an object has a property with the specified property key. The property may be either an own or inherited. A Boolean value is returned. The operation is called with arguments _O_ and _P_ where _O_ is the object and _P_ is the property key. This abstract operation performs the following steps:

+

The abstract operation HasProperty takes arguments _O_ (an Object) and _P_ (a property key) and returns a completion record which, if its [[Type]] is ~normal~, has a [[Value]] which is a Boolean. It is used to determine whether an object has a property with the specified property key. The property may be either an own or inherited. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: IsPropertyKey(_P_) is *true*. @@ -5791,7 +5805,7 @@

HasProperty ( _O_, _P_ )

HasOwnProperty ( _O_, _P_ )

-

The abstract operation HasOwnProperty is used to determine whether an object has an own property with the specified property key. A Boolean value is returned. The operation is called with arguments _O_ and _P_ where _O_ is the object and _P_ is the property key. This abstract operation performs the following steps:

+

The abstract operation HasOwnProperty takes arguments _O_ (an Object) and _P_ (a property key) and returns a completion record which, if its [[Type]] is ~normal~, has a [[Value]] which is a Boolean. It is used to determine whether an object has an own property with the specified property key. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: IsPropertyKey(_P_) is *true*. @@ -5803,7 +5817,7 @@

HasOwnProperty ( _O_, _P_ )

Call ( _F_, _V_ [ , _argumentsList_ ] )

-

The abstract operation Call is used to call the [[Call]] internal method of a function object. The operation is called with arguments _F_, _V_, and optionally _argumentsList_ where _F_ is the function object, _V_ is an ECMAScript language value that is the *this* value of the [[Call]], and _argumentsList_ is the value passed to the corresponding argument of the internal method. If _argumentsList_ is not present, a new empty List is used as its value. This abstract operation performs the following steps:

+

The abstract operation Call takes arguments _F_ (an ECMAScript language value) and _V_ (an ECMAScript language value) and optional argument _argumentsList_ (a List of ECMAScript language values). It is used to call the [[Call]] internal method of a function object. _F_ is the function object, _V_ is an ECMAScript language value that is the *this* value of the [[Call]], and _argumentsList_ is the value passed to the corresponding argument of the internal method. If _argumentsList_ is not present, a new empty List is used as its value. It performs the following steps when called:

1. If _argumentsList_ is not present, set _argumentsList_ to a new empty List. 1. If IsCallable(_F_) is *false*, throw a *TypeError* exception. @@ -5813,7 +5827,7 @@

Call ( _F_, _V_ [ , _argumentsList_ ] )

Construct ( _F_ [ , _argumentsList_ [ , _newTarget_ ] ] )

-

The abstract operation Construct is used to call the [[Construct]] internal method of a function object. The operation is called with arguments _F_, and optionally _argumentsList_, and _newTarget_ where _F_ is the function object. _argumentsList_ and _newTarget_ are the values to be passed as the corresponding arguments of the internal method. If _argumentsList_ is not present, a new empty List is used as its value. If _newTarget_ is not present, _F_ is used as its value. This abstract operation performs the following steps:

+

The abstract operation Construct takes argument _F_ (a function object) and optional arguments _argumentsList_ and _newTarget_. It is used to call the [[Construct]] internal method of a function object. _argumentsList_ and _newTarget_ are the values to be passed as the corresponding arguments of the internal method. If _argumentsList_ is not present, a new empty List is used as its value. If _newTarget_ is not present, _F_ is used as its value. It performs the following steps when called:

1. If _newTarget_ is not present, set _newTarget_ to _F_. 1. If _argumentsList_ is not present, set _argumentsList_ to a new empty List. @@ -5828,7 +5842,7 @@

Construct ( _F_ [ , _argumentsList_ [ , _newTarget_ ] ] )

SetIntegrityLevel ( _O_, _level_ )

-

The abstract operation SetIntegrityLevel is used to fix the set of own properties of an object. This abstract operation performs the following steps:

+

The abstract operation SetIntegrityLevel takes arguments _O_ and _level_. It is used to fix the set of own properties of an object. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: _level_ is either ~sealed~ or ~frozen~. @@ -5854,7 +5868,7 @@

SetIntegrityLevel ( _O_, _level_ )

TestIntegrityLevel ( _O_, _level_ )

-

The abstract operation TestIntegrityLevel is used to determine if the set of own properties of an object are fixed. This abstract operation performs the following steps:

+

The abstract operation TestIntegrityLevel takes arguments _O_ and _level_. It is used to determine if the set of own properties of an object are fixed. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Assert: _level_ is either ~sealed~ or ~frozen~. @@ -5874,7 +5888,7 @@

TestIntegrityLevel ( _O_, _level_ )

CreateArrayFromList ( _elements_ )

-

The abstract operation CreateArrayFromList is used to create an Array object whose elements are provided by a List. This abstract operation performs the following steps:

+

The abstract operation CreateArrayFromList takes argument _elements_ (a List). It is used to create an Array object whose elements are provided by _elements_. It performs the following steps when called:

1. Assert: _elements_ is a List whose elements are all ECMAScript language values. 1. Let _array_ be ! ArrayCreate(0). @@ -5888,7 +5902,7 @@

CreateArrayFromList ( _elements_ )

LengthOfArrayLike ( _obj_ )

-

The abstract operation LengthOfArrayLike returns the value of the *"length"* property of an array-like object.

+

The abstract operation LengthOfArrayLike takes argument _obj_. It returns the value of the *"length"* property of an array-like object. It performs the following steps when called:

1. Assert: Type(_obj_) is Object. 1. Return ? ToLength(? Get(_obj_, *"length"*)). @@ -5904,7 +5918,7 @@

LengthOfArrayLike ( _obj_ )

CreateListFromArrayLike ( _obj_ [ , _elementTypes_ ] )

-

The abstract operation CreateListFromArrayLike is used to create a List value whose elements are provided by the indexed properties of an array-like object, _obj_. The optional argument _elementTypes_ is a List containing the names of ECMAScript Language Types that are allowed for element values of the List that is created. This abstract operation performs the following steps:

+

The abstract operation CreateListFromArrayLike takes argument _obj_ and optional argument _elementTypes_ (a List of names of ECMAScript Language Types). It is used to create a List value whose elements are provided by the indexed properties of _obj_. _elementTypes_ contains the names of ECMAScript Language Types that are allowed for element values of the List that is created. It performs the following steps when called:

1. If _elementTypes_ is not present, set _elementTypes_ to « Undefined, Null, Boolean, String, Symbol, Number, BigInt, Object ». 1. If Type(_obj_) is not Object, throw a *TypeError* exception. @@ -5923,7 +5937,7 @@

CreateListFromArrayLike ( _obj_ [ , _elementTypes_ ] )

Invoke ( _V_, _P_ [ , _argumentsList_ ] )

-

The abstract operation Invoke is used to call a method property of an ECMAScript language value. The operation is called with arguments _V_, _P_, and optionally _argumentsList_ where _V_ serves as both the lookup point for the property and the *this* value of the call, _P_ is the property key, and _argumentsList_ is the list of arguments values passed to the method. If _argumentsList_ is not present, a new empty List is used as its value. This abstract operation performs the following steps:

+

The abstract operation Invoke takes arguments _V_ (an ECMAScript language value) and _P_ (a property key) and optional argument _argumentsList_ (a List of ECMAScript language values). It is used to call a method property of an ECMAScript language value. _V_ serves as both the lookup point for the property and the *this* value of the call. _argumentsList_ is the list of arguments values passed to the method. If _argumentsList_ is not present, a new empty List is used as its value. It performs the following steps when called:

1. Assert: IsPropertyKey(_P_) is *true*. @@ -5935,7 +5949,7 @@

Invoke ( _V_, _P_ [ , _argumentsList_ ] )

OrdinaryHasInstance ( _C_, _O_ )

-

The abstract operation OrdinaryHasInstance implements the default algorithm for determining if an object _O_ inherits from the instance object inheritance path provided by constructor _C_. This abstract operation performs the following steps:

+

The abstract operation OrdinaryHasInstance takes arguments _C_ (an ECMAScript language value) and _O_. It implements the default algorithm for determining if _O_ inherits from the instance object inheritance path provided by _C_. It performs the following steps when called:

1. If IsCallable(_C_) is *false*, return *false*. 1. If _C_ has a [[BoundTargetFunction]] internal slot, then @@ -5953,7 +5967,7 @@

OrdinaryHasInstance ( _C_, _O_ )

SpeciesConstructor ( _O_, _defaultConstructor_ )

-

The abstract operation SpeciesConstructor is used to retrieve the constructor that should be used to create new objects that are derived from the argument object _O_. The _defaultConstructor_ argument is the constructor to use if a constructor @@species property cannot be found starting from _O_. This abstract operation performs the following steps:

+

The abstract operation SpeciesConstructor takes arguments _O_ (an Object) and _defaultConstructor_ (a constructor). It is used to retrieve the constructor that should be used to create new objects that are derived from _O_. _defaultConstructor_ is the constructor to use if a constructor @@species property cannot be found starting from _O_. It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Let _C_ be ? Get(_O_, *"constructor"*). @@ -5968,7 +5982,7 @@

SpeciesConstructor ( _O_, _defaultConstructor_ )

EnumerableOwnPropertyNames ( _O_, _kind_ )

-

When the abstract operation EnumerableOwnPropertyNames is called with an Object _O_ and _kind_ which is one of (~key~, ~value~, ~key+value~), the following steps are taken:

+

The abstract operation EnumerableOwnPropertyNames takes arguments _O_ (an Object) and _kind_ (one of ~key~, ~value~, or ~key+value~). It performs the following steps when called:

1. Assert: Type(_O_) is Object. 1. Let _ownKeys_ be ? _O_.[[OwnPropertyKeys]](). @@ -5991,7 +6005,7 @@

EnumerableOwnPropertyNames ( _O_, _kind_ )

GetFunctionRealm ( _obj_ )

-

The abstract operation GetFunctionRealm with argument _obj_ performs the following steps:

+

The abstract operation GetFunctionRealm takes argument _obj_. It performs the following steps when called:

1. Assert: ! IsCallable(_obj_) is *true*. 1. If _obj_ has a [[Realm]] internal slot, then @@ -6012,7 +6026,7 @@

GetFunctionRealm ( _obj_ )

CopyDataProperties ( _target_, _source_, _excludedItems_ )

-

When the abstract operation CopyDataProperties is called with arguments _target_, _source_, and _excludedItems_, the following steps are taken:

+

The abstract operation CopyDataProperties takes arguments _target_, _source_, and _excludedItems_. It performs the following steps when called:

1. Assert: Type(_target_) is Object. 1. Assert: _excludedItems_ is a List of property keys. @@ -6044,7 +6058,7 @@

Operations on Iterator Objects

GetIterator ( _obj_ [ , _hint_ [ , _method_ ] ] )

-

The abstract operation GetIterator with argument _obj_ and optional arguments _hint_ and _method_ performs the following steps:

+

The abstract operation GetIterator takes argument _obj_ and optional arguments _hint_ and _method_. It performs the following steps when called:

1. If _hint_ is not present, set _hint_ to ~sync~. 1. Assert: _hint_ is either ~sync~ or ~async~. @@ -6066,7 +6080,7 @@

GetIterator ( _obj_ [ , _hint_ [ , _method_ ] ] )

IteratorNext ( _iteratorRecord_ [ , _value_ ] )

-

The abstract operation IteratorNext with argument _iteratorRecord_ and optional argument _value_ performs the following steps:

+

The abstract operation IteratorNext takes argument _iteratorRecord_ and optional argument _value_. It performs the following steps when called:

1. If _value_ is not present, then 1. Let _result_ be ? Call(_iteratorRecord_.[[NextMethod]], _iteratorRecord_.[[Iterator]]). @@ -6079,7 +6093,7 @@

IteratorNext ( _iteratorRecord_ [ , _value_ ] )

IteratorComplete ( _iterResult_ )

-

The abstract operation IteratorComplete with argument _iterResult_ performs the following steps:

+

The abstract operation IteratorComplete takes argument _iterResult_. It performs the following steps when called:

1. Assert: Type(_iterResult_) is Object. 1. Return ! ToBoolean(? Get(_iterResult_, *"done"*)). @@ -6088,7 +6102,7 @@

IteratorComplete ( _iterResult_ )

IteratorValue ( _iterResult_ )

-

The abstract operation IteratorValue with argument _iterResult_ performs the following steps:

+

The abstract operation IteratorValue takes argument _iterResult_. It performs the following steps when called:

1. Assert: Type(_iterResult_) is Object. 1. Return ? Get(_iterResult_, *"value"*). @@ -6097,7 +6111,7 @@

IteratorValue ( _iterResult_ )

IteratorStep ( _iteratorRecord_ )

-

The abstract operation IteratorStep with argument _iteratorRecord_ requests the next value from _iteratorRecord_.[[Iterator]] by calling _iteratorRecord_.[[NextMethod]] and returns either *false* indicating that the iterator has reached its end or the IteratorResult object if a next value is available. IteratorStep performs the following steps:

+

The abstract operation IteratorStep takes argument _iteratorRecord_. It requests the next value from _iteratorRecord_.[[Iterator]] by calling _iteratorRecord_.[[NextMethod]] and returns either *false* indicating that the iterator has reached its end or the IteratorResult object if a next value is available. It performs the following steps when called:

1. Let _result_ be ? IteratorNext(_iteratorRecord_). 1. Let _done_ be ? IteratorComplete(_result_). @@ -6108,7 +6122,7 @@

IteratorStep ( _iteratorRecord_ )

IteratorClose ( _iteratorRecord_, _completion_ )

-

The abstract operation IteratorClose with arguments _iteratorRecord_ and _completion_ is used to notify an iterator that it should perform any actions it would normally perform when it has reached its completed state:

+

The abstract operation IteratorClose takes arguments _iteratorRecord_ and _completion_. It is used to notify an iterator that it should perform any actions it would normally perform when it has reached its completed state. It performs the following steps when called:

1. Assert: Type(_iteratorRecord_.[[Iterator]]) is Object. 1. Assert: _completion_ is a Completion Record. @@ -6125,7 +6139,7 @@

IteratorClose ( _iteratorRecord_, _completion_ )

AsyncIteratorClose ( _iteratorRecord_, _completion_ )

-

The abstract operation AsyncIteratorClose with arguments _iteratorRecord_ and _completion_ is used to notify an async iterator that it should perform any actions it would normally perform when it has reached its completed state:

+

The abstract operation AsyncIteratorClose takes arguments _iteratorRecord_ and _completion_. It is used to notify an async iterator that it should perform any actions it would normally perform when it has reached its completed state. It performs the following steps when called:

1. Assert: Type(_iteratorRecord_.[[Iterator]]) is Object. 1. Assert: _completion_ is a Completion Record. @@ -6143,7 +6157,7 @@

AsyncIteratorClose ( _iteratorRecord_, _completion_ )

CreateIterResultObject ( _value_, _done_ )

-

The abstract operation CreateIterResultObject with arguments _value_ and _done_ creates an object that supports the IteratorResult interface by performing the following steps:

+

The abstract operation CreateIterResultObject takes arguments _value_ and _done_. It creates an object that supports the IteratorResult interface. It performs the following steps when called:

1. Assert: Type(_done_) is Boolean. 1. Let _obj_ be OrdinaryObjectCreate(%Object.prototype%). @@ -6155,7 +6169,7 @@

CreateIterResultObject ( _value_, _done_ )

CreateListIteratorRecord ( _list_ )

-

The abstract operation CreateListIteratorRecord with argument _list_ creates an Iterator () object record whose next method returns the successive elements of _list_. It performs the following steps:

+

The abstract operation CreateListIteratorRecord takes argument _list_. It creates an Iterator () object record whose next method returns the successive elements of _list_. It performs the following steps when called:

1. Let _iterator_ be OrdinaryObjectCreate(%IteratorPrototype%, « [[IteratedList]], [[ListNextIndex]] »). 1. Set _iterator_.[[IteratedList]] to _list_. @@ -7192,7 +7206,7 @@

Lexical Environment Operations

GetIdentifierReference ( _lex_, _name_, _strict_ )

-

The abstract operation GetIdentifierReference is called with a Lexical Environment _lex_, a String _name_, and a Boolean flag _strict_. The value of _lex_ may be *null*. When called, the following steps are performed:

+

The abstract operation GetIdentifierReference takes arguments _lex_ (a Lexical Environment or *null*), _name_ (a String), and _strict_ (a Boolean). It performs the following steps when called:

1. If _lex_ is the value *null*, then 1. Return a value of type Reference whose base value component is *undefined*, whose referenced name component is _name_, and whose strict reference flag is _strict_. @@ -7208,7 +7222,7 @@

GetIdentifierReference ( _lex_, _name_, _strict_ )

NewDeclarativeEnvironment ( _E_ )

-

When the abstract operation NewDeclarativeEnvironment is called with a Lexical Environment as argument _E_ the following steps are performed:

+

The abstract operation NewDeclarativeEnvironment takes argument _E_ (a Lexical Environment). It performs the following steps when called:

1. Let _env_ be a new Lexical Environment. 1. Let _envRec_ be a new declarative Environment Record containing no bindings. @@ -7220,7 +7234,7 @@

NewDeclarativeEnvironment ( _E_ )

NewObjectEnvironment ( _O_, _E_ )

-

When the abstract operation NewObjectEnvironment is called with an Object _O_ and a Lexical Environment _E_ as arguments, the following steps are performed:

+

The abstract operation NewObjectEnvironment takes arguments _O_ (an Object) and _E_ (a Lexical Environment). It performs the following steps when called:

1. Let _env_ be a new Lexical Environment. 1. Let _envRec_ be a new object Environment Record containing _O_ as the binding object. @@ -7232,7 +7246,7 @@

NewObjectEnvironment ( _O_, _E_ )

NewFunctionEnvironment ( _F_, _newTarget_ )

-

When the abstract operation NewFunctionEnvironment is called with arguments _F_ and _newTarget_ the following steps are performed:

+

The abstract operation NewFunctionEnvironment takes arguments _F_ and _newTarget_. It performs the following steps when called:

1. Assert: _F_ is an ECMAScript function. 1. Assert: Type(_newTarget_) is Undefined or Object. @@ -7252,7 +7266,7 @@

NewFunctionEnvironment ( _F_, _newTarget_ )

NewGlobalEnvironment ( _G_, _thisValue_ )

-

When the abstract operation NewGlobalEnvironment is called with arguments _G_ and _thisValue_, the following steps are performed:

+

The abstract operation NewGlobalEnvironment takes arguments _G_ and _thisValue_. It performs the following steps when called:

1. Let _env_ be a new Lexical Environment. 1. Let _objRec_ be a new object Environment Record containing _G_ as the binding object. @@ -7270,7 +7284,7 @@

NewGlobalEnvironment ( _G_, _thisValue_ )

NewModuleEnvironment ( _E_ )

-

When the abstract operation NewModuleEnvironment is called with a Lexical Environment argument _E_ the following steps are performed:

+

The abstract operation NewModuleEnvironment takes argument _E_ (a Lexical Environment). It performs the following steps when called:

1. Let _env_ be a new Lexical Environment. 1. Let _envRec_ be a new module Environment Record containing no bindings. @@ -7362,7 +7376,7 @@

Realms

CreateRealm ( )

-

The abstract operation CreateRealm with no arguments performs the following steps:

+

The abstract operation CreateRealm takes no arguments. It performs the following steps when called:

1. Let _realmRec_ be a new Realm Record. 1. Perform CreateIntrinsics(_realmRec_). @@ -7375,7 +7389,7 @@

CreateRealm ( )

CreateIntrinsics ( _realmRec_ )

-

The abstract operation CreateIntrinsics with argument _realmRec_ performs the following steps:

+

The abstract operation CreateIntrinsics takes argument _realmRec_. It performs the following steps when called:

1. Let _intrinsics_ be a new Record. 1. Set _realmRec_.[[Intrinsics]] to _intrinsics_. @@ -7387,7 +7401,7 @@

CreateIntrinsics ( _realmRec_ )

SetRealmGlobalObject ( _realmRec_, _globalObj_, _thisValue_ )

-

The abstract operation SetRealmGlobalObject with arguments _realmRec_, _globalObj_, and _thisValue_ performs the following steps:

+

The abstract operation SetRealmGlobalObject takes arguments _realmRec_, _globalObj_, and _thisValue_. It performs the following steps when called:

1. If _globalObj_ is *undefined*, then 1. Let _intrinsics_ be _realmRec_.[[Intrinsics]]. @@ -7403,7 +7417,7 @@

SetRealmGlobalObject ( _realmRec_, _globalObj_, _thisValue_ )

SetDefaultGlobalBindings ( _realmRec_ )

-

The abstract operation SetDefaultGlobalBindings with argument _realmRec_ performs the following steps:

+

The abstract operation SetDefaultGlobalBindings takes argument _realmRec_. It performs the following steps when called:

1. Let _global_ be _realmRec_.[[GlobalObject]]. 1. For each property of the Global Object specified in clause , do @@ -7528,7 +7542,7 @@

Execution Contexts

GetActiveScriptOrModule ( )

-

The GetActiveScriptOrModule abstract operation is used to determine the running script or module, based on the running execution context. GetActiveScriptOrModule performs the following steps:

+

The abstract operation GetActiveScriptOrModule takes no arguments. It is used to determine the running script or module, based on the running execution context. It performs the following steps when called:

1. If the execution context stack is empty, return *null*. @@ -7539,7 +7553,7 @@

GetActiveScriptOrModule ( )

ResolveBinding ( _name_ [ , _env_ ] )

-

The ResolveBinding abstract operation is used to determine the binding of _name_ passed as a String value. The optional argument _env_ can be used to explicitly provide the Lexical Environment that is to be searched for the binding. During execution of ECMAScript code, ResolveBinding is performed using the following algorithm:

+

The abstract operation ResolveBinding takes argument _name_ (a String) and optional argument _env_ (a Lexical Environment). It is used to determine the binding of _name_. _env_ can be used to explicitly provide the Lexical Environment that is to be searched for the binding. It performs the following steps when called:

1. If _env_ is not present or if _env_ is *undefined*, then 1. Set _env_ to the running execution context's LexicalEnvironment. @@ -7554,7 +7568,7 @@

ResolveBinding ( _name_ [ , _env_ ] )

GetThisEnvironment ( )

-

The abstract operation GetThisEnvironment finds the Environment Record that currently supplies the binding of the keyword `this`. GetThisEnvironment performs the following steps:

+

The abstract operation GetThisEnvironment takes no arguments. It finds the Environment Record that currently supplies the binding of the keyword `this`. It performs the following steps when called:

1. Let _lex_ be the running execution context's LexicalEnvironment. 1. Repeat, @@ -7572,7 +7586,7 @@

GetThisEnvironment ( )

ResolveThisBinding ( )

-

The abstract operation ResolveThisBinding determines the binding of the keyword `this` using the LexicalEnvironment of the running execution context. ResolveThisBinding performs the following steps:

+

The abstract operation ResolveThisBinding takes no arguments. It determines the binding of the keyword `this` using the LexicalEnvironment of the running execution context. It performs the following steps when called:

1. Let _envRec_ be GetThisEnvironment(). 1. Return ? _envRec_.GetThisBinding(). @@ -7581,7 +7595,7 @@

ResolveThisBinding ( )

GetNewTarget ( )

-

The abstract operation GetNewTarget determines the NewTarget value using the LexicalEnvironment of the running execution context. GetNewTarget performs the following steps:

+

The abstract operation GetNewTarget takes no arguments. It determines the NewTarget value using the LexicalEnvironment of the running execution context. It performs the following steps when called:

1. Let _envRec_ be GetThisEnvironment(). 1. Assert: _envRec_ has a [[NewTarget]] field. @@ -7591,7 +7605,7 @@

GetNewTarget ( )

GetGlobalObject ( )

-

The abstract operation GetGlobalObject returns the global object used by the currently running execution context. GetGlobalObject performs the following steps:

+

The abstract operation GetGlobalObject takes no arguments. It returns the global object used by the currently running execution context. It performs the following steps when called:

1. Let _currentRealm_ be the current Realm Record. 1. Return _currentRealm_.[[GlobalObject]]. @@ -7625,7 +7639,6 @@

Jobs and Host Operations to Enqueue Jobs

HostEnqueuePromiseJob ( _job_, _realm_ )

-

HostEnqueuePromiseJob is a host-defined abstract operation that schedules the Job abstract closure _job_ to be performed, at some future time. The abstract closures used with this algorithm are intended to be related to the handling of Promises, or otherwise, to be scheduled with equal priority to Promise handling operations.

The _realm_ parameter is passed through to hosts with no normative requirements; it is either *null* or a Realm.

@@ -7639,7 +7652,7 @@

HostEnqueuePromiseJob ( _job_, _realm_ )

InitializeHostDefinedRealm ( )

-

The abstract operation InitializeHostDefinedRealm performs the following steps:

+

The abstract operation InitializeHostDefinedRealm takes no arguments. It performs the following steps when called:

1. Let _realm_ be CreateRealm(). @@ -7731,7 +7744,7 @@

Agents

AgentSignifier ( )

-

The abstract operation AgentSignifier takes no arguments. It performs the following steps:

+

The abstract operation AgentSignifier takes no arguments. It performs the following steps when called:

1. Let _AR_ be the Agent Record of the surrounding agent. 1. Return _AR_.[[Signifier]]. @@ -7740,7 +7753,7 @@

AgentSignifier ( )

AgentCanSuspend ( )

-

The abstract operation AgentCanSuspend takes no arguments. It performs the following steps:

+

The abstract operation AgentCanSuspend takes no arguments. It performs the following steps when called:

1. Let _AR_ be the Agent Record of the surrounding agent. 1. Return _AR_.[[CanBlock]]. @@ -7841,7 +7854,7 @@

[[GetPrototypeOf]] ( )

OrdinaryGetPrototypeOf ( _O_ )

-

When the abstract operation OrdinaryGetPrototypeOf is called with Object _O_, the following steps are taken:

+

The abstract operation OrdinaryGetPrototypeOf takes argument _O_ (an Object). It performs the following steps when called:

1. Return _O_.[[Prototype]]. @@ -7857,7 +7870,7 @@

[[SetPrototypeOf]] ( _V_ )

OrdinarySetPrototypeOf ( _O_, _V_ )

-

When the abstract operation OrdinarySetPrototypeOf is called with Object _O_ and value _V_, the following steps are taken:

+

The abstract operation OrdinarySetPrototypeOf takes arguments _O_ (an Object) and _V_ (an ECMAScript language value). It performs the following steps when called:

1. Assert: Either Type(_V_) is Object or Type(_V_) is Null. 1. Let _current_ be _O_.[[Prototype]]. @@ -7890,7 +7903,7 @@

[[IsExtensible]] ( )

OrdinaryIsExtensible ( _O_ )

-

When the abstract operation OrdinaryIsExtensible is called with Object _O_, the following steps are taken:

+

The abstract operation OrdinaryIsExtensible takes argument _O_ (an Object). It performs the following steps when called:

1. Return _O_.[[Extensible]]. @@ -7906,7 +7919,7 @@

[[PreventExtensions]] ( )

OrdinaryPreventExtensions ( _O_ )

-

When the abstract operation OrdinaryPreventExtensions is called with Object _O_, the following steps are taken:

+

The abstract operation OrdinaryPreventExtensions takes argument _O_ (an Object). It performs the following steps when called:

1. Set _O_.[[Extensible]] to *false*. 1. Return *true*. @@ -7923,7 +7936,7 @@

[[GetOwnProperty]] ( _P_ )

OrdinaryGetOwnProperty ( _O_, _P_ )

-

When the abstract operation OrdinaryGetOwnProperty is called with Object _O_ and with property key _P_, the following steps are taken:

+

The abstract operation OrdinaryGetOwnProperty takes arguments _O_ (an Object) and _P_ (a property key). It performs the following steps when called:

1. Assert: IsPropertyKey(_P_) is *true*. 1. If _O_ does not have an own property with key _P_, return *undefined*. @@ -7952,7 +7965,7 @@

[[DefineOwnProperty]] ( _P_, _Desc_ )

OrdinaryDefineOwnProperty ( _O_, _P_, _Desc_ )

-

When the abstract operation OrdinaryDefineOwnProperty is called with Object _O_, property key _P_, and Property Descriptor _Desc_, the following steps are taken:

+

The abstract operation OrdinaryDefineOwnProperty takes arguments _O_ (an Object), _P_ (a property key), and _Desc_ (a Property Descriptor). It performs the following steps when called:

1. Let _current_ be ? _O_.[[GetOwnProperty]](_P_). 1. Let _extensible_ be ? IsExtensible(_O_). @@ -7962,7 +7975,7 @@

OrdinaryDefineOwnProperty ( _O_, _P_, _Desc_ )

IsCompatiblePropertyDescriptor ( _Extensible_, _Desc_, _Current_ )

-

When the abstract operation IsCompatiblePropertyDescriptor is called with Boolean value _Extensible_, and Property Descriptors _Desc_, and _Current_, the following steps are taken:

+

The abstract operation IsCompatiblePropertyDescriptor takes arguments _Extensible_ (a Boolean), _Desc_ (a Property Descriptor), and _Current_ (a Property Descriptor). It performs the following steps when called:

1. Return ValidateAndApplyPropertyDescriptor(*undefined*, *undefined*, _Extensible_, _Desc_, _Current_). @@ -7970,7 +7983,7 @@

IsCompatiblePropertyDescriptor ( _Extensible_, _Desc_, _Current_ )

ValidateAndApplyPropertyDescriptor ( _O_, _P_, _extensible_, _Desc_, _current_ )

-

When the abstract operation ValidateAndApplyPropertyDescriptor is called with Object _O_, property key _P_, Boolean value _extensible_, and Property Descriptors _Desc_, and _current_, the following steps are taken:

+

The abstract operation ValidateAndApplyPropertyDescriptor takes arguments _O_ (an Object or *undefined*), _P_ (a property key), _extensible_ (a Boolean), _Desc_ (a Property Descriptor), and _current_ (a Property Descriptor). It performs the following steps when called:

If *undefined* is passed as _O_, only validation is performed and no object updates are performed.

@@ -8024,7 +8037,7 @@

[[HasProperty]] ( _P_ )

OrdinaryHasProperty ( _O_, _P_ )

-

When the abstract operation OrdinaryHasProperty is called with Object _O_ and with property key _P_, the following steps are taken:

+

The abstract operation OrdinaryHasProperty takes arguments _O_ (an Object) and _P_ (a property key). It performs the following steps when called:

1. Assert: IsPropertyKey(_P_) is *true*. 1. Let _hasOwn_ be ? _O_.[[GetOwnProperty]](_P_). @@ -8047,7 +8060,7 @@

[[Get]] ( _P_, _Receiver_ )

OrdinaryGet ( _O_, _P_, _Receiver_ )

-

When the abstract operation OrdinaryGet is called with Object _O_, property key _P_, and ECMAScript language value _Receiver_, the following steps are taken:

+

The abstract operation OrdinaryGet takes arguments _O_ (an Object), _P_ (a property key), and _Receiver_ (an ECMAScript language value). It performs the following steps when called:

1. Assert: IsPropertyKey(_P_) is *true*. @@ -8074,7 +8087,7 @@

[[Set]] ( _P_, _V_, _Receiver_ )

OrdinarySet ( _O_, _P_, _V_, _Receiver_ )

-

When the abstract operation OrdinarySet is called with Object _O_, property key _P_, value _V_, and ECMAScript language value _Receiver_, the following steps are taken:

+

The abstract operation OrdinarySet takes arguments _O_ (an Object), _P_ (a property key), _V_ (an ECMAScript language value), and _Receiver_ (an ECMAScript language value). It performs the following steps when called:

1. Assert: IsPropertyKey(_P_) is *true*. @@ -8085,7 +8098,7 @@

OrdinarySet ( _O_, _P_, _V_, _Receiver_ )

OrdinarySetWithOwnDescriptor ( _O_, _P_, _V_, _Receiver_, _ownDesc_ )

-

When the abstract operation OrdinarySetWithOwnDescriptor is called with Object _O_, property key _P_, value _V_, ECMAScript language value _Receiver_, and Property Descriptor (or *undefined*) _ownDesc_, the following steps are taken:

+

The abstract operation OrdinarySetWithOwnDescriptor takes arguments _O_ (an Object), _P_ (a property key), _V_ (an ECMAScript language value), _Receiver_ (an ECMAScript language value), and _ownDesc_ (a Property Descriptor or *undefined*). It performs the following steps when called:

1. Assert: IsPropertyKey(_P_) is *true*. @@ -8125,7 +8138,7 @@

[[Delete]] ( _P_ )

OrdinaryDelete ( _O_, _P_ )

-

When the abstract operation OrdinaryDelete is called with Object _O_ and property key _P_, the following steps are taken:

+

The abstract operation OrdinaryDelete takes arguments _O_ (an Object) and _P_ (a property key). It performs the following steps when called:

1. Assert: IsPropertyKey(_P_) is *true*. 1. Let _desc_ be ? _O_.[[GetOwnProperty]](_P_). @@ -8147,7 +8160,7 @@

[[OwnPropertyKeys]] ( )

OrdinaryOwnPropertyKeys ( _O_ )

-

When the abstract operation OrdinaryOwnPropertyKeys is called with Object _O_, the following steps are taken:

+

The abstract operation OrdinaryOwnPropertyKeys takes argument _O_ (an Object). It performs the following steps when called:

1. Let _keys_ be a new empty List. @@ -8164,7 +8177,7 @@

OrdinaryOwnPropertyKeys ( _O_ )

OrdinaryObjectCreate ( _proto_ [ , _additionalInternalSlotsList_ ] )

-

The abstract operation OrdinaryObjectCreate with argument _proto_ (an object or *null*) is used to specify the runtime creation of new ordinary objects. The optional argument _additionalInternalSlotsList_ is a List of the names of additional internal slots that must be defined as part of the object, beyond [[Prototype]] and [[Extensible]]. If the list is not provided, a new empty List is used. This abstract operation performs the following steps:

+

The abstract operation OrdinaryObjectCreate takes argument _proto_ (an Object or *null*) and optional argument _additionalInternalSlotsList_ (a List of names of internal slots). It is used to specify the runtime creation of new ordinary objects. _additionalInternalSlotsList_ contains the names of additional internal slots that must be defined as part of the object, beyond [[Prototype]] and [[Extensible]]. If _additionalInternalSlotsList_ is not provided, a new empty List is used. It performs the following steps when called:

1. Let _internalSlotsList_ be « [[Prototype]], [[Extensible]] ». 1. If _additionalInternalSlotsList_ is present, append each of its elements to _internalSlotsList_. @@ -8180,7 +8193,7 @@

OrdinaryObjectCreate ( _proto_ [ , _additionalInternalSlotsList_ ] )

OrdinaryCreateFromConstructor ( _constructor_, _intrinsicDefaultProto_ [ , _internalSlotsList_ ] )

-

The abstract operation OrdinaryCreateFromConstructor creates an ordinary object whose [[Prototype]] value is retrieved from a constructor's *"prototype"* property, if it exists. Otherwise the intrinsic named by _intrinsicDefaultProto_ is used for [[Prototype]]. The optional _internalSlotsList_ is a List of the names of additional internal slots that must be defined as part of the object. If the list is not provided, a new empty List is used. This abstract operation performs the following steps:

+

The abstract operation OrdinaryCreateFromConstructor takes arguments _constructor_ and _intrinsicDefaultProto_ and optional argument _internalSlotsList_ (a List of names of internal slots). It creates an ordinary object whose [[Prototype]] value is retrieved from a constructor's *"prototype"* property, if it exists. Otherwise the intrinsic named by _intrinsicDefaultProto_ is used for [[Prototype]]. _internalSlotsList_ contains the names of additional internal slots that must be defined as part of the object. If _internalSlotsList_ is not provided, a new empty List is used. It performs the following steps when called:

1. Assert: _intrinsicDefaultProto_ is a String value that is this specification's name of an intrinsic object. The corresponding object must be an intrinsic that is intended to be used as the [[Prototype]] value of an object. 1. Let _proto_ be ? GetPrototypeFromConstructor(_constructor_, _intrinsicDefaultProto_). @@ -8190,7 +8203,7 @@

OrdinaryCreateFromConstructor ( _constructor_, _intrinsicDefaultProto_ [ , _

GetPrototypeFromConstructor ( _constructor_, _intrinsicDefaultProto_ )

-

The abstract operation GetPrototypeFromConstructor determines the [[Prototype]] value that should be used to create an object corresponding to a specific constructor. The value is retrieved from the constructor's *"prototype"* property, if it exists. Otherwise the intrinsic named by _intrinsicDefaultProto_ is used for [[Prototype]]. This abstract operation performs the following steps:

+

The abstract operation GetPrototypeFromConstructor takes arguments _constructor_ and _intrinsicDefaultProto_. It determines the [[Prototype]] value that should be used to create an object corresponding to a specific constructor. The value is retrieved from the constructor's *"prototype"* property, if it exists. Otherwise the intrinsic named by _intrinsicDefaultProto_ is used for [[Prototype]]. It performs the following steps when called:

1. Assert: _intrinsicDefaultProto_ is a String value that is this specification's name of an intrinsic object. The corresponding object must be an intrinsic that is intended to be used as the [[Prototype]] value of an object. 1. Assert: IsCallable(_constructor_) is *true*. @@ -8207,7 +8220,7 @@

GetPrototypeFromConstructor ( _constructor_, _intrinsicDefaultProto_ )

RequireInternalSlot ( _O_, _internalSlot_ )

-

The abstract operation RequireInternalSlot throws an exception unless _O_ is an Object and has the given internal slot.

+

The abstract operation RequireInternalSlot takes arguments _O_ and _internalSlot_. It throws an exception unless _O_ is an Object and has the given internal slot. It performs the following steps when called:

1. If Type(_O_) is not Object, throw a *TypeError* exception. 1. If _O_ does not have an _internalSlot_ internal slot, throw a *TypeError* exception. @@ -8381,7 +8394,7 @@

[[Call]] ( _thisArgument_, _argumentsList_ )

PrepareForOrdinaryCall ( _F_, _newTarget_ )

-

When the abstract operation PrepareForOrdinaryCall is called with function object _F_ and ECMAScript language value _newTarget_, the following steps are taken:

+

The abstract operation PrepareForOrdinaryCall takes arguments _F_ (a function object) and _newTarget_ (an ECMAScript language value). It performs the following steps when called:

1. Assert: Type(_newTarget_) is Undefined or Object. 1. Let _callerContext_ be the running execution context. @@ -8402,7 +8415,7 @@

PrepareForOrdinaryCall ( _F_, _newTarget_ )

OrdinaryCallBindThis ( _F_, _calleeContext_, _thisArgument_ )

-

When the abstract operation OrdinaryCallBindThis is called with function object _F_, execution context _calleeContext_, and ECMAScript value _thisArgument_, the following steps are taken:

+

The abstract operation OrdinaryCallBindThis takes arguments _F_ (a function object), _calleeContext_ (an execution context), and _thisArgument_ (an ECMAScript language value). It performs the following steps when called:

1. Let _thisMode_ be _F_.[[ThisMode]]. 1. If _thisMode_ is ~lexical~, return NormalCompletion(*undefined*). @@ -8427,7 +8440,7 @@

OrdinaryCallBindThis ( _F_, _calleeContext_, _thisArgument_ )

OrdinaryCallEvaluateBody ( _F_, _argumentsList_ )

-

When the abstract operation OrdinaryCallEvaluateBody is called with function object _F_ and List _argumentsList_, the following steps are taken:

+

The abstract operation OrdinaryCallEvaluateBody takes arguments _F_ (a function object) and _argumentsList_ (a List). It performs the following steps when called:

1. Return the result of EvaluateBody of the parsed code that is _F_.[[ECMAScriptCode]] passing _F_ and _argumentsList_ as the arguments. @@ -8462,7 +8475,7 @@

[[Construct]] ( _argumentsList_, _newTarget_ )

OrdinaryFunctionCreate ( _functionPrototype_, _ParameterList_, _Body_, _thisMode_, _Scope_ )

-

The abstract operation OrdinaryFunctionCreate requires the arguments: an object _functionPrototype_, a parameter list Parse Node specified by _ParameterList_, a body Parse Node specified by _Body_, _thisMode_ which is either ~lexical-this~ or ~non-lexical-this~, and a Lexical Environment specified by _Scope_. OrdinaryFunctionCreate performs the following steps:

+

The abstract operation OrdinaryFunctionCreate takes arguments _functionPrototype_ (an Object), _ParameterList_ (a Parse Node), _Body_ (a Parse Node), _thisMode_ (either ~lexical-this~ or ~non-lexical-this~), and _Scope_ (a Lexical Environment). It performs the following steps when called:

1. Assert: Type(_functionPrototype_) is Object. 1. Let _internalSlotsList_ be the internal slots listed in . @@ -8488,7 +8501,7 @@

OrdinaryFunctionCreate ( _functionPrototype_, _ParameterList_, _Body_, _this

AddRestrictedFunctionProperties ( _F_, _realm_ )

-

The abstract operation AddRestrictedFunctionProperties is called with a function object _F_ and Realm Record _realm_ as its argument. It performs the following steps:

+

The abstract operation AddRestrictedFunctionProperties takes arguments _F_ (a function object) and _realm_ (a Realm Record). It performs the following steps when called:

1. Assert: _realm_.[[Intrinsics]].[[%ThrowTypeError%]] exists and has been initialized. 1. Let _thrower_ be _realm_.[[Intrinsics]].[[%ThrowTypeError%]]. @@ -8509,7 +8522,7 @@

%ThrowTypeError% ( )

MakeConstructor ( _F_ [ , _writablePrototype_ [ , _prototype_ ] ] )

-

The abstract operation MakeConstructor requires a Function argument _F_ and optionally, a Boolean _writablePrototype_ and an object _prototype_. If _prototype_ is provided it is assumed to already contain, if needed, a *"constructor"* property whose value is _F_. This operation converts _F_ into a constructor by performing the following steps:

+

The abstract operation MakeConstructor takes argument _F_ (a function object) and optional arguments _writablePrototype_ (a Boolean) and _prototype_ (an Object). It converts _F_ into a constructor. It performs the following steps when called:

1. Assert: _F_ is an ECMAScript function object. 1. Assert: IsConstructor(_F_) is *false*. @@ -8527,7 +8540,7 @@

MakeConstructor ( _F_ [ , _writablePrototype_ [ , _prototype_ ] ] )

MakeClassConstructor ( _F_ )

-

The abstract operation MakeClassConstructor with argument _F_ performs the following steps:

+

The abstract operation MakeClassConstructor takes argument _F_. It performs the following steps when called:

1. Assert: _F_ is an ECMAScript function object. 1. Assert: _F_.[[IsClassConstructor]] is *false*. @@ -8538,7 +8551,7 @@

MakeClassConstructor ( _F_ )

MakeMethod ( _F_, _homeObject_ )

-

The abstract operation MakeMethod with arguments _F_ and _homeObject_ configures _F_ as a method by performing the following steps:

+

The abstract operation MakeMethod takes arguments _F_ and _homeObject_. It configures _F_ as a method. It performs the following steps when called:

1. Assert: _F_ is an ECMAScript function object. 1. Assert: Type(_homeObject_) is Object. @@ -8549,7 +8562,7 @@

MakeMethod ( _F_, _homeObject_ )

SetFunctionName ( _F_, _name_ [ , _prefix_ ] )

-

The abstract operation SetFunctionName requires a Function argument _F_, a String or Symbol argument _name_ and optionally a String argument _prefix_. This operation adds a *"name"* property to _F_ by performing the following steps:

+

The abstract operation SetFunctionName takes arguments _F_ (a function object) and _name_ (a property key) and optional argument _prefix_ (a String). It adds a *"name"* property to _F_. It performs the following steps when called:

1. Assert: _F_ is an extensible object that does not have a *"name"* own property. 1. Assert: Type(_name_) is either Symbol or String. @@ -8566,7 +8579,7 @@

SetFunctionName ( _F_, _name_ [ , _prefix_ ] )

SetFunctionLength ( _F_, _length_ )

-

The abstract operation SetFunctionLength requires a Function argument _F_ and a Number argument _length_. This operation adds a *"length"* property to _F_ by performing the following steps:

+

The abstract operation SetFunctionLength takes arguments _F_ (a function object) and _length_ (a Number). It adds a *"length"* property to _F_. It performs the following steps when called:

1. Assert: _F_ is an extensible object that does not have a *"length"* own property. 1. Assert: Type(_length_) is Number. @@ -8580,7 +8593,7 @@

FunctionDeclarationInstantiation ( _func_, _argumentsList_ )

When an execution context is established for evaluating an ECMAScript function a new function Environment Record is created and bindings for each formal parameter are instantiated in that Environment Record. Each declaration in the function body is also instantiated. If the function's formal parameters do not include any default value initializers then the body declarations are instantiated in the same Environment Record as the parameters. If default value parameter initializers exist, a second Environment Record is created for the body declarations. Formal parameters and functions are initialized as part of FunctionDeclarationInstantiation. All other bindings are initialized during evaluation of the function body.

-

FunctionDeclarationInstantiation is performed as follows using arguments _func_ and _argumentsList_. _func_ is the function object for which the execution context is being established.

+

The abstract operation FunctionDeclarationInstantiation takes arguments _func_ (a function object) and _argumentsList_. _func_ is the function object for which the execution context is being established. It performs the following steps when called: