diff --git a/spec.html b/spec.html index 1c02e81e870..b6ef590404b 100644 --- a/spec.html +++ b/spec.html @@ -1098,11 +1098,11 @@

1. Let _searchLen_ be the length of _searchValue_. 1. For each integer _i_ starting with _fromIndex_ such that _i_ ≤ _len_ - _searchLen_, in ascending order, do 1. Let _candidate_ be the substring of _string_ from _i_ to _i_ + _searchLen_. - 1. If _candidate_ is the same sequence of code units as _searchValue_, return _i_. + 1. If _candidate_ is _searchValue_, return _i_. 1. Return -1. -

If _searchValue_ is the empty String and _fromIndex_ is less than or equal to the length of _string_, this algorithm returns _fromIndex_. The empty String is effectively found at every position within a string, including after the last code unit.

+

If _searchValue_ is the empty String and _fromIndex_ ≤ the length of _string_, this algorithm returns _fromIndex_. The empty String is effectively found at every position within a string, including after the last code unit.

This algorithm always returns -1 if _fromIndex_ > the length of _string_.

@@ -1815,7 +1815,7 @@

1. If _exponent_ is *NaN*, return *NaN*. - 1. If _exponent_ is *+0*𝔽 or _exponent_ is *-0*𝔽, return *1*𝔽. + 1. If _exponent_ is either *+0*𝔽 or *-0*𝔽, return *1*𝔽. 1. If _base_ is *NaN*, return *NaN*. 1. If _base_ is *+∞*𝔽, then 1. If _exponent_ > *+0*𝔽, return *+∞*𝔽. Otherwise, return *+0*𝔽. @@ -1834,11 +1834,11 @@

1. Assert: _base_ is finite and is neither *+0*𝔽 nor *-0*𝔽. 1. If _exponent_ is *+∞*𝔽, then 1. If abs(ℝ(_base_)) > 1, return *+∞*𝔽. - 1. If abs(ℝ(_base_)) is 1, return *NaN*. + 1. If abs(ℝ(_base_)) = 1, return *NaN*. 1. If abs(ℝ(_base_)) < 1, return *+0*𝔽. 1. If _exponent_ is *-∞*𝔽, then 1. If abs(ℝ(_base_)) > 1, return *+0*𝔽. - 1. If abs(ℝ(_base_)) is 1, return *NaN*. + 1. If abs(ℝ(_base_)) = 1, return *NaN*. 1. If abs(ℝ(_base_)) < 1, return *+∞*𝔽. 1. Assert: _exponent_ is finite and is neither *+0*𝔽 nor *-0*𝔽. 1. If _base_ < *-0*𝔽 and _exponent_ is not an integral Number, return *NaN*. @@ -1862,12 +1862,12 @@

1. If _x_ is *NaN* or _y_ is *NaN*, return *NaN*. - 1. If _x_ is *+∞*𝔽 or _x_ is *-∞*𝔽, then - 1. If _y_ is *+0*𝔽 or _y_ is *-0*𝔽, return *NaN*. + 1. If _x_ is either *+∞*𝔽 or *-∞*𝔽, then + 1. If _y_ is either *+0*𝔽 or *-0*𝔽, return *NaN*. 1. If _y_ > *+0*𝔽, return _x_. 1. Return -_x_. - 1. If _y_ is *+∞*𝔽 or _y_ is *-∞*𝔽, then - 1. If _x_ is *+0*𝔽 or _x_ is *-0*𝔽, return *NaN*. + 1. If _y_ is either *+∞*𝔽 or *-∞*𝔽, then + 1. If _x_ is either *+0*𝔽 or *-0*𝔽, return *NaN*. 1. If _x_ > *+0*𝔽, return _y_. 1. Return -_y_. 1. If _x_ is *-0*𝔽, then @@ -1896,16 +1896,16 @@

1. If _x_ is *NaN* or _y_ is *NaN*, return *NaN*. - 1. If _x_ is *+∞*𝔽 or _x_ is *-∞*𝔽, then - 1. If _y_ is *+∞*𝔽 or _y_ is *-∞*𝔽, return *NaN*. + 1. If _x_ is either *+∞*𝔽 or *-∞*𝔽, then + 1. If _y_ is either *+∞*𝔽 or *-∞*𝔽, return *NaN*. 1. If _y_ is *+0*𝔽 or _y_ > *+0*𝔽, return _x_. 1. Return -_x_. 1. If _y_ is *+∞*𝔽, then 1. If _x_ is *+0*𝔽 or _x_ > *+0*𝔽, return *+0*𝔽. Otherwise, return *-0*𝔽. 1. If _y_ is *-∞*𝔽, then 1. If _x_ is *+0*𝔽 or _x_ > *+0*𝔽, return *-0*𝔽. Otherwise, return *+0*𝔽. - 1. If _x_ is *+0*𝔽 or _x_ is *-0*𝔽, then - 1. If _y_ is *+0*𝔽 or _y_ is *-0*𝔽, return *NaN*. + 1. If _x_ is either *+0*𝔽 or *-0*𝔽, then + 1. If _y_ is either *+0*𝔽 or *-0*𝔽, return *NaN*. 1. If _y_ > *+0*𝔽, return _x_. 1. Return -_x_. 1. If _y_ is *+0*𝔽, then @@ -1929,13 +1929,13 @@

1. If _n_ is *NaN* or _d_ is *NaN*, return *NaN*. - 1. If _n_ is *+∞*𝔽 or _n_ is *-∞*𝔽, return *NaN*. - 1. If _d_ is *+∞*𝔽 or _d_ is *-∞*𝔽, return _n_. - 1. If _d_ is *+0*𝔽 or _d_ is *-0*𝔽, return *NaN*. - 1. If _n_ is *+0*𝔽 or _n_ is *-0*𝔽, return _n_. + 1. If _n_ is either *+∞*𝔽 or *-∞*𝔽, return *NaN*. + 1. If _d_ is either *+∞*𝔽 or *-∞*𝔽, return _n_. + 1. If _d_ is either *+0*𝔽 or *-0*𝔽, return *NaN*. + 1. If _n_ is either *+0*𝔽 or *-0*𝔽, return _n_. 1. Assert: _n_ and _d_ are finite and non-zero. 1. Let _r_ be ℝ(_n_) - (ℝ(_d_) × _q_) where _q_ is an integer that is negative if and only if _n_ and _d_ have opposite sign, and whose magnitude is as large as possible without exceeding the magnitude of ℝ(_n_) / ℝ(_d_). - 1. If _r_ is 0 and _n_ < *-0*𝔽, return *-0*𝔽. + 1. If _r_ = 0 and _n_ < *-0*𝔽, return *-0*𝔽. 1. Return 𝔽(_r_). @@ -1959,8 +1959,8 @@

1. If _x_ is *NaN* or _y_ is *NaN*, return *NaN*. 1. If _x_ is *+∞*𝔽 and _y_ is *-∞*𝔽, return *NaN*. 1. If _x_ is *-∞*𝔽 and _y_ is *+∞*𝔽, return *NaN*. - 1. If _x_ is *+∞*𝔽 or _x_ is *-∞*𝔽, return _x_. - 1. If _y_ is *+∞*𝔽 or _y_ is *-∞*𝔽, return _y_. + 1. If _x_ is either *+∞*𝔽 or *-∞*𝔽, return _x_. + 1. If _y_ is either *+∞*𝔽 or *-∞*𝔽, return _y_. 1. Assert: _x_ and _y_ are both finite. 1. If _x_ is *-0*𝔽 and _y_ is *-0*𝔽, return *-0*𝔽. 1. Return 𝔽(ℝ(_x_) + ℝ(_y_)). @@ -2052,7 +2052,7 @@

1. If _x_ is *NaN*, return *undefined*. 1. If _y_ is *NaN*, return *undefined*. - 1. If _x_ and _y_ are the same Number value, return *false*. + 1. If _x_ is _y_, return *false*. 1. If _x_ is *+0*𝔽 and _y_ is *-0*𝔽, return *false*. 1. If _x_ is *-0*𝔽 and _y_ is *+0*𝔽, return *false*. 1. If _x_ is *+∞*𝔽, return *false*. @@ -2076,7 +2076,7 @@

1. If _x_ is *NaN*, return *false*. 1. If _y_ is *NaN*, return *false*. - 1. If _x_ is the same Number value as _y_, return *true*. + 1. If _x_ is _y_, return *true*. 1. If _x_ is *+0*𝔽 and _y_ is *-0*𝔽, return *true*. 1. If _x_ is *-0*𝔽 and _y_ is *+0*𝔽, return *true*. 1. Return *false*. @@ -2096,7 +2096,7 @@

1. If _x_ is *NaN* and _y_ is *NaN*, return *true*. 1. If _x_ is *+0*𝔽 and _y_ is *-0*𝔽, return *false*. 1. If _x_ is *-0*𝔽 and _y_ is *+0*𝔽, return *false*. - 1. If _x_ is the same Number value as _y_, return *true*. + 1. If _x_ is _y_, return *true*. 1. Return *false*. @@ -2114,7 +2114,7 @@

1. If _x_ is *NaN* and _y_ is *NaN*, return *true*. 1. If _x_ is *+0*𝔽 and _y_ is *-0*𝔽, return *true*. 1. If _x_ is *-0*𝔽 and _y_ is *+0*𝔽, return *true*. - 1. If _x_ is the same Number value as _y_, return *true*. + 1. If _x_ is _y_, return *true*. 1. Return *false*. @@ -2196,7 +2196,7 @@

1. If _x_ is *NaN*, return the String *"NaN"*. - 1. If _x_ is *+0*𝔽 or *-0*𝔽, return the String *"0"*. + 1. If _x_ is either *+0*𝔽 or *-0*𝔽, return the String *"0"*. 1. If _x_ < *-0*𝔽, return the string-concatenation of *"-"* and Number::toString(-_x_, _radix_). 1. If _x_ is *+∞*𝔽, return the String *"Infinity"*. 1. [id="step-number-tostring-intermediate-values"] Let _n_, _k_, and _s_ be integers such that _k_ ≥ 1, _radix__k_ - 1 ≤ _s_ < _radix__k_, 𝔽(_s_ × _radix__n_ - _k_) is _x_, and _k_ is as small as possible. Note that _k_ is the number of digits in the representation of _s_ using radix _radix_, that _s_ is not divisible by _radix_, and that the least significant digit of _s_ is not necessarily uniquely determined by these criteria. @@ -2223,7 +2223,7 @@

1. Let _exponentSign_ be the code unit 0x002D (HYPHEN-MINUS). 1. Else, 1. Let _exponentSign_ be the code unit 0x002B (PLUS SIGN). - 1. If _k_ is 1, then + 1. If _k_ = 1, then 1. Return the string-concatenation of: * the code unit of the single digit of _s_ * the code unit 0x0065 (LATIN SMALL LETTER E) @@ -2241,7 +2241,7 @@

The following observations may be useful as guidelines for implementations, but are not part of the normative requirements of this Standard:

  • - If x is any Number value other than *-0*𝔽, then ToNumber(ToString(x)) is exactly the same Number value as x. + If x is any Number value other than *-0*𝔽, then ToNumber(ToString(x)) is x.
  • The least significant digit of s is not always uniquely determined by the requirements listed in step . @@ -2361,7 +2361,7 @@

    1. Let _r_ be the BigInt defined by the mathematical relation _r_ = _n_ - (_d_ × _q_) where _q_ is a BigInt that is negative only if _n_/_d_ is negative and positive only if _n_/_d_ is positive, and whose magnitude is as large as possible without exceeding the magnitude of the true mathematical quotient of _n_ and _d_. 1. Return _r_. - The sign of the result equals the sign of the dividend. + The sign of the result is the sign of the dividend. @@ -2503,7 +2503,7 @@

    - 1. If _x_ is 1 and _y_ is 1, return 1. + 1. If _x_ = 1 and _y_ = 1, return 1. 1. Else, return 0. @@ -2518,7 +2518,7 @@

    - 1. If _x_ is 1 or _y_ is 1, return 1. + 1. If _x_ = 1 or _y_ = 1, return 1. 1. Else, return 0. @@ -2533,8 +2533,8 @@

    - 1. If _x_ is 1 and _y_ is 0, return 1. - 1. Else if _x_ is 0 and _y_ is 1, return 1. + 1. If _x_ = 1 and _y_ = 0, return 1. + 1. Else if _x_ = 0 and _y_ = 1, return 1. 1. Else, return 0. @@ -3954,7 +3954,7 @@

    The Set and Relation Specification Types

  • For all _a_, _b_, and _c_ in _R_'s domain:

      -
    • _a_ is identical to _b_ or _a_ _R_ _b_ or _b_ _R_ _a_, and
    • +
    • _a_ is _b_ or _a_ _R_ _b_ or _b_ _R_ _a_, and
    • It is not the case that _a_ _R_ _a_, and
    • If _a_ _R_ _b_ and _b_ _R_ _c_, then _a_ _R_ _c_.
    @@ -4868,7 +4868,7 @@

    Number - If _argument_ is *+0*𝔽, *-0*𝔽, or *NaN*, return *false*; otherwise return *true*. + If _argument_ is any of *+0*𝔽, *-0*𝔽, or *NaN*, return *false*; otherwise return *true*. @@ -4892,7 +4892,7 @@

    BigInt - If _argument_ is *0*, return *false*; otherwise return *true*. + If _argument_ = *0*, return *false*; otherwise return *true*. @@ -5182,7 +5182,7 @@

    1. Let _number_ be ? ToNumber(_argument_). - 1. If _number_ is *NaN*, *+0*𝔽, or *-0*𝔽, return 0. + 1. If _number_ is any of *NaN*, *+0*𝔽, or *-0*𝔽, return 0. 1. If _number_ is *+∞*𝔽, return +∞. 1. If _number_ is *-∞*𝔽, return -∞. 1. Let _integer_ be floor(abs(ℝ(_number_))). @@ -5203,7 +5203,7 @@

    1. Let _number_ be ? ToNumber(_argument_). - 1. If _number_ is *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. + 1. If _number_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. 1. Let _int_ be the mathematical value whose sign is the sign of _number_ and whose magnitude is floor(abs(ℝ(_number_))). 1. Let _int32bit_ be _int_ modulo 232. 1. If _int32bit_ ≥ 231, return 𝔽(_int32bit_ - 232); otherwise return 𝔽(_int32bit_). @@ -5236,7 +5236,7 @@

    1. Let _number_ be ? ToNumber(_argument_). - 1. If _number_ is *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. + 1. If _number_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. 1. Let _int_ be the mathematical value whose sign is the sign of _number_ and whose magnitude is floor(abs(ℝ(_number_))). 1. Let _int32bit_ be _int_ modulo 232. 1. [id="step-touint32-return"] Return 𝔽(_int32bit_). @@ -5272,7 +5272,7 @@

    1. Let _number_ be ? ToNumber(_argument_). - 1. If _number_ is *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. + 1. If _number_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. 1. Let _int_ be the mathematical value whose sign is the sign of _number_ and whose magnitude is floor(abs(ℝ(_number_))). 1. Let _int16bit_ be _int_ modulo 216. 1. If _int16bit_ ≥ 215, return 𝔽(_int16bit_ - 216); otherwise return 𝔽(_int16bit_). @@ -5291,7 +5291,7 @@

    1. Let _number_ be ? ToNumber(_argument_). - 1. If _number_ is *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. + 1. If _number_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. 1. Let _int_ be the mathematical value whose sign is the sign of _number_ and whose magnitude is floor(abs(ℝ(_number_))). 1. [id="step-touint16-mod"] Let _int16bit_ be _int_ modulo 216. 1. Return 𝔽(_int16bit_). @@ -5321,7 +5321,7 @@

    1. Let _number_ be ? ToNumber(_argument_). - 1. If _number_ is *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. + 1. If _number_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. 1. Let _int_ be the mathematical value whose sign is the sign of _number_ and whose magnitude is floor(abs(ℝ(_number_))). 1. Let _int8bit_ be _int_ modulo 28. 1. If _int8bit_ ≥ 27, return 𝔽(_int8bit_ - 28); otherwise return 𝔽(_int8bit_). @@ -5340,7 +5340,7 @@

    1. Let _number_ be ? ToNumber(_argument_). - 1. If _number_ is *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. + 1. If _number_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return *+0*𝔽. 1. Let _int_ be the mathematical value whose sign is the sign of _number_ and whose magnitude is floor(abs(ℝ(_number_))). 1. Let _int8bit_ be _int_ modulo 28. 1. Return 𝔽(_int8bit_). @@ -5769,7 +5769,7 @@

    1. If _argument_ is *"-0"*, return *-0*𝔽. 1. Let _n_ be ! ToNumber(_argument_). - 1. If SameValue(! ToString(_n_), _argument_) is *true*, return _n_. + 1. If ! ToString(_n_) is _argument_, return _n_. 1. Return *undefined*.

    A canonical numeric string is any String value for which the CanonicalNumericIndexString abstract operation does not return *undefined*.

    @@ -5969,7 +5969,7 @@

    1. If Type(_argument_) is not Number, return *false*. - 1. If _argument_ is *NaN*, *+∞*𝔽, or *-∞*𝔽, return *false*. + 1. If _argument_ is any of *NaN*, *+∞*𝔽, or *-∞*𝔽, return *false*. 1. If floor(abs(ℝ(_argument_))) ≠ abs(ℝ(_argument_)), return *false*. 1. Return *true*. @@ -6042,7 +6042,7 @@

    It determines whether or not the two arguments are the same value.
    - 1. If Type(_x_) is different from Type(_y_), return *false*. + 1. If Type(_x_) is not Type(_y_), return *false*. 1. If Type(_x_) is Number, then 1. Return Number::sameValue(_x_, _y_). 1. If Type(_x_) is BigInt, then @@ -6066,7 +6066,7 @@

    It determines whether or not the two arguments are the same value (ignoring the difference between *+0*𝔽 and *-0*𝔽).
    - 1. If Type(_x_) is different from Type(_y_), return *false*. + 1. If Type(_x_) is not Type(_y_), return *false*. 1. If Type(_x_) is Number, then 1. Return Number::sameValueZero(_x_, _y_). 1. If Type(_x_) is BigInt, then @@ -6089,16 +6089,20 @@

    1. Assert: Type(_x_) is the same as Type(_y_). - 1. If Type(_x_) is Undefined, return *true*. - 1. If Type(_x_) is Null, return *true*. + 1. If _x_ is either *null* or *undefined*, return *true*. 1. If Type(_x_) is String, then - 1. If _x_ and _y_ are exactly the same sequence of code units (same length and same code units at corresponding indices), return *true*; otherwise, return *false*. + 1. If _x_ and _y_ have the same length and the same code units in the same positions, return *true*; otherwise, return *false*. 1. If Type(_x_) is Boolean, then 1. If _x_ and _y_ are both *true* or both *false*, return *true*; otherwise, return *false*. - 1. If Type(_x_) is Symbol, then - 1. If _x_ and _y_ are both the same Symbol value, return *true*; otherwise, return *false*. - 1. If _x_ and _y_ are the same Object value, return *true*. Otherwise, return *false*. + 1. NOTE: All other ECMAScript language values are compared by identity. + 1. If _x_ is _y_, return *true*; otherwise, return *false*. + + For expository purposes, some cases are handled separately within this algorithm even if it is unnecessary to do so. + + + The specifics of what "_x_ is _y_" means are detailed in . + @@ -6114,7 +6118,7 @@

    It provides the semantics for the comparison _x_ < _y_, returning *true*, *false*, or *undefined* (which indicates that at least one operand is *NaN*). The _LeftFirst_ flag is used to control the order in which operations with potentially visible side-effects are performed upon _x_ and _y_. It is necessary because ECMAScript specifies left to right evaluation of expressions. If _LeftFirst_ is *true*, the _x_ parameter corresponds to an expression that occurs to the left of the _y_ parameter's corresponding expression. If _LeftFirst_ is *false*, the reverse is the case and operations must be performed upon _y_ before _x_.
    - 1. If the _LeftFirst_ flag is *true*, then + 1. If _LeftFirst_ is *true*, then 1. Let _px_ be ? ToPrimitive(_x_, ~number~). 1. Let _py_ be ? ToPrimitive(_y_, ~number~). 1. Else, @@ -6142,7 +6146,7 @@

    1. NOTE: Because _px_ and _py_ are primitive values, evaluation order is not important. 1. Let _nx_ be ? ToNumeric(_px_). 1. Let _ny_ be ? ToNumeric(_py_). - 1. If Type(_nx_) is the same as Type(_ny_), then + 1. If Type(_nx_) is Type(_ny_), then 1. If Type(_nx_) is Number, then 1. Return Number::lessThan(_nx_, _ny_). 1. Else, @@ -6174,7 +6178,7 @@

    It provides the semantics for the comparison _x_ == _y_.
    - 1. If Type(_x_) is the same as Type(_y_), then + 1. If Type(_x_) is Type(_y_), then 1. Return IsStrictlyEqual(_x_, _y_). 1. If _x_ is *null* and _y_ is *undefined*, return *true*. 1. If _x_ is *undefined* and _y_ is *null*, return *true*. @@ -6190,7 +6194,7 @@

    1. If Type(_y_) is Boolean, return ! IsLooselyEqual(_x_, ! ToNumber(_y_)). 1. If Type(_x_) is either String, Number, BigInt, or Symbol and Type(_y_) is Object, return ! IsLooselyEqual(_x_, ? ToPrimitive(_y_)). 1. If Type(_x_) is Object and Type(_y_) is either String, Number, BigInt, or Symbol, return ! IsLooselyEqual(? ToPrimitive(_x_), _y_). - 1. If Type(_x_) is BigInt and Type(_y_) is Number, or if Type(_x_) is Number and Type(_y_) is BigInt, then + 1. If Type(_x_) is BigInt and Type(_y_) is Number, or Type(_x_) is Number and Type(_y_) is BigInt, then 1. If _x_ or _y_ are any of *NaN*, *+∞*𝔽, or *-∞*𝔽, return *false*. 1. If ℝ(_x_) = ℝ(_y_), return *true*; otherwise return *false*. 1. Return *false*. @@ -6209,7 +6213,7 @@

    It provides the semantics for the comparison _x_ === _y_.
    - 1. If Type(_x_) is different from Type(_y_), return *false*. + 1. If Type(_x_) is not Type(_y_), return *false*. 1. If Type(_x_) is Number, then 1. Return Number::equal(_x_, _y_). 1. If Type(_x_) is BigInt, then @@ -6643,7 +6647,7 @@

    1. Repeat, while _index_ < _len_, 1. Let _indexName_ be ! ToString(𝔽(_index_)). 1. Let _next_ be ? Get(_obj_, _indexName_). - 1. If Type(_next_) is not an element of _elementTypes_, throw a *TypeError* exception. + 1. If _elementTypes_ does not contain Type(_next_), throw a *TypeError* exception. 1. Append _next_ to _list_. 1. Set _index_ to _index_ + 1. 1. Return _list_. @@ -6782,7 +6786,7 @@

    - 1. If _source_ is *undefined* or *null*, return ~unused~. + 1. If _source_ is either *undefined* or *null*, return ~unused~. 1. Let _from_ be ! ToObject(_source_). 1. Let _keys_ be ? _from_.[[OwnPropertyKeys]](). 1. For each element _nextKey_ of _keys_, do @@ -6893,7 +6897,7 @@

    1. Let _entry_ be PrivateElementFind(_O_, _P_). 1. If _entry_ is ~empty~, throw a *TypeError* exception. - 1. If _entry_.[[Kind]] is ~field~ or ~method~, then + 1. If _entry_.[[Kind]] is either ~field~ or ~method~, then 1. Return _entry_.[[Value]]. 1. Assert: _entry_.[[Kind]] is ~accessor~. 1. If _entry_.[[Get]] is *undefined*, throw a *TypeError* exception. @@ -8325,7 +8329,7 @@

    Static Semantics: TopLevelLexicallyDeclaredNames ( ): a List of Strings

    StatementListItem : Declaration - 1. If |Declaration| is Declaration : HoistableDeclaration , then + 1. If |Declaration| is Declaration : HoistableDeclaration, then 1. Return a new empty List. 1. Return the BoundNames of |Declaration|. @@ -8350,7 +8354,7 @@

    Static Semantics: TopLevelLexicallyScopedDeclarations ( ): a List of Parse N StatementListItem : Declaration - 1. If |Declaration| is Declaration : HoistableDeclaration , then + 1. If |Declaration| is Declaration : HoistableDeclaration, then 1. Return a new empty List. 1. Return « |Declaration| ». @@ -8368,13 +8372,13 @@

    Static Semantics: TopLevelVarDeclaredNames ( ): a List of Strings

    StatementListItem : Declaration - 1. If |Declaration| is Declaration : HoistableDeclaration , then + 1. If |Declaration| is Declaration : HoistableDeclaration, then 1. Return the BoundNames of |HoistableDeclaration|. 1. Return a new empty List. StatementListItem : Statement - 1. If |Statement| is Statement : LabelledStatement , return TopLevelVarDeclaredNames of |Statement|. + 1. If |Statement| is Statement : LabelledStatement, return TopLevelVarDeclaredNames of |Statement|. 1. Return VarDeclaredNames of |Statement|. @@ -8386,7 +8390,7 @@

    Static Semantics: TopLevelVarDeclaredNames ( ): a List of Strings

    LabelledItem : Statement - 1. If |Statement| is Statement : LabelledStatement , return TopLevelVarDeclaredNames of |Statement|. + 1. If |Statement| is Statement : LabelledStatement, return TopLevelVarDeclaredNames of |Statement|. 1. Return VarDeclaredNames of |Statement|. LabelledItem : FunctionDeclaration @@ -8407,12 +8411,12 @@

    Static Semantics: TopLevelVarScopedDeclarations ( ): a List of Parse Nodes StatementListItem : Statement - 1. If |Statement| is Statement : LabelledStatement , return TopLevelVarScopedDeclarations of |Statement|. + 1. If |Statement| is Statement : LabelledStatement, return TopLevelVarScopedDeclarations of |Statement|. 1. Return VarScopedDeclarations of |Statement|. StatementListItem : Declaration - 1. If |Declaration| is Declaration : HoistableDeclaration , then + 1. If |Declaration| is Declaration : HoistableDeclaration, then 1. Let _declaration_ be DeclarationPart of |HoistableDeclaration|. 1. Return « _declaration_ ». 1. Return a new empty List. @@ -8423,7 +8427,7 @@

    Static Semantics: TopLevelVarScopedDeclarations ( ): a List of Parse Nodes LabelledItem : Statement - 1. If |Statement| is Statement : LabelledStatement , return TopLevelVarScopedDeclarations of |Statement|. + 1. If |Statement| is Statement : LabelledStatement, return TopLevelVarScopedDeclarations of |Statement|. 1. Return VarScopedDeclarations of |Statement|. LabelledItem : FunctionDeclaration @@ -8554,7 +8558,7 @@

    LabelledStatement : LabelIdentifier `:` LabelledItem 1. Let _label_ be the StringValue of |LabelIdentifier|. - 1. If _label_ is an element of _labelSet_, return *true*. + 1. If _labelSet_ contains _label_, return *true*. 1. Let _newLabelSet_ be the list-concatenation of _labelSet_ and « _label_ ». 1. Return ContainsDuplicateLabels of |LabelledItem| with argument _newLabelSet_. @@ -8692,7 +8696,7 @@

    BreakStatement : `break` LabelIdentifier `;` - 1. If the StringValue of |LabelIdentifier| is not an element of _labelSet_, return *true*. + 1. If _labelSet_ does not contain the StringValue of |LabelIdentifier|, return *true*. 1. Return *false*. WithStatement : `with` `(` Expression `)` Statement @@ -8881,7 +8885,7 @@

    ContinueStatement : `continue` LabelIdentifier `;` - 1. If the StringValue of |LabelIdentifier| is not an element of _iterationSet_, return *true*. + 1. If _iterationSet_ does not contain the StringValue of |LabelIdentifier|, return *true*. 1. Return *false*. WithStatement : `with` `(` Expression `)` Statement @@ -9375,7 +9379,7 @@

    ArrowFunction : ArrowParameters `=>` ConciseBody - 1. If _symbol_ is not one of |NewTarget|, |SuperProperty|, |SuperCall|, `super` or `this`, return *false*. + 1. If _symbol_ is not any of |NewTarget|, |SuperProperty|, |SuperCall|, `super` or `this`, return *false*. 1. If |ArrowParameters| Contains _symbol_ is *true*, return *true*. 1. Return |ConciseBody| Contains _symbol_. @@ -9388,14 +9392,14 @@

    AsyncArrowFunction : `async` AsyncArrowBindingIdentifier `=>` AsyncConciseBody - 1. If _symbol_ is not one of |NewTarget|, |SuperProperty|, |SuperCall|, `super`, or `this`, return *false*. + 1. If _symbol_ is not any of |NewTarget|, |SuperProperty|, |SuperCall|, `super`, or `this`, return *false*. 1. Return |AsyncConciseBody| Contains _symbol_. AsyncArrowFunction : CoverCallExpressionAndAsyncArrowHead `=>` AsyncConciseBody - 1. If _symbol_ is not one of |NewTarget|, |SuperProperty|, |SuperCall|, `super`, or `this`, return *false*. + 1. If _symbol_ is not any of |NewTarget|, |SuperProperty|, |SuperCall|, `super`, or `this`, return *false*. 1. Let _head_ be the |AsyncArrowHead| that is covered by |CoverCallExpressionAndAsyncArrowHead|. 1. If _head_ Contains _symbol_ is *true*, return *true*. 1. Return |AsyncConciseBody| Contains _symbol_. @@ -9816,7 +9820,7 @@

    Static Semantics: AssignmentTargetType ( ): ~simple~ or ~invalid~

    IdentifierReference : Identifier - 1. If this |IdentifierReference| is contained in strict mode code and StringValue of |Identifier| is *"eval"* or *"arguments"*, return ~invalid~. + 1. If this |IdentifierReference| is in strict mode code and StringValue of |Identifier| is either *"eval"* or *"arguments"*, return ~invalid~. 1. Return ~simple~. @@ -10198,7 +10202,7 @@

    It determines if the argument identifier is one of the identifiers bound by the record.
    - 1. If _envRec_ has a binding for the name that is the value of _N_, return *true*. + 1. If _envRec_ has a binding for the name _N_, return *true*. 1. Return *false*. @@ -10257,7 +10261,7 @@

    a Declarative Environment Record _envRec_
    description
    -
    It is used to set the bound value of the current binding of the identifier whose name is the value of the argument _N_ to the value of argument _V_. An uninitialized binding for _N_ must already exist.
    +
    It is used to set the bound value of the current binding of the identifier whose name is _N_ to the value _V_. An uninitialized binding for _N_ must already exist.
    1. Assert: _envRec_ must have an uninitialized binding for _N_. @@ -10280,7 +10284,7 @@

    a Declarative Environment Record _envRec_
    description
    -
    It attempts to change the bound value of the current binding of the identifier whose name is the value of the argument _N_ to the value of argument _V_. A binding for _N_ normally already exists, but in rare cases it may not. If the binding is an immutable binding, a *TypeError* is thrown if _S_ is *true*.
    +
    It attempts to change the bound value of the current binding of the identifier whose name is _N_ to the value _V_. A binding for _N_ normally already exists, but in rare cases it may not. If the binding is an immutable binding, a *TypeError* is thrown if _S_ is *true*.
    1. [id="step-setmutablebinding-missing-binding"] If _envRec_ does not have a binding for _N_, then @@ -10314,7 +10318,7 @@

    a Declarative Environment Record _envRec_
    description
    -
    It returns the value of its bound identifier whose name is the value of the argument _N_. If the binding exists but is uninitialized a *ReferenceError* is thrown, regardless of the value of _S_.
    +
    It returns the value of its bound identifier whose name is _N_. If the binding exists but is uninitialized a *ReferenceError* is thrown, regardless of the value of _S_.
    1. Assert: _envRec_ has a binding for _N_. @@ -10337,7 +10341,7 @@

    It can only delete bindings that have been explicitly designated as being subject to deletion.
    - 1. Assert: _envRec_ has a binding for the name that is the value of _N_. + 1. Assert: _envRec_ has a binding for the name that is _N_. 1. If the binding for _N_ in _envRec_ cannot be deleted, return *false*. 1. Remove the binding for _N_ from _envRec_. 1. Return *true*. @@ -10439,7 +10443,7 @@

    an Object Environment Record _envRec_
    description
    -
    It determines if its associated binding object has a property whose name is the value of the argument _N_.
    +
    It determines if its associated binding object has a property whose name is _N_.
    1. Let _bindingObject_ be _envRec_.[[BindingObject]]. @@ -10466,7 +10470,7 @@

    an Object Environment Record _envRec_
    description
    -
    It creates in an Environment Record's associated binding object a property whose name is the String value and initializes it to the value *undefined*. If _D_ is *true*, the new property's [[Configurable]] attribute is set to *true*; otherwise it is set to *false*.
    +
    It creates in an Environment Record's associated binding object a property whose name is _N_ and initializes it to the value *undefined*. If _D_ is *true*, the new property's [[Configurable]] attribute is set to *true*; otherwise it is set to *false*.
    1. Let _bindingObject_ be _envRec_.[[BindingObject]]. @@ -10495,7 +10499,7 @@

    an Object Environment Record _envRec_
    description
    -
    It is used to set the bound value of the current binding of the identifier whose name is the value of the argument _N_ to the value of argument _V_.
    +
    It is used to set the bound value of the current binding of the identifier whose name is _N_ to the value _V_.
    1. Perform ? _envRec_.SetMutableBinding(_N_, _V_, *false*). @@ -10519,7 +10523,7 @@

    an Object Environment Record _envRec_
    description
    -
    It attempts to set the value of the Environment Record's associated binding object's property whose name is the value of the argument _N_ to the value of argument _V_. A property named _N_ normally already exists but if it does not or is not currently writable, error handling is determined by _S_.
    +
    It attempts to set the value of the Environment Record's associated binding object's property whose name is _N_ to the value _V_. A property named _N_ normally already exists but if it does not or is not currently writable, error handling is determined by _S_.
    1. Let _bindingObject_ be _envRec_.[[BindingObject]]. @@ -10542,7 +10546,7 @@

    an Object Environment Record _envRec_
    description
    -
    It returns the value of its associated binding object's property whose name is the String value of the argument identifier _N_. The property should already exist but if it does not the result depends upon _S_.
    +
    It returns the value of its associated binding object's property whose name is _N_. The property should already exist but if it does not the result depends upon _S_.
    1. Let _bindingObject_ be _envRec_.[[BindingObject]]. @@ -10913,7 +10917,7 @@

    Global Environment Records

    CreateGlobalVarBinding(N, D) - Used to create and initialize to *undefined* a global `var` binding in the [[ObjectRecord]] component of a Global Environment Record. The binding will be a mutable binding. The corresponding global object property will have attribute values appropriate for a `var`. The String value _N_ is the bound name. If _D_ is *true* the binding may be deleted. Logically equivalent to CreateMutableBinding followed by a SetMutableBinding but it allows var declarations to receive special treatment. + Used to create and initialize to *undefined* a global `var` binding in the [[ObjectRecord]] component of a Global Environment Record. The binding will be a mutable binding. The corresponding global object property will have attribute values appropriate for a `var`. The String value _N_ is the bound name. If _D_ is *true*, the binding may be deleted. Logically equivalent to CreateMutableBinding followed by a SetMutableBinding but it allows var declarations to receive special treatment. @@ -10921,7 +10925,7 @@

    Global Environment Records

    CreateGlobalFunctionBinding(N, V, D) - Create and initialize a global `function` binding in the [[ObjectRecord]] component of a Global Environment Record. The binding will be a mutable binding. The corresponding global object property will have attribute values appropriate for a `function`. The String value _N_ is the bound name. _V_ is the initialization value. If the Boolean argument _D_ is *true* the binding may be deleted. Logically equivalent to CreateMutableBinding followed by a SetMutableBinding but it allows function declarations to receive special treatment. + Create and initialize a global `function` binding in the [[ObjectRecord]] component of a Global Environment Record. The binding will be a mutable binding. The corresponding global object property will have attribute values appropriate for a `function`. The String value _N_ is the bound name. _V_ is the initialization value. If the Boolean argument _D_ is *true*, the binding may be deleted. Logically equivalent to CreateMutableBinding followed by a SetMutableBinding but it allows function declarations to receive special treatment. @@ -11003,7 +11007,7 @@

    a Global Environment Record _envRec_
    description
    -
    It is used to set the bound value of the current binding of the identifier whose name is the value of the argument _N_ to the value of argument _V_. An uninitialized binding for _N_ must already exist.
    +
    It is used to set the bound value of the current binding of the identifier whose name is _N_ to the value _V_. An uninitialized binding for _N_ must already exist.
    1. Let _DclRec_ be _envRec_.[[DeclarativeRecord]]. @@ -11028,7 +11032,7 @@

    a Global Environment Record _envRec_
    description
    -
    It attempts to change the bound value of the current binding of the identifier whose name is the value of the argument _N_ to the value of argument _V_. If the binding is an immutable binding, a *TypeError* is thrown if _S_ is *true*. A property named _N_ normally already exists but if it does not or is not currently writable, error handling is determined by _S_.
    +
    It attempts to change the bound value of the current binding of the identifier whose name is _N_ to the value _V_. If the binding is an immutable binding and _S_ is *true*, a *TypeError* is thrown. A property named _N_ normally already exists but if it does not or is not currently writable, error handling is determined by _S_.
    1. Let _DclRec_ be _envRec_.[[DeclarativeRecord]]. @@ -11051,7 +11055,7 @@

    a Global Environment Record _envRec_
    description
    -
    It returns the value of its bound identifier whose name is the value of the argument _N_. If the binding is an uninitialized binding throw a *ReferenceError* exception. A property named _N_ normally already exists but if it does not or is not currently writable, error handling is determined by _S_.
    +
    It returns the value of its bound identifier whose name is _N_. If the binding is an uninitialized binding throw a *ReferenceError* exception. A property named _N_ normally already exists but if it does not or is not currently writable, error handling is determined by _S_.
    1. Let _DclRec_ be _envRec_.[[DeclarativeRecord]]. @@ -11086,7 +11090,7 @@

    1. Let _status_ be ? _ObjRec_.DeleteBinding(_N_). 1. If _status_ is *true*, then 1. Let _varNames_ be _envRec_.[[VarNames]]. - 1. If _N_ is an element of _varNames_, remove that element from the _varNames_. + 1. If _varNames_ contains _N_, remove _N_ from _varNames_. 1. Return _status_. 1. Return *true*. @@ -11364,7 +11368,7 @@

    a Module Environment Record _envRec_
    description
    -
    It returns the value of its bound identifier whose name is the value of the argument _N_. However, if the binding is an indirect binding the value of the target binding is returned. If the binding exists but is uninitialized a *ReferenceError* is thrown.
    +
    It returns the value of its bound identifier whose name is _N_. However, if the binding is an indirect binding the value of the target binding is returned. If the binding exists but is uninitialized a *ReferenceError* is thrown.
    1. Assert: _S_ is *true*. @@ -11432,7 +11436,7 @@

    1. Assert: _envRec_ does not already have a binding for _N_. - 1. Assert: When _M_.[[Environment]] is instantiated it will have a direct binding for _N2_. + 1. Assert: When _M_.[[Environment]] is instantiated, it will have a direct binding for _N2_. 1. Create an immutable indirect binding in _envRec_ for _N_ that references _M_ and _N2_ as its target binding and record that the binding is initialized. 1. Return ~unused~. @@ -11455,7 +11459,7 @@

    - 1. If _env_ is the value *null*, then + 1. If _env_ is *null*, then 1. Return the Reference Record { [[Base]]: ~unresolvable~, [[ReferencedName]]: _name_, [[Strict]]: _strict_, [[ThisValue]]: ~empty~ }. 1. Let _exists_ be ? _env_.HasBinding(_name_). 1. If _exists_ is *true*, then @@ -11632,9 +11636,9 @@

    1. Let _names_ be _privEnv_.[[Names]]. - 1. If _names_ contains a Private Name whose [[Description]] is _identifier_, then - 1. Let _name_ be that Private Name. - 1. Return _name_. + 1. For each Private Name _pn_ in _names_, do + 1. If _pn_.[[Description]] is _identifier_, then + 1. Return _pn_. 1. Else, 1. Let _outerPrivEnv_ be _privEnv_.[[OuterPrivateEnvironment]]. 1. Assert: _outerPrivEnv_ is not *null*. @@ -11931,7 +11935,7 @@

    It is used to determine the binding of _name_. _env_ can be used to explicitly provide the Environment Record that is to be searched for the binding.
    - 1. If _env_ is not present or if _env_ is *undefined*, then + 1. If _env_ is not present or _env_ is *undefined*, then 1. Set _env_ to the running execution context's LexicalEnvironment. 1. Assert: _env_ is an Environment Record. 1. If the source text matched by the syntactic production that is being evaluated is contained in strict mode code, let _strict_ be *true*; else let _strict_ be *false*. @@ -13355,7 +13359,7 @@

    1. Let _localEnv_ be the LexicalEnvironment of _calleeContext_. 1. If _thisMode_ is ~strict~, let _thisValue_ be _thisArgument_. 1. Else, - 1. If _thisArgument_ is *undefined* or *null*, then + 1. If _thisArgument_ is either *undefined* or *null*, then 1. Let _globalEnv_ be _calleeRealm_.[[GlobalEnv]]. 1. Assert: _globalEnv_ is a Global Environment Record. 1. Let _thisValue_ be _globalEnv_.[[GlobalThisValue]]. @@ -13731,7 +13735,7 @@

    1. If _d_ is neither a |VariableDeclaration| nor a |ForBinding| nor a |BindingIdentifier|, then 1. Assert: _d_ is either a |FunctionDeclaration|, a |GeneratorDeclaration|, an |AsyncFunctionDeclaration|, or an |AsyncGeneratorDeclaration|. 1. Let _fn_ be the sole element of the BoundNames of _d_. - 1. If _fn_ is not an element of _functionNames_, then + 1. If _functionNames_ does not contain _fn_, then 1. Insert _fn_ as the first element of _functionNames_. 1. NOTE: If there are multiple function declarations for the same name, the last declaration is used. 1. Insert _d_ as the first element of _functionsToInitialize_. @@ -13739,12 +13743,12 @@

    1. If _func_.[[ThisMode]] is ~lexical~, then 1. NOTE: Arrow functions never have an arguments object. 1. Set _argumentsObjectNeeded_ to *false*. - 1. Else if *"arguments"* is an element of _parameterNames_, then + 1. Else if _parameterNames_ contains *"arguments"*, then 1. Set _argumentsObjectNeeded_ to *false*. 1. Else if _hasParameterExpressions_ is *false*, then - 1. If *"arguments"* is an element of _functionNames_ or if *"arguments"* is an element of _lexicalNames_, then + 1. If _functionNames_ contains *"arguments"* or _lexicalNames_ contains *"arguments"*, then 1. Set _argumentsObjectNeeded_ to *false*. - 1. If _strict_ is *true* or if _hasParameterExpressions_ is *false*, then + 1. If _strict_ is *true* or _hasParameterExpressions_ is *false*, then 1. NOTE: Only a single Environment Record is needed for the parameters, since calls to `eval` in strict mode code cannot create new bindings which are visible outside of the `eval`. 1. Let _env_ be the LexicalEnvironment of _calleeContext_. 1. Else, @@ -13761,7 +13765,7 @@

    1. If _hasDuplicates_ is *true*, then 1. Perform ! _env_.InitializeBinding(_paramName_, *undefined*). 1. If _argumentsObjectNeeded_ is *true*, then - 1. If _strict_ is *true* or if _simpleParameterList_ is *false*, then + 1. If _strict_ is *true* or _simpleParameterList_ is *false*, then 1. Let _ao_ be CreateUnmappedArgumentsObject(_argumentsList_). 1. Else, 1. NOTE: A mapped argument object is only provided for non-strict functions that don't have a rest parameter, any parameter default value initializers, or any destructured parameters. @@ -13784,7 +13788,7 @@

    1. NOTE: Only a single Environment Record is needed for the parameters and top-level vars. 1. Let _instantiatedVarNames_ be a copy of the List _parameterBindings_. 1. For each element _n_ of _varNames_, do - 1. If _n_ is not an element of _instantiatedVarNames_, then + 1. If _instantiatedVarNames_ does not contain _n_, then 1. Append _n_ to _instantiatedVarNames_. 1. Perform ! _env_.CreateMutableBinding(_n_, *false*). 1. Perform ! _env_.InitializeBinding(_n_, *undefined*). @@ -13795,10 +13799,10 @@

    1. Set the VariableEnvironment of _calleeContext_ to _varEnv_. 1. Let _instantiatedVarNames_ be a new empty List. 1. For each element _n_ of _varNames_, do - 1. If _n_ is not an element of _instantiatedVarNames_, then + 1. If _instantiatedVarNames_ does not contain _n_, then 1. Append _n_ to _instantiatedVarNames_. 1. Perform ! _varEnv_.CreateMutableBinding(_n_, *false*). - 1. If _n_ is not an element of _parameterBindings_ or if _n_ is an element of _functionNames_, let _initialValue_ be *undefined*. + 1. If _parameterBindings_ does not contain _n_, or _functionNames_ contains _n_, let _initialValue_ be *undefined*. 1. Else, 1. Let _initialValue_ be ! _env_.GetBindingValue(_n_, *false*). 1. Perform ! _varEnv_.InitializeBinding(_n_, _initialValue_). @@ -14060,7 +14064,7 @@

    Array Exotic Objects

    An Array is an exotic object that gives special treatment to array index property keys (see ). A property whose property name is an array index is also called an element. Every Array has a non-configurable *"length"* property whose value is always a non-negative integral Number whose mathematical value is less than 232. The value of the *"length"* property is numerically greater than the name of every own property whose name is an array index; whenever an own property of an Array is created or changed, other properties are adjusted as necessary to maintain this invariant. Specifically, whenever an own property is added whose name is an array index, the value of the *"length"* property is changed, if necessary, to be one more than the numeric value of that array index; and whenever the value of the *"length"* property is changed, every own property whose name is an array index whose value is not smaller than the new length is deleted. This constraint applies only to own properties of an Array and is unaffected by *"length"* or array index properties that may be inherited from its prototypes.

    -

    A String property name _P_ is an array index if and only if ToString(ToUint32(_P_)) equals _P_ and ToUint32(_P_) is not the same value as 𝔽(232 - 1).

    +

    A String property name _P_ is an array index if and only if ToString(ToUint32(_P_)) is _P_ and ToUint32(_P_) is not 𝔽(232 - 1).

    An object is an Array exotic object (or simply, an Array) if its [[DefineOwnProperty]] internal method uses the following implementation, and its other essential internal methods use the definitions found in . These methods are installed in ArrayCreate.

    @@ -14183,7 +14187,7 @@

    1. Set _newLenDesc_.[[Writable]] to *true*. 1. Let _succeeded_ be ! OrdinaryDefineOwnProperty(_A_, *"length"*, _newLenDesc_). 1. If _succeeded_ is *false*, return *false*. - 1. For each own property key _P_ of _A_ that is an array index, whose numeric value is greater than or equal to _newLen_, in descending numeric index order, do + 1. For each own property key _P_ of _A_ such that _P_ is an array index and ! ToIntegerOrInfinity(_P_) ≥ _newLen_, in descending numeric index order, do 1. Let _deleteSucceeded_ be ! _A_.[[Delete]](_P_). 1. If _deleteSucceeded_ is *false*, then 1. Set _newLenDesc_.[[Value]] to ! ToUint32(_P_) + *1*𝔽. @@ -14381,7 +14385,7 @@

    1. Let _isMapped_ be ! HasOwnProperty(_map_, _P_). 1. Let _newArgDesc_ be _Desc_. 1. If _isMapped_ is *true* and IsDataDescriptor(_Desc_) is *true*, then - 1. If _Desc_ does not have a [[Value]] field, and _Desc_ has a [[Writable]] field, and _Desc_.[[Writable]] is *false*, then + 1. If _Desc_ does not have a [[Value]] field, _Desc_ has a [[Writable]] field, and _Desc_.[[Writable]] is *false*, then 1. Set _newArgDesc_ to a copy of _Desc_. 1. Set _newArgDesc_.[[Value]] to ! Get(_map_, _P_). 1. Let _allowed_ be ! OrdinaryDefineOwnProperty(_args_, _P_, _newArgDesc_). @@ -14525,7 +14529,7 @@

    1. Set _index_ to _numberOfParameters_ - 1. 1. Repeat, while _index_ ≥ 0, 1. Let _name_ be _parameterNames_[_index_]. - 1. If _name_ is not an element of _mappedNames_, then + 1. If _mappedNames_ does not contain _name_, then 1. Append _name_ to _mappedNames_. 1. If _index_ < _len_, then 1. Let _g_ be MakeArgGetter(_name_, _env_). @@ -14640,10 +14644,10 @@

    1. Let _numericIndex_ be CanonicalNumericIndexString(_P_). 1. If _numericIndex_ is not *undefined*, then 1. If IsValidIntegerIndex(_O_, _numericIndex_) is *false*, return *false*. - 1. If _Desc_ has a [[Configurable]] field and if _Desc_.[[Configurable]] is *false*, return *false*. - 1. If _Desc_ has an [[Enumerable]] field and if _Desc_.[[Enumerable]] is *false*, return *false*. + 1. If _Desc_ has a [[Configurable]] field and _Desc_.[[Configurable]] is *false*, return *false*. + 1. If _Desc_ has an [[Enumerable]] field and _Desc_.[[Enumerable]] is *false*, return *false*. 1. If IsAccessorDescriptor(_Desc_) is *true*, return *false*. - 1. If _Desc_ has a [[Writable]] field and if _Desc_.[[Writable]] is *false*, return *false*. + 1. If _Desc_ has a [[Writable]] field and _Desc_.[[Writable]] is *false*, return *false*. 1. If _Desc_ has a [[Value]] field, perform ? IntegerIndexedElementSet(_O_, _numericIndex_, _Desc_.[[Value]]). 1. Return *true*. 1. Return ! OrdinaryDefineOwnProperty(_O_, _P_, _Desc_). @@ -14925,7 +14929,7 @@

    1. If Type(_P_) is Symbol, return OrdinaryGetOwnProperty(_O_, _P_). 1. Let _exports_ be _O_.[[Exports]]. - 1. If _P_ is not an element of _exports_, return *undefined*. + 1. If _exports_ does not contain _P_, return *undefined*. 1. Let _value_ be ? _O_.[[Get]](_P_, _O_). 1. Return PropertyDescriptor { [[Value]]: _value_, [[Writable]]: *true*, [[Enumerable]]: *true*, [[Configurable]]: *false* }. @@ -14968,7 +14972,7 @@

    1. If Type(_P_) is Symbol, return ! OrdinaryHasProperty(_O_, _P_). 1. Let _exports_ be _O_.[[Exports]]. - 1. If _P_ is an element of _exports_, return *true*. + 1. If _exports_ contains _P_, return *true*. 1. Return *false*. @@ -14988,7 +14992,7 @@

    1. If Type(_P_) is Symbol, then 1. Return ! OrdinaryGet(_O_, _P_, _Receiver_). 1. Let _exports_ be _O_.[[Exports]]. - 1. If _P_ is not an element of _exports_, return *undefined*. + 1. If _exports_ does not contain _P_, return *undefined*. 1. Let _m_ be _O_.[[Module]]. 1. Let _binding_ be ! _m_.ResolveExport(_P_). 1. Assert: _binding_ is a ResolvedBinding Record. @@ -15036,7 +15040,7 @@

    1. If Type(_P_) is Symbol, then 1. Return ! OrdinaryDelete(_O_, _P_). 1. Let _exports_ be _O_.[[Exports]]. - 1. If _P_ is an element of _exports_, return *false*. + 1. If _exports_ contains _P_, return *false*. 1. Return *true*. @@ -15478,7 +15482,7 @@

    1. If _booleanTrapResult_ is *false*, return *false*. 1. Let _targetDesc_ be ? _target_.[[GetOwnProperty]](_P_). 1. Let _extensibleTarget_ be ? IsExtensible(_target_). - 1. If _Desc_ has a [[Configurable]] field and if _Desc_.[[Configurable]] is *false*, then + 1. If _Desc_ has a [[Configurable]] field and _Desc_.[[Configurable]] is *false*, then 1. Let _settingConfigFalse_ be *true*. 1. Else, let _settingConfigFalse_ be *false*. 1. If _targetDesc_ is *undefined*, then @@ -15712,18 +15716,18 @@

    [[OwnPropertyKeys]] ( ): either a normal completion containing a List of pro 1. For each element _key_ of _targetKeys_, do 1. Let _desc_ be ? _target_.[[GetOwnProperty]](_key_). 1. If _desc_ is not *undefined* and _desc_.[[Configurable]] is *false*, then - 1. Append _key_ as an element of _targetNonconfigurableKeys_. + 1. Append _key_ to _targetNonconfigurableKeys_. 1. Else, - 1. Append _key_ as an element of _targetConfigurableKeys_. + 1. Append _key_ to _targetConfigurableKeys_. 1. If _extensibleTarget_ is *true* and _targetNonconfigurableKeys_ is empty, then 1. Return _trapResult_. 1. Let _uncheckedResultKeys_ be a List whose elements are the elements of _trapResult_. 1. For each element _key_ of _targetNonconfigurableKeys_, do - 1. If _key_ is not an element of _uncheckedResultKeys_, throw a *TypeError* exception. + 1. If _uncheckedResultKeys_ does not contain _key_, throw a *TypeError* exception. 1. Remove _key_ from _uncheckedResultKeys_. 1. If _extensibleTarget_ is *true*, return _trapResult_. 1. For each element _key_ of _targetConfigurableKeys_, do - 1. If _key_ is not an element of _uncheckedResultKeys_, throw a *TypeError* exception. + 1. If _uncheckedResultKeys_ does not contain _key_, throw a *TypeError* exception. 1. Remove _key_ from _uncheckedResultKeys_. 1. If _uncheckedResultKeys_ is not empty, throw a *TypeError* exception. 1. Return _trapResult_. @@ -15929,7 +15933,7 @@

    1. Assert: _position_ ≥ 0 and _position_ < _size_. 1. Let _first_ be the code unit at index _position_ within _string_. 1. Let _cp_ be the code point whose numeric value is that of _first_. - 1. If _first_ is not a or , then + 1. If _first_ is neither a nor a , then 1. Return the Record { [[CodePoint]]: _cp_, [[CodeUnitCount]]: 1, [[IsUnpairedSurrogate]]: *false* }. 1. If _first_ is a or _position_ + 1 = _size_, then 1. Return the Record { [[CodePoint]]: _cp_, [[CodeUnitCount]]: 1, [[IsUnpairedSurrogate]]: *true* }. @@ -17972,7 +17976,7 @@

    Static Semantics: Early Errors

    It is a Syntax Error if the goal symbol of the syntactic grammar is |Module| and the StringValue of |IdentifierName| is *"await"*.

  • - It is a Syntax Error if StringValue of |IdentifierName| is the same String value as the StringValue of any |ReservedWord| except for `yield` or `await`. + It is a Syntax Error if ther StringValue of |IdentifierName| is the StringValue of any |ReservedWord| except for `yield` or `await`.
@@ -18456,7 +18460,7 @@

1. Let _propKey_ be ? Evaluation of |PropertyName|. 1. If this |PropertyDefinition| is contained within a |Script| that is being evaluated for JSON.parse (see step of JSON.parse), then 1. Let _isProtoSetter_ be *false*. - 1. Else if _propKey_ is the String value *"__proto__"* and if IsComputedPropertyKey of |PropertyName| is *false*, then + 1. Else if _propKey_ is *"__proto__"* and if IsComputedPropertyKey of |PropertyName| is *false*, then 1. Let _isProtoSetter_ be *true*. 1. Else, 1. Let _isProtoSetter_ be *false*. @@ -18516,7 +18520,7 @@

It determines if its argument is a valid regular expression literal.
- 1. If FlagText of _literal_ contains any code points other than `d`, `g`, `i`, `m`, `s`, `u`, or `y`, or if it contains the same code point more than once, return *false*. + 1. If FlagText of _literal_ contains any code points other than `d`, `g`, `i`, `m`, `s`, `u`, or `y`, or _literal_ contains any code point more than once, return *false*. 1. Let _patternText_ be BodyText of _literal_. 1. If FlagText of _literal_ contains `u`, let _u_ be *true*; else let _u_ be *false*. 1. If _u_ is *false*, then @@ -19332,7 +19336,7 @@

Runtime Semantics: Evaluation

1. Let _baseReference_ be ? Evaluation of |MemberExpression|. 1. Let _baseValue_ be ? GetValue(_baseReference_). - 1. If _baseValue_ is *undefined* or *null*, then + 1. If _baseValue_ is either *undefined* or *null*, then 1. Return *undefined*. 1. Return ? ChainEvaluation of |OptionalChain| with arguments _baseValue_ and _baseReference_. @@ -19343,7 +19347,7 @@

Runtime Semantics: Evaluation

1. Let _baseReference_ be ? Evaluation of |CallExpression|. 1. Let _baseValue_ be ? GetValue(_baseReference_). - 1. If _baseValue_ is *undefined* or *null*, then + 1. If _baseValue_ is either *undefined* or *null*, then 1. Return *undefined*. 1. Return ? ChainEvaluation of |OptionalChain| with arguments _baseValue_ and _baseReference_. @@ -19354,7 +19358,7 @@

Runtime Semantics: Evaluation

1. Let _baseReference_ be ? Evaluation of |OptionalExpression|. 1. Let _baseValue_ be ? GetValue(_baseReference_). - 1. If _baseValue_ is *undefined* or *null*, then + 1. If _baseValue_ is either *undefined* or *null*, then 1. Return *undefined*. 1. Return ? ChainEvaluation of |OptionalChain| with arguments _baseValue_ and _baseReference_. @@ -20124,7 +20128,7 @@

Runtime Semantics: Evaluation

1. Let _rref_ be ? Evaluation of |ShiftExpression|. 1. Let _rval_ be ? GetValue(_rref_). 1. Let _r_ be ? IsLessThan(_rval_, _lval_, *false*). - 1. If _r_ is *true* or *undefined*, return *false*. Otherwise, return *true*. + 1. If _r_ is either *true* or *undefined*, return *false*. Otherwise, return *true*.
RelationalExpression : RelationalExpression `>=` ShiftExpression @@ -20133,7 +20137,7 @@

Runtime Semantics: Evaluation

1. Let _rref_ be ? Evaluation of |ShiftExpression|. 1. Let _rval_ be ? GetValue(_rref_). 1. Let _r_ be ? IsLessThan(_lval_, _rval_, *true*). - 1. If _r_ is *true* or *undefined*, return *false*. Otherwise, return *true*. + 1. If _r_ is either *true* or *undefined*, return *false*. Otherwise, return *true*.
RelationalExpression : RelationalExpression `instanceof` ShiftExpression @@ -20368,7 +20372,7 @@

Runtime Semantics: Evaluation

1. Let _lref_ be ? Evaluation of |CoalesceExpressionHead|. 1. Let _lval_ be ? GetValue(_lref_). - 1. If _lval_ is *undefined* or *null*, then + 1. If _lval_ is either *undefined* or *null*, then 1. Let _rref_ be ? Evaluation of |BitwiseORExpression|. 1. Return ? GetValue(_rref_). 1. Otherwise, return _lval_. @@ -20571,7 +20575,7 @@

1. NOTE: At this point, it must be a numeric operation. 1. Let _lnum_ be ? ToNumeric(_lval_). 1. Let _rnum_ be ? ToNumeric(_rval_). - 1. If Type(_lnum_) is different from Type(_rnum_), throw a *TypeError* exception. + 1. If Type(_lnum_) is not Type(_rnum_), throw a *TypeError* exception. 1. If Type(_lnum_) is BigInt, then 1. If _opText_ is `**`, return ? BigInt::exponentiate(_lnum_, _rnum_). 1. If _opText_ is `/`, return ? BigInt::divide(_lnum_, _rnum_). @@ -21593,7 +21597,7 @@

1. If _completion_.[[Type]] is ~normal~, return *true*. 1. If _completion_.[[Type]] is not ~continue~, return *false*. 1. If _completion_.[[Target]] is ~empty~, return *true*. - 1. If _completion_.[[Target]] is an element of _labelSet_, return *true*. + 1. If _labelSet_ contains _completion_.[[Target]], return *true*. 1. Return *false*. @@ -22106,7 +22110,7 @@

1. Set the running execution context's LexicalEnvironment to _oldEnv_. 1. Let _exprValue_ be ? GetValue(? _exprRef_). 1. If _iterationKind_ is ~enumerate~, then - 1. If _exprValue_ is *undefined* or *null*, then + 1. If _exprValue_ is either *undefined* or *null*, then 1. Return Completion Record { [[Type]]: ~break~, [[Value]]: ~empty~, [[Target]]: ~empty~ }. 1. Let _obj_ be ! ToObject(_exprValue_). 1. Let _iterator_ be EnumerateObjectProperties(_obj_). @@ -22139,7 +22143,7 @@

1. Let _oldEnv_ be the running execution context's LexicalEnvironment. 1. Let _V_ be *undefined*. 1. Let _destructuring_ be IsDestructuring of _lhs_. - 1. If _destructuring_ is *true* and if _lhsKind_ is ~assignment~, then + 1. If _destructuring_ is *true* and _lhsKind_ is ~assignment~, then 1. Assert: _lhs_ is a |LeftHandSideExpression|. 1. Let _assignmentPattern_ be the |AssignmentPattern| that is covered by _lhs_. 1. Repeat, @@ -23303,7 +23307,7 @@

Static Semantics: Early Errors

If the source text matched by |FormalParameters| is strict mode code, the Early Error rules for UniqueFormalParameters : FormalParameters are applied.
  • - If |BindingIdentifier| is present and the source text matched by |BindingIdentifier| is strict mode code, it is a Syntax Error if the StringValue of |BindingIdentifier| is *"eval"* or *"arguments"*. + If |BindingIdentifier| is present and the source text matched by |BindingIdentifier| is strict mode code, it is a Syntax Error if the StringValue of |BindingIdentifier| is either *"eval"* or *"arguments"*.
  • It is a Syntax Error if FunctionBodyContainsUseStrict of |FunctionBody| is *true* and IsSimpleParameterList of |FormalParameters| is *false*. @@ -24336,7 +24340,7 @@

    Static Semantics: Early Errors

    ClassElement : `static` FieldDefinition `;`
    • - It is a Syntax Error if PropName of |FieldDefinition| is *"prototype"* or *"constructor"*. + It is a Syntax Error if PropName of |FieldDefinition| is either *"prototype"* or *"constructor"*.
    @@ -25054,7 +25058,7 @@

    Static Semantics: Early Errors

  • It is a Syntax Error if FunctionBodyContainsUseStrict of |AsyncFunctionBody| is *true* and IsSimpleParameterList of |FormalParameters| is *false*.
  • It is a Syntax Error if |FormalParameters| Contains |AwaitExpression| is *true*.
  • If the source text matched by |FormalParameters| is strict mode code, the Early Error rules for UniqueFormalParameters : FormalParameters are applied.
  • -
  • If |BindingIdentifier| is present and the source text matched by |BindingIdentifier| is strict mode code, it is a Syntax Error if the StringValue of |BindingIdentifier| is *"eval"* or *"arguments"*.
  • +
  • If |BindingIdentifier| is present and the source text matched by |BindingIdentifier| is strict mode code, it is a Syntax Error if the StringValue of |BindingIdentifier| is either *"eval"* or *"arguments"*.
  • It is a Syntax Error if any element of the BoundNames of |FormalParameters| also occurs in the LexicallyDeclaredNames of |AsyncFunctionBody|.
  • It is a Syntax Error if |FormalParameters| Contains |SuperProperty| is *true*.
  • It is a Syntax Error if |AsyncFunctionBody| Contains |SuperProperty| is *true*.
  • @@ -25327,7 +25331,7 @@

    1. If the source text matched by _call_ is non-strict code, return *false*. - 1. If _call_ is not contained within a |FunctionBody|, |ConciseBody|, or |AsyncConciseBody|, return *false*. + 1. If _call_ is not contained within a |FunctionBody|, a |ConciseBody|, or an |AsyncConciseBody|, return *false*. 1. Let _body_ be the |FunctionBody|, |ConciseBody|, or |AsyncConciseBody| that most closely contains _call_. 1. If _body_ is the |FunctionBody| of a |GeneratorBody|, return *false*. 1. If _body_ is the |FunctionBody| of an |AsyncFunctionBody|, return *false*. @@ -25910,23 +25914,23 @@

    1. Let _functionsToInitialize_ be a new empty List. 1. Let _declaredFunctionNames_ be a new empty List. 1. For each element _d_ of _varDeclarations_, in reverse List order, do - 1. If _d_ is neither a |VariableDeclaration| nor a |ForBinding| nor a |BindingIdentifier|, then - 1. Assert: _d_ is either a |FunctionDeclaration|, a |GeneratorDeclaration|, an |AsyncFunctionDeclaration|, or an |AsyncGeneratorDeclaration|. + 1. If _d_ is not a |VariableDeclaration|, a |ForBinding|, or a |BindingIdentifier|, then + 1. Assert: _d_ is one of a |FunctionDeclaration|, a |GeneratorDeclaration|, an |AsyncFunctionDeclaration|, or an |AsyncGeneratorDeclaration|. 1. NOTE: If there are multiple function declarations for the same name, the last declaration is used. 1. Let _fn_ be the sole element of the BoundNames of _d_. - 1. If _fn_ is not an element of _declaredFunctionNames_, then + 1. If _declaredFunctionNames_ does not contain _fn_, then 1. Let _fnDefinable_ be ? _env_.CanDeclareGlobalFunction(_fn_). 1. If _fnDefinable_ is *false*, throw a *TypeError* exception. 1. Append _fn_ to _declaredFunctionNames_. 1. Insert _d_ as the first element of _functionsToInitialize_. 1. Let _declaredVarNames_ be a new empty List. 1. For each element _d_ of _varDeclarations_, do - 1. If _d_ is a |VariableDeclaration|, a |ForBinding|, or a |BindingIdentifier|, then + 1. If _d_ is any of a |VariableDeclaration|, a |ForBinding|, or a |BindingIdentifier|, then 1. For each String _vn_ of the BoundNames of _d_, do - 1. If _vn_ is not an element of _declaredFunctionNames_, then + 1. If _declaredFunctionNames_ does not contain _vn_, then 1. Let _vnDefinable_ be ? _env_.CanDeclareGlobalVar(_vn_). 1. If _vnDefinable_ is *false*, throw a *TypeError* exception. - 1. If _vn_ is not an element of _declaredVarNames_, then + 1. If _declaredVarNames_ does not contain _vn_, then 1. Append _vn_ to _declaredVarNames_. 1. NOTE: No abnormal terminations occur after this algorithm step if the global object is an ordinary object. However, if the global object is a Proxy exotic object it may exhibit behaviours that cause abnormal terminations in some of the following steps. 1. [id="step-globaldeclarationinstantiation-web-compat-insertion-point"] NOTE: Annex adds additional steps at this point. @@ -26059,7 +26063,9 @@

    Static Semantics: ModuleRequests ( ): a List of Strings

    1. Let _moduleNames_ be ModuleRequests of |ModuleItemList|. 1. Let _additionalNames_ be ModuleRequests of |ModuleItem|. - 1. Append to _moduleNames_ each element of _additionalNames_ that is not already an element of _moduleNames_. + 1. For each String _name_ in _additionalNames, do + 1. If _moduleNames_ does not contain _name_, then + 1. Apppend _name_ to _moduleNames_. 1. Return _moduleNames_. ModuleItem : StatementListItem @@ -26255,7 +26261,7 @@

    Cyclic Module Records

    an integer or ~empty~ - Auxiliary field used during Link and Evaluate only. If [[Status]] is ~linking~ or ~evaluating~, this non-negative number records the point at which the module was first visited during the depth-first traversal of the dependency graph. + Auxiliary field used during Link and Evaluate only. If [[Status]] is either ~linking~ or ~evaluating~, this non-negative number records the point at which the module was first visited during the depth-first traversal of the dependency graph. @@ -26266,7 +26272,7 @@

    Cyclic Module Records

    an integer or ~empty~ - Auxiliary field used during Link and Evaluate only. If [[Status]] is ~linking~ or ~evaluating~, this is either the module's own [[DFSIndex]] or that of an "earlier" module in the same strongly connected component. + Auxiliary field used during Link and Evaluate only. If [[Status]] is either ~linking~ or ~evaluating~, this is either the module's own [[DFSIndex]] or that of an "earlier" module in the same strongly connected component. @@ -26277,7 +26283,7 @@

    Cyclic Module Records

    a List of Strings - A List of all the |ModuleSpecifier| strings used by the module represented by this record to request the importation of a module. The List is source text occurrence ordered. + A List of all the |ModuleSpecifier| strings used by the module represented by this record to request the importation of a module. The List is in source text occurrence order. @@ -26288,7 +26294,7 @@

    Cyclic Module Records

    a Cyclic Module Record or ~empty~ - The first visited module of the cycle, the root DFS ancestor of the strongly connected component. For a module not in a cycle this would be the module itself. Once Evaluate has completed, a module's [[DFSAncestorIndex]] is equal to the [[DFSIndex]] of its [[CycleRoot]]. + The first visited module of the cycle, the root DFS ancestor of the strongly connected component. For a module not in a cycle, this would be the module itself. Once Evaluate has completed, a module's [[DFSAncestorIndex]] is the [[DFSIndex]] of its [[CycleRoot]]. @@ -26389,7 +26395,7 @@

    Link ( ): either a normal completion containing ~unused~ or a throw completi - 1. Assert: _module_.[[Status]] is not ~linking~ or ~evaluating~. + 1. Assert: _module_.[[Status]] is neither ~linking~ nor ~evaluating~. 1. Let _stack_ be a new empty List. 1. Let _result_ be Completion(InnerModuleLinking(_module_, _stack_, 0)). 1. If _result_ is an abrupt completion, then @@ -26398,7 +26404,7 @@

    Link ( ): either a normal completion containing ~unused~ or a throw completi 1. Set _m_.[[Status]] to ~unlinked~. 1. Assert: _module_.[[Status]] is ~unlinked~. 1. Return ? _result_. - 1. Assert: _module_.[[Status]] is ~linked~, ~evaluating-async~, or ~evaluated~. + 1. Assert: _module_.[[Status]] is one of ~linked~, ~evaluating-async~, or ~evaluated~. 1. Assert: _stack_ is empty. 1. Return ~unused~. @@ -26420,7 +26426,7 @@

    1. If _module_ is not a Cyclic Module Record, then 1. Perform ? _module_.Link(). 1. Return _index_. - 1. If _module_.[[Status]] is ~linking~, ~linked~, ~evaluating-async~, or ~evaluated~, then + 1. If _module_.[[Status]] is any of ~linking~, ~linked~, ~evaluating-async~, or ~evaluated~, then 1. Return _index_. 1. Assert: _module_.[[Status]] is ~unlinked~. 1. Set _module_.[[Status]] to ~linking~. @@ -26432,7 +26438,7 @@

    1. Let _requiredModule_ be ? HostResolveImportedModule(_module_, _required_). 1. Set _index_ to ? InnerModuleLinking(_requiredModule_, _stack_, _index_). 1. If _requiredModule_ is a Cyclic Module Record, then - 1. Assert: _requiredModule_.[[Status]] is either ~linking~, ~linked~, ~evaluating-async~, or ~evaluated~. + 1. Assert: _requiredModule_.[[Status]] is one of ~linking~, ~linked~, ~evaluating-async~, or ~evaluated~. 1. Assert: _requiredModule_.[[Status]] is ~linking~ if and only if _requiredModule_ is in _stack_. 1. If _requiredModule_.[[Status]] is ~linking~, then 1. Set _module_.[[DFSAncestorIndex]] to min(_module_.[[DFSAncestorIndex]], _requiredModule_.[[DFSAncestorIndex]]). @@ -26464,8 +26470,8 @@

    Evaluate ( ): a Promise

    1. Assert: This call to Evaluate is not happening at the same time as another call to Evaluate within the surrounding agent. - 1. Assert: _module_.[[Status]] is ~linked~, ~evaluating-async~, or ~evaluated~. - 1. If _module_.[[Status]] is ~evaluating-async~ or ~evaluated~, set _module_ to _module_.[[CycleRoot]]. + 1. Assert: _module_.[[Status]] is one of ~linked~, ~evaluating-async~, or ~evaluated~. + 1. If _module_.[[Status]] is either ~evaluating-async~ or ~evaluated~, set _module_ to _module_.[[CycleRoot]]. 1. If _module_.[[TopLevelCapability]] is not ~empty~, then 1. Return _module_.[[TopLevelCapability]].[[Promise]]. 1. Let _stack_ be a new empty List. @@ -26481,7 +26487,7 @@

    Evaluate ( ): a Promise

    1. Assert: _module_.[[EvaluationError]] is _result_. 1. Perform ! Call(_capability_.[[Reject]], *undefined*, « _result_.[[Value]] »). 1. Else, - 1. Assert: _module_.[[Status]] is ~evaluating-async~ or ~evaluated~. + 1. Assert: _module_.[[Status]] is either ~evaluating-async~ or ~evaluated~. 1. Assert: _module_.[[EvaluationError]] is ~empty~. 1. If _module_.[[AsyncEvaluation]] is *false*, then 1. Assert: _module_.[[Status]] is ~evaluated~. @@ -26510,7 +26516,7 @@

    1. If _promise_.[[PromiseState]] is ~rejected~, then 1. Return ThrowCompletion(_promise_.[[PromiseResult]]). 1. Return _index_. - 1. If _module_.[[Status]] is ~evaluating-async~ or ~evaluated~, then + 1. If _module_.[[Status]] is either ~evaluating-async~ or ~evaluated~, then 1. If _module_.[[EvaluationError]] is ~empty~, return _index_. 1. Otherwise, return ? _module_.[[EvaluationError]]. 1. If _module_.[[Status]] is ~evaluating~, return _index_. @@ -26526,13 +26532,13 @@

    1. NOTE: Link must be completed successfully prior to invoking this method, so every requested module is guaranteed to resolve successfully. 1. Set _index_ to ? InnerModuleEvaluation(_requiredModule_, _stack_, _index_). 1. If _requiredModule_ is a Cyclic Module Record, then - 1. Assert: _requiredModule_.[[Status]] is either ~evaluating~, ~evaluating-async~, or ~evaluated~. + 1. Assert: _requiredModule_.[[Status]] is one of ~evaluating~, ~evaluating-async~, or ~evaluated~. 1. Assert: _requiredModule_.[[Status]] is ~evaluating~ if and only if _requiredModule_ is in _stack_. 1. If _requiredModule_.[[Status]] is ~evaluating~, then 1. Set _module_.[[DFSAncestorIndex]] to min(_module_.[[DFSAncestorIndex]], _requiredModule_.[[DFSAncestorIndex]]). 1. Else, 1. Set _requiredModule_ to _requiredModule_.[[CycleRoot]]. - 1. Assert: _requiredModule_.[[Status]] is ~evaluating-async~ or ~evaluated~. + 1. Assert: _requiredModule_.[[Status]] is either ~evaluating-async~ or ~evaluated~. 1. If _requiredModule_.[[EvaluationError]] is not ~empty~, return ? _requiredModule_.[[EvaluationError]]. 1. If _requiredModule_.[[AsyncEvaluation]] is *true*, then 1. Set _module_.[[PendingAsyncDependencies]] to _module_.[[PendingAsyncDependencies]] + 1. @@ -26541,7 +26547,7 @@

    1. Assert: _module_.[[AsyncEvaluation]] is *false* and was never previously set to *true*. 1. Set _module_.[[AsyncEvaluation]] to *true*. 1. NOTE: The order in which module records have their [[AsyncEvaluation]] fields transition to *true* is significant. (See .) - 1. If _module_.[[PendingAsyncDependencies]] is 0, perform ExecuteAsyncModule(_module_). + 1. If _module_.[[PendingAsyncDependencies]] = 0, perform ExecuteAsyncModule(_module_). 1. Otherwise, perform ? _module_.ExecuteModule(). 1. Assert: _module_ occurs exactly once in _stack_. 1. Assert: _module_.[[DFSAncestorIndex]] ≤ _module_.[[DFSIndex]]. @@ -26575,7 +26581,7 @@

    - 1. Assert: _module_.[[Status]] is ~evaluating~ or ~evaluating-async~. + 1. Assert: _module_.[[Status]] is either ~evaluating~ or ~evaluating-async~. 1. Assert: _module_.[[HasTLA]] is *true*. 1. Let _capability_ be ! NewPromiseCapability(%Promise%). 1. Let _fulfilledClosure_ be a new Abstract Closure with no parameters that captures _module_ and performs the following steps when called: @@ -27601,10 +27607,10 @@

    1. Let _exportEntries_ be ExportEntries of _body_. 1. For each ExportEntry Record _ee_ of _exportEntries_, do 1. If _ee_.[[ModuleRequest]] is *null*, then - 1. If _ee_.[[LocalName]] is not an element of _importedBoundNames_, then + 1. If _importedBoundNames_ does not contain _ee_.[[LocalName]], then 1. Append _ee_ to _localExportEntries_. 1. Else, - 1. Let _ie_ be the element of _importEntries_ whose [[LocalName]] is the same as _ee_.[[LocalName]]. + 1. Let _ie_ be the element of _importEntries_ whose [[LocalName]] is _ee_.[[LocalName]]. 1. If _ie_.[[ImportName]] is ~namespace-object~, then 1. NOTE: This is a re-export of an imported module namespace object. 1. Append _ee_ to _localExportEntries_. @@ -27652,7 +27658,7 @@

    1. Let _starNames_ be ? _requestedModule_.GetExportedNames(_exportStarSet_). 1. For each element _n_ of _starNames_, do 1. If SameValue(_n_, *"default"*) is *false*, then - 1. If _n_ is not an element of _exportedNames_, then + 1. If _exportedNames_ does not contain _n_, then 1. Append _n_ to _exportedNames_. 1. Return _exportedNames_. @@ -27714,7 +27720,7 @@

    1. Else, 1. Assert: There is more than one `*` import that includes the requested name. 1. If _resolution_.[[Module]] and _starResolution_.[[Module]] are not the same Module Record, return ~ambiguous~. - 1. If _resolution_.[[BindingName]] is ~namespace~ and _starResolution_.[[BindingName]] is not ~namespace~, or if _resolution_.[[BindingName]] is not ~namespace~ and _starResolution_.[[BindingName]] is ~namespace~, return ~ambiguous~. + 1. If _resolution_.[[BindingName]] is ~namespace~ and _starResolution_.[[BindingName]] is not ~namespace~, or _resolution_.[[BindingName]] is not ~namespace~ and _starResolution_.[[BindingName]] is ~namespace~, return ~ambiguous~. 1. If _resolution_.[[BindingName]] is a String, _starResolution_.[[BindingName]] is a String, and SameValue(_resolution_.[[BindingName]], _starResolution_.[[BindingName]]) is *false*, return ~ambiguous~. 1. Return _starResolution_. @@ -27730,7 +27736,7 @@

    InitializeEnvironment ( ): either a normal completion containing ~unused~ or 1. For each ExportEntry Record _e_ of _module_.[[IndirectExportEntries]], do 1. Let _resolution_ be ? _module_.ResolveExport(_e_.[[ExportName]]). - 1. If _resolution_ is *null* or ~ambiguous~, throw a *SyntaxError* exception. + 1. If _resolution_ is either *null* or ~ambiguous~, throw a *SyntaxError* exception. 1. Assert: _resolution_ is a ResolvedBinding Record. 1. Assert: All named exports from _module_ are resolvable. 1. Let _realm_ be _module_.[[Realm]]. @@ -27746,7 +27752,7 @@

    InitializeEnvironment ( ): either a normal completion containing ~unused~ or 1. Perform ! _env_.InitializeBinding(_in_.[[LocalName]], _namespace_). 1. Else, 1. Let _resolution_ be ? _importedModule_.ResolveExport(_in_.[[ImportName]]). - 1. If _resolution_ is *null* or ~ambiguous~, throw a *SyntaxError* exception. + 1. If _resolution_ is either *null* or ~ambiguous~, throw a *SyntaxError* exception. 1. If _resolution_.[[BindingName]] is ~namespace~, then 1. Let _namespace_ be ? GetModuleNamespace(_resolution_.[[Module]]). 1. Perform ! _env_.CreateImmutableBinding(_in_.[[LocalName]], *true*). @@ -27768,7 +27774,7 @@

    InitializeEnvironment ( ): either a normal completion containing ~unused~ or 1. Let _declaredVarNames_ be a new empty List. 1. For each element _d_ of _varDeclarations_, do 1. For each element _dn_ of the BoundNames of _d_, do - 1. If _dn_ is not an element of _declaredVarNames_, then + 1. If _declaredVarNames_ does not contain _dn_, then 1. Perform ! _env_.CreateMutableBinding(_dn_, *false*). 1. Perform ! _env_.InitializeBinding(_dn_, *undefined*). 1. Append _dn_ to _declaredVarNames_. @@ -27780,7 +27786,7 @@

    InitializeEnvironment ( ): either a normal completion containing ~unused~ or 1. Perform ! _env_.CreateImmutableBinding(_dn_, *true*). 1. Else, 1. Perform ! _env_.CreateMutableBinding(_dn_, *false*). - 1. If _d_ is a |FunctionDeclaration|, a |GeneratorDeclaration|, an |AsyncFunctionDeclaration|, or an |AsyncGeneratorDeclaration|, then + 1. If _d_ is any of a |FunctionDeclaration|, a |GeneratorDeclaration|, an |AsyncFunctionDeclaration|, or an |AsyncGeneratorDeclaration|, then 1. Let _fo_ be InstantiateFunctionObject of _d_ with arguments _env_ and _privateEnv_. 1. Perform ! _env_.InitializeBinding(_dn_, _fo_). 1. Remove _moduleContext_ from the execution context stack. @@ -28186,7 +28192,7 @@

    Static Semantics: Early Errors

    It is a Syntax Error if ReferencedBindings of |NamedExports| contains any |StringLiteral|s.
  • - For each |IdentifierName| _n_ in ReferencedBindings of |NamedExports|: It is a Syntax Error if StringValue of _n_ is a |ReservedWord| or if the StringValue of _n_ is one of: *"implements"*, *"interface"*, *"let"*, *"package"*, *"private"*, *"protected"*, *"public"*, or *"static"*. + For each |IdentifierName| _n_ in ReferencedBindings of |NamedExports|: It is a Syntax Error if StringValue of _n_ is a |ReservedWord| or if the StringValue of _n_ is any of *"implements"*, *"interface"*, *"let"*, *"package"*, *"private"*, *"protected"*, *"public"*, or *"static"*.
  • @@ -28392,13 +28398,13 @@

    Static Semantics: ExportEntries ( ): a List of ExportEntry Records

    1. Let _names_ be BoundNames of |HoistableDeclaration|. 1. Let _localName_ be the sole element of _names_. - 1. Return a List whose sole element is the ExportEntry Record { [[ModuleRequest]]: *null*, [[ImportName]]: *null*, [[LocalName]]: _localName_, [[ExportName]]: *"default"* }. + 1. Return a List whose sole element is an ExportEntry Record { [[ModuleRequest]]: *null*, [[ImportName]]: *null*, [[LocalName]]: _localName_, [[ExportName]]: *"default"* }. ExportDeclaration : `export` `default` ClassDeclaration 1. Let _names_ be BoundNames of |ClassDeclaration|. 1. Let _localName_ be the sole element of _names_. - 1. Return a List whose sole element is the ExportEntry Record { [[ModuleRequest]]: *null*, [[ImportName]]: *null*, [[LocalName]]: _localName_, [[ExportName]]: *"default"* }. + 1. Return a List whose sole element is an ExportEntry Record { [[ModuleRequest]]: *null*, [[ImportName]]: *null*, [[LocalName]]: _localName_, [[ExportName]]: *"default"* }. ExportDeclaration : `export` `default` AssignmentExpression `;` @@ -28448,7 +28454,7 @@

    1. Else, 1. Let _localName_ be *null*. 1. Let _importName_ be _sourceName_. - 1. Return a List whose sole element is the ExportEntry Record { [[ModuleRequest]]: _module_, [[ImportName]]: _importName_, [[LocalName]]: _localName_, [[ExportName]]: _sourceName_ }. + 1. Return a List whose sole element is an ExportEntry Record { [[ModuleRequest]]: _module_, [[ImportName]]: _importName_, [[LocalName]]: _localName_, [[ExportName]]: _sourceName_ }. ExportSpecifier : ModuleExportName `as` ModuleExportName @@ -28460,7 +28466,7 @@

    1. Else, 1. Let _localName_ be *null*. 1. Let _importName_ be _sourceName_. - 1. Return a List whose sole element is the ExportEntry Record { [[ModuleRequest]]: _module_, [[ImportName]]: _importName_, [[LocalName]]: _localName_, [[ExportName]]: _exportName_ }. + 1. Return a List whose sole element is an ExportEntry Record { [[ModuleRequest]]: _module_, [[ImportName]]: _importName_, [[LocalName]]: _localName_, [[ExportName]]: _exportName_ }. @@ -28610,7 +28616,7 @@

    ECMAScript Standard Built-in Objects

    Unless otherwise specified every built-in prototype object has the Object prototype object, which is the initial value of the expression `Object.prototype` (), as the value of its [[Prototype]] internal slot, except the Object prototype object itself.

    Built-in function objects that are not identified as constructors do not implement the [[Construct]] internal method unless otherwise specified in the description of a particular function.

    Each built-in function defined in this specification is created by calling the CreateBuiltinFunction abstract operation (). The values of the _length_ and _name_ parameters are the initial values of the *"length"* and *"name"* properties as discussed below. The values of the _prefix_ parameter are similarly discussed below.

    -

    Every built-in function object, including constructors, has a *"length"* property whose value is a non-negative integral Number. Unless otherwise specified, this value is equal to the number of required parameters shown in the subclause heading for the function description. Optional parameters and rest parameters are not included in the parameter count.

    +

    Every built-in function object, including constructors, has a *"length"* property whose value is a non-negative integral Number. Unless otherwise specified, this value is the number of required parameters shown in the subclause heading for the function description. Optional parameters and rest parameters are not included in the parameter count.

    For example, the function object that is the initial value of the *"map"* property of the Array prototype object is described under the subclause heading «Array.prototype.map (callbackFn [ , thisArg])» which shows the two named arguments callbackFn and thisArg, the latter being optional; therefore the value of the *"length"* property of that function object is *1*𝔽.

    @@ -28706,7 +28712,7 @@

    1. If _inFunction_ is *false*, and _body_ Contains |NewTarget|, throw a *SyntaxError* exception. 1. If _inMethod_ is *false*, and _body_ Contains |SuperProperty|, throw a *SyntaxError* exception. 1. If _inDerivedConstructor_ is *false*, and _body_ Contains |SuperCall|, throw a *SyntaxError* exception. - 1. If _inClassFieldInitializer_ is *true*, and ContainsArguments of _body_ is *true*, throw a *SyntaxError* exception. + 1. If _inClassFieldInitializer_ is *true* and ContainsArguments of _body_ is *true*, throw a *SyntaxError* exception. 1. If _strictCaller_ is *true*, let _strictEval_ be *true*. 1. Else, let _strictEval_ be IsStrict of _script_. 1. Let _runningContext_ be the running execution context. @@ -28788,7 +28794,7 @@

    1. NOTE: `eval` will not create a global var declaration that would be shadowed by a global lexical declaration. 1. Let _thisEnv_ be _lexEnv_. 1. Assert: The following loop will terminate. - 1. Repeat, while _thisEnv_ is not the same as _varEnv_, + 1. Repeat, while _thisEnv_ is not _varEnv_, 1. If _thisEnv_ is not an Object Environment Record, then 1. NOTE: The environment of with statements cannot contain any lexical declaration so it doesn't need to be checked for var/let hoisting conflicts. 1. For each element _name_ of _varNames_, do @@ -28807,11 +28813,11 @@

    1. Let _functionsToInitialize_ be a new empty List. 1. Let _declaredFunctionNames_ be a new empty List. 1. For each element _d_ of _varDeclarations_, in reverse List order, do - 1. If _d_ is neither a |VariableDeclaration| nor a |ForBinding| nor a |BindingIdentifier|, then - 1. Assert: _d_ is either a |FunctionDeclaration|, a |GeneratorDeclaration|, an |AsyncFunctionDeclaration|, or an |AsyncGeneratorDeclaration|. + 1. If _d_ is not a |VariableDeclaration|, a |ForBinding|, or a |BindingIdentifier|, then + 1. Assert: _d_ is a |FunctionDeclaration|, a |GeneratorDeclaration|, an |AsyncFunctionDeclaration|, or an |AsyncGeneratorDeclaration|. 1. NOTE: If there are multiple function declarations for the same name, the last declaration is used. 1. Let _fn_ be the sole element of the BoundNames of _d_. - 1. If _fn_ is not an element of _declaredFunctionNames_, then + 1. If _declaredFunctionNames_ does not contain _fn_, then 1. If _varEnv_ is a Global Environment Record, then 1. Let _fnDefinable_ be ? _varEnv_.CanDeclareGlobalFunction(_fn_). 1. If _fnDefinable_ is *false*, throw a *TypeError* exception. @@ -28820,13 +28826,13 @@

    1. [id="step-evaldeclarationinstantiation-web-compat-insertion-point"] NOTE: Annex adds additional steps at this point. 1. Let _declaredVarNames_ be a new empty List. 1. For each element _d_ of _varDeclarations_, do - 1. If _d_ is a |VariableDeclaration|, a |ForBinding|, or a |BindingIdentifier|, then + 1. If _d_ is any of a |VariableDeclaration|, a |ForBinding|, or a |BindingIdentifier|, then 1. For each String _vn_ of the BoundNames of _d_, do - 1. If _vn_ is not an element of _declaredFunctionNames_, then + 1. If _declaredFunctionNames_ does not contain _vn_, then 1. If _varEnv_ is a Global Environment Record, then 1. Let _vnDefinable_ be ? _varEnv_.CanDeclareGlobalVar(_vn_). 1. If _vnDefinable_ is *false*, throw a *TypeError* exception. - 1. If _vn_ is not an element of _declaredVarNames_, then + 1. If _declaredVarNames_ does not contain _vn_, then 1. Append _vn_ to _declaredVarNames_. 1. [id="step-evaldeclarationinstantiation-post-validation"] NOTE: No abnormal terminations occur after this algorithm step unless _varEnv_ is a Global Environment Record and the global object is a Proxy exotic object. 1. Let _lexDeclarations_ be the LexicallyScopedDeclarations of _body_. @@ -28873,7 +28879,7 @@

    isFinite ( _number_ )

    It performs the following steps when called:

    1. Let _num_ be ? ToNumber(_number_). - 1. If _num_ is *NaN*, *+∞*𝔽, or *-∞*𝔽, return *false*. + 1. If _num_ is any of *NaN*, *+∞*𝔽, or *-∞*𝔽, return *false*. 1. Otherwise, return *true*. @@ -28888,7 +28894,7 @@

    isNaN ( _number_ )

    1. Otherwise, return *false*.
    -

    A reliable way for ECMAScript code to test if a value `X` is a *NaN* is an expression of the form `X !== X`. The result will be *true* if and only if `X` is a *NaN*.

    +

    A reliable way for ECMAScript code to test if a value `X` is *NaN* is an expression of the form `X !== X`. The result will be *true* if and only if `X` is *NaN*.

    @@ -28913,7 +28919,7 @@

    parseFloat ( _string_ )

    parseInt ( _string_, _radix_ )

    -

    This function produces an integral Number dictated by interpretation of the contents of the _string_ argument according to the specified _radix_. Leading white space in _string_ is ignored. If _radix_ is *undefined* or 0, it is assumed to be 10 except when the number begins with the code unit pairs `0x` or `0X`, in which case a radix of 16 is assumed. If _radix_ is 16, the number may also optionally begin with the code unit pairs `0x` or `0X`.

    +

    This function produces an integral Number dictated by interpretation of the contents of _string_ according to the specified _radix_. Leading white space in _string_ is ignored. If _radix_ coerces to 0 (such as when it is *undefined*), it is assumed to be 10 except when the number representation begins with *"0x"* or *"0X"*, in which case it is assumed to be 16. If _radix_ is 16, the number representation may optionally begin with *"0x"* or *"0X"*.

    It is the %parseInt% intrinsic object.

    It performs the following steps when called:

    @@ -28921,7 +28927,7 @@

    parseInt ( _string_, _radix_ )

    1. Let _S_ be ! TrimString(_inputString_, ~start~). 1. Let _sign_ be 1. 1. If _S_ is not empty and the first code unit of _S_ is the code unit 0x002D (HYPHEN-MINUS), set _sign_ to -1. - 1. If _S_ is not empty and the first code unit of _S_ is the code unit 0x002B (PLUS SIGN) or the code unit 0x002D (HYPHEN-MINUS), remove the first code unit from _S_. + 1. If _S_ is not empty and the first code unit of _S_ is either the code unit 0x002B (PLUS SIGN) or the code unit 0x002D (HYPHEN-MINUS), remove the first code unit from _S_. 1. Let _R_ be ℝ(? ToInt32(_radix_)). 1. Let _stripPrefix_ be *true*. 1. If _R_ ≠ 0, then @@ -28936,7 +28942,7 @@

    parseInt ( _string_, _radix_ )

    1. If _S_ contains a code unit that is not a radix-_R_ digit, let _end_ be the index within _S_ of the first such code unit; otherwise, let _end_ be the length of _S_. 1. Let _Z_ be the substring of _S_ from 0 to _end_. 1. If _Z_ is empty, return *NaN*. - 1. Let _mathInt_ be the integer value that is represented by _Z_ in radix-_R_ notation, using the letters A-Z and a-z for digits with values 10 through 35. (However, if _R_ is 10 and _Z_ contains more than 20 significant digits, every significant digit after the 20th may be replaced by a 0 digit, at the option of the implementation; and if _R_ is not 2, 4, 8, 10, 16, or 32, then _mathInt_ may be an implementation-approximated integer representing the integer value denoted by _Z_ in radix-_R_ notation.) + 1. Let _mathInt_ be the integer value that is represented by _Z_ in radix-_R_ notation, using the letters A-Z and a-z for digits with values 10 through 35. (However, if _R_ = 10 and _Z_ contains more than 20 significant digits, every significant digit after the 20th may be replaced by a 0 digit, at the option of the implementation; and if _R_ is not 2, 4, 8, 10, 16, or 32, then _mathInt_ may be an implementation-approximated integer representing the integer value denoted by _Z_ in radix-_R_ notation.) 1. If _mathInt_ = 0, then 1. If _sign_ = -1, return *-0*𝔽. 1. Return *+0*𝔽. @@ -29019,7 +29025,7 @@

    1. Repeat, 1. If _k_ = _strLen_, return _R_. 1. Let _C_ be the code unit at index _k_ within _string_. - 1. If _C_ is in _unescapedSet_, then + 1. If _unescapedSet_ contains _C_, then 1. Set _k_ to _k_ + 1. 1. Set _R_ to the string-concatenation of _R_ and _C_. 1. Else, @@ -29064,7 +29070,7 @@

    1. Let _n_ be the number of leading 1 bits in _B_. 1. If _n_ = 0, then 1. Let _C_ be the code unit whose value is _B_. - 1. If _C_ is not in _reservedSet_, then + 1. If _reservedSet_ does not contain _C_, then 1. Let _S_ be the String value containing only the code unit _C_. 1. Else, 1. Let _S_ be the substring of _string_ from _start_ to _k_ + 1. @@ -29403,7 +29409,7 @@

    Object ( [ _value_ ] )

    1. If NewTarget is neither *undefined* nor the active function object, then 1. Return ? OrdinaryCreateFromConstructor(NewTarget, *"%Object.prototype%"*). - 1. If _value_ is *undefined* or *null*, return OrdinaryObjectCreate(%Object.prototype%). + 1. If _value_ is either *undefined* or *null*, return OrdinaryObjectCreate(%Object.prototype%). 1. Return ! ToObject(_value_).

    The *"length"* property of this function is *1*𝔽.

    @@ -30096,7 +30102,7 @@

    Function.prototype.apply ( _thisArg_, _argArray_ )

    1. Let _func_ be the *this* value. 1. If IsCallable(_func_) is *false*, throw a *TypeError* exception. - 1. If _argArray_ is *undefined* or *null*, then + 1. If _argArray_ is either *undefined* or *null*, then 1. Perform PrepareForTailCall(). 1. Return ? Call(_func_, _thisArg_). 1. Let _argList_ be ? CreateListFromArrayLike(_argArray_). @@ -30107,7 +30113,7 @@

    Function.prototype.apply ( _thisArg_, _argArray_ )

    The _thisArg_ value is passed without modification as the *this* value. This is a change from Edition 3, where an *undefined* or *null* _thisArg_ is replaced with the global object and ToObject is applied to all other values and that result is passed as the *this* value. Even though the _thisArg_ is passed without modification, non-strict functions still perform these transformations upon entry to the function.

    -

    If _func_ is an arrow function or a bound function exotic object then the _thisArg_ will be ignored by the function [[Call]] in step .

    +

    If _func_ is either an arrow function or a bound function exotic object, then the _thisArg_ will be ignored by the function [[Call]] in step .

    @@ -30140,7 +30146,7 @@

    Function.prototype.bind ( _thisArg_, ..._args_ )

    Function objects created using `Function.prototype.bind` are exotic objects. They also do not have a *"prototype"* property.

    -

    If _Target_ is an arrow function or a bound function exotic object then the _thisArg_ passed to this method will not be used by subsequent calls to _F_.

    +

    If _Target_ is either an arrow function or a bound function exotic object, then the _thisArg_ passed to this method will not be used by subsequent calls to _F_.

    @@ -30157,7 +30163,7 @@

    Function.prototype.call ( _thisArg_, ..._args_ )

    The _thisArg_ value is passed without modification as the *this* value. This is a change from Edition 3, where an *undefined* or *null* _thisArg_ is replaced with the global object and ToObject is applied to all other values and that result is passed as the *this* value. Even though the _thisArg_ is passed without modification, non-strict functions still perform these transformations upon entry to the function.

    -

    If _func_ is an arrow function or a bound function exotic object then the _thisArg_ will be ignored by the function [[Call]] in step .

    +

    If _func_ is either an arrow function or a bound function exotic object, then the _thisArg_ will be ignored by the function [[Call]] in step .

    @@ -30171,7 +30177,7 @@

    Function.prototype.toString ( )

    This method performs the following steps when called:

    1. Let _func_ be the *this* value. - 1. If Type(_func_) is Object and _func_ has a [[SourceText]] internal slot and _func_.[[SourceText]] is a sequence of Unicode code points and HostHasSourceTextAvailable(_func_) is *true*, then + 1. If Type(_func_) is Object, _func_ has a [[SourceText]] internal slot, _func_.[[SourceText]] is a sequence of Unicode code points, and HostHasSourceTextAvailable(_func_) is *true*, then 1. Return CodePointsToString(_func_.[[SourceText]]). 1. If _func_ is a built-in function object, return an implementation-defined String source code representation of _func_. The representation must have the syntax of a |NativeFunction|. Additionally, if _func_ has an [[InitialName]] internal slot and _func_.[[InitialName]] is a String, the portion of the returned String that would be matched by |NativeFunctionAccessor?| |PropertyName| must be the value of _func_.[[InitialName]]. 1. If Type(_func_) is Object and IsCallable(_func_) is *true*, return an implementation-defined String source code representation of _func_. The representation must have the syntax of a |NativeFunction|. @@ -30368,7 +30374,7 @@

    Symbol ( [ _description_ ] )

    1. If NewTarget is not *undefined*, throw a *TypeError* exception. 1. If _description_ is *undefined*, let _descString_ be *undefined*. 1. Else, let _descString_ be ? ToString(_description_). - 1. Return a new unique Symbol value whose [[Description]] value is _descString_. + 1. Return a new Symbol whose [[Description]] is _descString_.
    @@ -30613,7 +30619,7 @@

    Symbol.prototype [ @@toPrimitive ] ( _hint_ )

    Symbol.prototype [ @@toStringTag ]

    -

    The initial value of the @@toStringTag property is the String value *"Symbol"*.

    +

    The initial value of the @@toStringTag property is *"Symbol"*.

    This property has the attributes { [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *true* }.

    @@ -30989,7 +30995,7 @@

    Number.isFinite ( _number_ )

    This function performs the following steps when called:

    1. If Type(_number_) is not Number, return *false*. - 1. If _number_ is *NaN*, *+∞*𝔽, or *-∞*𝔽, return *false*. + 1. If _number_ is any of *NaN*, *+∞*𝔽, or *-∞*𝔽, return *false*. 1. Otherwise, return *true*. @@ -31551,7 +31557,7 @@

    Math.acosh ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN* or _n_ is *+∞*𝔽, return _n_. + 1. If _n_ is either *NaN* or *+∞*𝔽, return _n_. 1. If _n_ is *1*𝔽, return *+0*𝔽. 1. If _n_ < *1*𝔽, return *NaN*. 1. Return an implementation-approximated Number value representing the result of the inverse hyperbolic cosine of ℝ(_n_). @@ -31564,7 +31570,7 @@

    Math.asin ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, or _n_ is *-0*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, or *-0*𝔽, return _n_. 1. If _n_ > *1*𝔽 or _n_ < *-1*𝔽, return *NaN*. 1. Return an implementation-approximated Number value representing the result of the inverse sine of ℝ(_n_). @@ -31576,7 +31582,7 @@

    Math.asinh ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, _n_ is *-0*𝔽, _n_ is *+∞*𝔽, or _n_ is *-∞*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return _n_. 1. Return an implementation-approximated Number value representing the result of the inverse hyperbolic sine of ℝ(_n_). @@ -31587,7 +31593,7 @@

    Math.atan ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, or _n_ is *-0*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, or *-0*𝔽, return _n_. 1. If _n_ is *+∞*𝔽, return an implementation-approximated Number value representing π / 2. 1. If _n_ is *-∞*𝔽, return an implementation-approximated Number value representing -π / 2. 1. Return an implementation-approximated Number value representing the result of the inverse tangent of ℝ(_n_). @@ -31600,7 +31606,7 @@

    Math.atanh ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, or _n_ is *-0*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, or *-0*𝔽, return _n_. 1. If _n_ > *1*𝔽 or _n_ < *-1*𝔽, return *NaN*. 1. If _n_ is *1*𝔽, return *+∞*𝔽. 1. If _n_ is *-1*𝔽, return *-∞*𝔽. @@ -31634,11 +31640,11 @@

    Math.atan2 ( _y_, _x_ )

    1. If _ny_ > *+0*𝔽, then 1. If _nx_ is *+∞*𝔽, return *+0*𝔽. 1. If _nx_ is *-∞*𝔽, return an implementation-approximated Number value representing π. - 1. If _nx_ is *+0*𝔽 or _nx_ is *-0*𝔽, return an implementation-approximated Number value representing π / 2. + 1. If _nx_ is either *+0*𝔽 or *-0*𝔽, return an implementation-approximated Number value representing π / 2. 1. If _ny_ < *-0*𝔽, then 1. If _nx_ is *+∞*𝔽, return *-0*𝔽. 1. If _nx_ is *-∞*𝔽, return an implementation-approximated Number value representing -π. - 1. If _nx_ is *+0*𝔽 or _nx_ is *-0*𝔽, return an implementation-approximated Number value representing -π / 2. + 1. If _nx_ is either *+0*𝔽 or *-0*𝔽, return an implementation-approximated Number value representing -π / 2. 1. Assert: _nx_ is finite and is neither *+0*𝔽 nor *-0*𝔽. 1. Return an implementation-approximated Number value representing the result of the inverse tangent of the quotient ℝ(_ny_) / ℝ(_nx_).
    @@ -31650,7 +31656,7 @@

    Math.cbrt ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, _n_ is *-0*𝔽, _n_ is *+∞*𝔽, or _n_ is *-∞*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return _n_. 1. Return an implementation-approximated Number value representing the result of the cube root of ℝ(_n_). @@ -31661,7 +31667,7 @@

    Math.ceil ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, _n_ is *-0*𝔽, _n_ is *+∞*𝔽, or _n_ is *-∞*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return _n_. 1. If _n_ < *-0*𝔽 and _n_ > *-1*𝔽, return *-0*𝔽. 1. If _n_ is an integral Number, return _n_. 1. Return the smallest (closest to -∞) integral Number value that is not less than _n_. @@ -31680,7 +31686,7 @@

    Math.clz32 ( _x_ )

    1. Return 𝔽(_p_).
    -

    If _n_ is *+0*𝔽 or _n_ is *-0*𝔽, this method returns *32*𝔽. If the most significant bit of the 32-bit binary encoding of _n_ is 1, this method returns *+0*𝔽.

    +

    If _n_ is either *+0*𝔽 or *-0*𝔽, this method returns *32*𝔽. If the most significant bit of the 32-bit binary encoding of _n_ is 1, this method returns *+0*𝔽.

    @@ -31690,8 +31696,8 @@

    Math.cos ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+∞*𝔽, or _n_ is *-∞*𝔽, return *NaN*. - 1. If _n_ is *+0*𝔽 or _n_ is *-0*𝔽, return *1*𝔽. + 1. If _n_ is any of *NaN*, *+∞*𝔽, or *-∞*𝔽, return *NaN*. + 1. If _n_ is either *+0*𝔽 or *-0*𝔽, return *1*𝔽. 1. Return an implementation-approximated Number value representing the result of the cosine of ℝ(_n_). @@ -31703,8 +31709,8 @@

    Math.cosh ( _x_ )

    1. Let _n_ be ? ToNumber(_x_). 1. If _n_ is *NaN*, return *NaN*. - 1. If _n_ is *+∞*𝔽 or _n_ is *-∞*𝔽, return *+∞*𝔽. - 1. If _n_ is *+0*𝔽 or _n_ is *-0*𝔽, return *1*𝔽. + 1. If _n_ is either *+∞*𝔽 or *-∞*𝔽, return *+∞*𝔽. + 1. If _n_ is either *+0*𝔽 or *-0*𝔽, return *1*𝔽. 1. Return an implementation-approximated Number value representing the result of the hyperbolic cosine of ℝ(_n_). @@ -31718,8 +31724,8 @@

    Math.exp ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN* or _n_ is *+∞*𝔽, return _n_. - 1. If _n_ is *+0*𝔽 or _n_ is *-0*𝔽, return *1*𝔽. + 1. If _n_ is either *NaN* or *+∞*𝔽, return _n_. + 1. If _n_ is either *+0*𝔽 or *-0*𝔽, return *1*𝔽. 1. If _n_ is *-∞*𝔽, return *+0*𝔽. 1. Return an implementation-approximated Number value representing the result of the exponential function of ℝ(_n_). @@ -31731,7 +31737,7 @@

    Math.expm1 ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, _n_ is *-0*𝔽, or _n_ is *+∞*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, *-0*𝔽, or *+∞*𝔽, return _n_. 1. If _n_ is *-∞*𝔽, return *-1*𝔽. 1. Return an implementation-approximated Number value representing the result of subtracting 1 from the exponential function of ℝ(_n_). @@ -31743,7 +31749,7 @@

    Math.floor ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, _n_ is *-0*𝔽, _n_ is *+∞*𝔽, or _n_ is *-∞*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return _n_. 1. If _n_ < *1*𝔽 and _n_ > *+0*𝔽, return *+0*𝔽. 1. If _n_ is an integral Number, return _n_. 1. Return the greatest (closest to +∞) integral Number value that is not greater than _n_. @@ -31759,7 +31765,7 @@

    Math.fround ( _x_ )

    1. Let _n_ be ? ToNumber(_x_). 1. If _n_ is *NaN*, return *NaN*. - 1. If _n_ is one of *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return _n_. + 1. If _n_ is any of *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return _n_. 1. Let _n32_ be the result of converting _n_ to a value in IEEE 754-2019 binary32 format using roundTiesToEven mode. 1. Let _n64_ be the result of converting _n32_ to a value in IEEE 754-2019 binary64 format. 1. Return the ECMAScript Number value corresponding to _n64_. @@ -31776,7 +31782,7 @@

    Math.hypot ( ..._args_ )

    1. Let _n_ be ? ToNumber(_arg_). 1. Append _n_ to _coerced_. 1. For each element _number_ of _coerced_, do - 1. If _number_ is *+∞*𝔽 or _number_ is *-∞*𝔽, return *+∞*𝔽. + 1. If _number_ is either *+∞*𝔽 or *-∞*𝔽, return *+∞*𝔽. 1. Let _onlyZero_ be *true*. 1. For each element _number_ of _coerced_, do 1. If _number_ is *NaN*, return *NaN*. @@ -31807,9 +31813,9 @@

    Math.log ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN* or _n_ is *+∞*𝔽, return _n_. + 1. If _n_ is either *NaN* or *+∞*𝔽, return _n_. 1. If _n_ is *1*𝔽, return *+0*𝔽. - 1. If _n_ is *+0*𝔽 or _n_ is *-0*𝔽, return *-∞*𝔽. + 1. If _n_ is either *+0*𝔽 or *-0*𝔽, return *-∞*𝔽. 1. If _n_ < *-0*𝔽, return *NaN*. 1. Return an implementation-approximated Number value representing the result of the natural logarithm of ℝ(_n_). @@ -31821,7 +31827,7 @@

    Math.log1p ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, _n_ is *-0*𝔽, or _n_ is *+∞*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, *-0*𝔽, or *+∞*𝔽, return _n_. 1. If _n_ is *-1*𝔽, return *-∞*𝔽. 1. If _n_ < *-1*𝔽, return *NaN*. 1. Return an implementation-approximated Number value representing the result of the natural logarithm of 1 + ℝ(_n_). @@ -31834,9 +31840,9 @@

    Math.log10 ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN* or _n_ is *+∞*𝔽, return _n_. + 1. If _n_ is either *NaN* or *+∞*𝔽, return _n_. 1. If _n_ is *1*𝔽, return *+0*𝔽. - 1. If _n_ is *+0*𝔽 or _n_ is *-0*𝔽, return *-∞*𝔽. + 1. If _n_ is either *+0*𝔽 or *-0*𝔽, return *-∞*𝔽. 1. If _n_ < *-0*𝔽, return *NaN*. 1. Return an implementation-approximated Number value representing the result of the base 10 logarithm of ℝ(_n_). @@ -31848,9 +31854,9 @@

    Math.log2 ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN* or _n_ is *+∞*𝔽, return _n_. + 1. If _n_ is either *NaN* or *+∞*𝔽, return _n_. 1. If _n_ is *1*𝔽, return *+0*𝔽. - 1. If _n_ is *+0*𝔽 or _n_ is *-0*𝔽, return *-∞*𝔽. + 1. If _n_ is either *+0*𝔽 or *-0*𝔽, return *-∞*𝔽. 1. If _n_ < *-0*𝔽, return *NaN*. 1. Return an implementation-approximated Number value representing the result of the base 2 logarithm of ℝ(_n_). @@ -31922,7 +31928,7 @@

    Math.round ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, *+∞*𝔽, *-∞*𝔽, or an integral Number, return _n_. + 1. If _n_ is any of *NaN*, *+∞*𝔽, or *-∞*𝔽, or _n_ is an integral Number, return _n_. 1. If _n_ < *0.5*𝔽 and _n_ > *+0*𝔽, return *+0*𝔽. 1. If _n_ < *-0*𝔽 and _n_ ≥ *-0.5*𝔽, return *-0*𝔽. 1. Return the integral Number closest to _n_, preferring the Number closer to +∞ in the case of a tie. @@ -31941,7 +31947,7 @@

    Math.sign ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, or _n_ is *-0*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, or *-0*𝔽, return _n_. 1. If _n_ < *-0*𝔽, return *-1*𝔽. 1. Return *1*𝔽. @@ -31953,8 +31959,8 @@

    Math.sin ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, or _n_ is *-0*𝔽, return _n_. - 1. If _n_ is *+∞*𝔽 or _n_ is *-∞*𝔽, return *NaN*. + 1. If _n_ is any of *NaN*, *+0*𝔽, or *-0*𝔽, return _n_. + 1. If _n_ is either *+∞*𝔽 or *-∞*𝔽, return *NaN*. 1. Return an implementation-approximated Number value representing the result of the sine of ℝ(_n_). @@ -31965,7 +31971,7 @@

    Math.sinh ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, _n_ is *-0*𝔽, _n_ is *+∞*𝔽, or _n_ is *-∞*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return _n_. 1. Return an implementation-approximated Number value representing the result of the hyperbolic sine of ℝ(_n_). @@ -31979,7 +31985,7 @@

    Math.sqrt ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, _n_ is *-0*𝔽, or _n_ is *+∞*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, *-0*𝔽, or *+∞*𝔽, return _n_. 1. If _n_ < *-0*𝔽, return *NaN*. 1. Return an implementation-approximated Number value representing the result of the square root of ℝ(_n_). @@ -31991,8 +31997,8 @@

    Math.tan ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, or _n_ is *-0*𝔽, return _n_. - 1. If _n_ is *+∞*𝔽, or _n_ is *-∞*𝔽, return *NaN*. + 1. If _n_ is any of *NaN*, *+0*𝔽, or *-0*𝔽, return _n_. + 1. If _n_ is either *+∞*𝔽 or *-∞*𝔽, return *NaN*. 1. Return an implementation-approximated Number value representing the result of the tangent of ℝ(_n_). @@ -32003,7 +32009,7 @@

    Math.tanh ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, or _n_ is *-0*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, or *-0*𝔽, return _n_. 1. If _n_ is *+∞*𝔽, return *1*𝔽. 1. If _n_ is *-∞*𝔽, return *-1*𝔽. 1. Return an implementation-approximated Number value representing the result of the hyperbolic tangent of ℝ(_n_). @@ -32019,7 +32025,7 @@

    Math.trunc ( _x_ )

    It performs the following steps when called:

    1. Let _n_ be ? ToNumber(_x_). - 1. If _n_ is *NaN*, _n_ is *+0*𝔽, _n_ is *-0*𝔽, _n_ is *+∞*𝔽, or _n_ is *-∞*𝔽, return _n_. + 1. If _n_ is any of *NaN*, *+0*𝔽, *-0*𝔽, *+∞*𝔽, or *-∞*𝔽, return _n_. 1. If _n_ < *1*𝔽 and _n_ > *+0*𝔽, return *+0*𝔽. 1. If _n_ < *-0*𝔽 and _n_ > *-1*𝔽, return *-0*𝔽. 1. Return the integral Number nearest _n_ in the direction of *+0*𝔽. @@ -33429,7 +33435,7 @@

    Date.prototype [ @@toPrimitive ] ( _hint_ )

    1. Let _O_ be the *this* value. 1. If Type(_O_) is not Object, throw a *TypeError* exception. - 1. If _hint_ is *"string"* or *"default"*, then + 1. If _hint_ is either *"string"* or *"default"*, then 1. Let _tryFirst_ be ~string~. 1. Else if _hint_ is *"number"*, then 1. Let _tryFirst_ be ~number~. @@ -33774,7 +33780,7 @@

    String.prototype.lastIndexOf ( _searchString_ [ , _position_ ] )

    1. Let _searchLen_ be the length of _searchStr_. 1. For each non-negative integer _i_ starting with _start_ such that _i_ ≤ _len_ - _searchLen_, in descending order, do 1. Let _candidate_ be the substring of _S_ from _i_ to _i_ + _searchLen_. - 1. If _candidate_ is the same sequence of code units as _searchStr_, return 𝔽(_i_). + 1. If _candidate_ is _searchStr_, return 𝔽(_i_). 1. Return *-1*𝔽.
    @@ -33878,7 +33884,7 @@

    String.prototype.normalize ( [ _form_ ] )

    1. Let _S_ be ? ToString(_O_). 1. If _form_ is *undefined*, let _f_ be *"NFC"*. 1. Else, let _f_ be ? ToString(_form_). - 1. If _f_ is not one of *"NFC"*, *"NFD"*, *"NFKC"*, or *"NFKD"*, throw a *RangeError* exception. + 1. If _f_ is not any of *"NFC"*, *"NFD"*, *"NFKC"*, or *"NFKD"*, throw a *RangeError* exception. 1. Let _ns_ be the String value that is the result of normalizing _S_ into the normalization form named by _f_ as specified in https://unicode.org/reports/tr15/. 1. Return _ns_.
    @@ -35436,7 +35442,7 @@

    1. Assert: _c_ is a Continuation. 1. Let _Input_ be _x_'s _input_. 1. Let _e_ be _x_'s _endIndex_. - 1. If _e_ = 0, or if _rer_.[[Multiline]] is *true* and the character _Input_[_e_ - 1] is one of |LineTerminator|, then + 1. If _e_ = 0 or _rer_.[[Multiline]] is *true* and the character _Input_[_e_ - 1] is matched by |LineTerminator|, then 1. Return _c_(_x_). 1. Return ~failure~. @@ -35451,7 +35457,7 @@

    1. Let _Input_ be _x_'s _input_. 1. Let _e_ be _x_'s _endIndex_. 1. Let _InputLength_ be the number of elements in _Input_. - 1. If _e_ = _InputLength_, or if _rer_.[[Multiline]] is *true* and the character _Input_[_e_] is one of |LineTerminator|, then + 1. If _e_ = _InputLength_ or _rer_.[[Multiline]] is *true* and the character _Input_[_e_] is matched by |LineTerminator|, then 1. Return _c_(_x_). 1. Return ~failure~. @@ -35464,7 +35470,7 @@

    1. Let _e_ be _x_'s _endIndex_. 1. Let _a_ be IsWordChar(_rer_, _Input_, _e_ - 1). 1. Let _b_ be IsWordChar(_rer_, _Input_, _e_). - 1. If _a_ is *true* and _b_ is *false*, or if _a_ is *false* and _b_ is *true*, return _c_(_x_). + 1. If _a_ is *true* and _b_ is *false*, or _a_ is *false* and _b_ is *true*, return _c_(_x_). 1. Return ~failure~. Assertion :: `\` `B` @@ -35476,7 +35482,7 @@

    1. Let _e_ be _x_'s _endIndex_. 1. Let _a_ be IsWordChar(_rer_, _Input_, _e_ - 1). 1. Let _b_ be IsWordChar(_rer_, _Input_, _e_). - 1. If _a_ is *true* and _b_ is *true*, or if _a_ is *false* and _b_ is *false*, return _c_(_x_). + 1. If _a_ is *true* and _b_ is *true*, or _a_ is *false* and _b_ is *false*, return _c_(_x_). 1. Return ~failure~. Assertion :: `(` `?` `=` Disjunction `)` @@ -36131,7 +36137,7 @@

    1. Else, let _P_ be ? ToString(_pattern_). 1. If _flags_ is *undefined*, let _F_ be the empty String. 1. Else, let _F_ be ? ToString(_flags_). - 1. If _F_ contains any code unit other than *"d"*, *"g"*, *"i"*, *"m"*, *"s"*, *"u"*, or *"y"* or if it contains the same code unit more than once, throw a *SyntaxError* exception. + 1. If _F_ contains any code unit other than *"d"*, *"g"*, *"i"*, *"m"*, *"s"*, *"u"*, or *"y"*, or _F_ contains the same code unit more than once, throw a *SyntaxError* exception. 1. If _F_ contains *"i"*, let _i_ be *true*; else let _i_ be *false*. 1. If _F_ contains *"m"*, let _m_ be *true*; else let _m_ be *false*. 1. If _F_ contains *"s"*, let _s_ be *true*; else let _s_ be *false*. @@ -36426,7 +36432,7 @@

    1. If _S_ is the empty String, return 0. 1. Let _codepoints_ be StringToCodePoints(_S_). - 1. Let _eUTF_ be the smallest index into _S_ that corresponds to the character at element _e_ of _codepoints_. If _e_ is greater than or equal to the number of elements in _codepoints_, then _eUTF_ is the length of _S_. + 1. Let _eUTF_ be the smallest index into _S_ that corresponds to the character at element _e_ of _codepoints_. If _e_ ≥ the number of elements in _codepoints_, then _eUTF_ is the length of _S_. 1. Return _eUTF_. @@ -37666,8 +37672,7 @@

    Array.prototype.indexOf ( _searchElement_ [ , _fromIndex_ ] )

    1. Let _kPresent_ be ? HasProperty(_O_, ! ToString(𝔽(_k_))). 1. If _kPresent_ is *true*, then 1. Let _elementK_ be ? Get(_O_, ! ToString(𝔽(_k_))). - 1. Let _same_ be IsStrictlyEqual(_searchElement_, _elementK_). - 1. If _same_ is *true*, return 𝔽(_k_). + 1. If IsStrictlyEqual(_searchElement_, _elementK_) is *true*, return 𝔽(_k_). 1. Set _k_ to _k_ + 1. 1. Return *-1*𝔽.
    @@ -37690,7 +37695,7 @@

    Array.prototype.join ( _separator_ )

    1. Repeat, while _k_ < _len_, 1. If _k_ > 0, set _R_ to the string-concatenation of _R_ and _sep_. 1. Let _element_ be ? Get(_O_, ! ToString(𝔽(_k_))). - 1. If _element_ is *undefined* or *null*, let _next_ be the empty String; otherwise, let _next_ be ? ToString(_element_). + 1. If _element_ is either *undefined* or *null*, let _next_ be the empty String; otherwise, let _next_ be ? ToString(_element_). 1. Set _R_ to the string-concatenation of _R_ and _next_. 1. Set _k_ to _k_ + 1. 1. Return _R_. @@ -37730,8 +37735,7 @@

    Array.prototype.lastIndexOf ( _searchElement_ [ , _fromIndex_ ] )

    1. Let _kPresent_ be ? HasProperty(_O_, ! ToString(𝔽(_k_))). 1. If _kPresent_ is *true*, then 1. Let _elementK_ be ? Get(_O_, ! ToString(𝔽(_k_))). - 1. Let _same_ be IsStrictlyEqual(_searchElement_, _elementK_). - 1. If _same_ is *true*, return 𝔽(_k_). + 1. If IsStrictlyEqual(_searchElement_, _elementK_) is *true*, return 𝔽(_k_). 1. Set _k_ to _k_ - 1. 1. Return *-1*𝔽.
    @@ -38239,7 +38243,7 @@

    Array.prototype.toLocaleString ( [ _reserved1_ [ , _reserved2_ ] ] )

    1. If _k_ > 0, then 1. Set _R_ to the string-concatenation of _R_ and _separator_. 1. Let _nextElement_ be ? Get(_array_, ! ToString(𝔽(_k_))). - 1. If _nextElement_ is not *undefined* or *null*, then + 1. If _nextElement_ is not either *undefined* or *null*, then 1. Let _S_ be ? ToString(? Invoke(_nextElement_, *"toLocaleString"*)). 1. Set _R_ to the string-concatenation of _R_ and _S_. 1. Set _k_ to _k_ + 1. @@ -39113,8 +39117,7 @@

    %TypedArray%.prototype.indexOf ( _searchElement_ [ , _fromIndex_ ] )

    1. Let _kPresent_ be ! HasProperty(_O_, ! ToString(𝔽(_k_))). 1. If _kPresent_ is *true*, then 1. Let _elementK_ be ! Get(_O_, ! ToString(𝔽(_k_))). - 1. Let _same_ be IsStrictlyEqual(_searchElement_, _elementK_). - 1. If _same_ is *true*, return 𝔽(_k_). + 1. If IsStrictlyEqual(_searchElement_, _elementK_) is *true*, return 𝔽(_k_). 1. Set _k_ to _k_ + 1. 1. Return *-1*𝔽.
    @@ -39173,8 +39176,7 @@

    %TypedArray%.prototype.lastIndexOf ( _searchElement_ [ , _fromIndex_ ] )

    𝔽.
    @@ -39344,18 +39346,16 @@

    1. If _targetOffset_ is +∞, throw a *RangeError* exception. 1. If _srcLength_ + _targetOffset_ > _targetLength_, throw a *RangeError* exception. 1. If _target_.[[ContentType]] ≠ _source_.[[ContentType]], throw a *TypeError* exception. - 1. If both IsSharedArrayBuffer(_srcBuffer_) and IsSharedArrayBuffer(_targetBuffer_) are *true*, then - 1. If _srcBuffer_.[[ArrayBufferData]] and _targetBuffer_.[[ArrayBufferData]] are the same Shared Data Block values, let _same_ be *true*; else let _same_ be *false*. - 1. Else, let _same_ be SameValue(_srcBuffer_, _targetBuffer_). - 1. If _same_ is *true*, then + 1. If IsSharedArrayBuffer(_srcBuffer_) is *true*, IsSharedArrayBuffer(_targetBuffer_) is *true*, and _srcBuffer_.[[ArrayBufferData]] is _targetBuffer_.[[ArrayBufferData]], let _sameSharedArrayBuffer_ be *true*; otherwise, let _sameSharedArrayBuffer_ be *false*. + 1. If SameValue(_srcBuffer_, _targetBuffer_) is *true* or _sameSharedArrayBuffer is *true*, then 1. Let _srcByteLength_ be _source_.[[ByteLength]]. 1. Set _srcBuffer_ to ? CloneArrayBuffer(_srcBuffer_, _srcByteOffset_, _srcByteLength_). 1. Let _srcByteIndex_ be 0. 1. Else, let _srcByteIndex_ be _srcByteOffset_. 1. Let _targetByteIndex_ be _targetOffset_ × _targetElementSize_ + _targetByteOffset_. 1. Let _limit_ be _targetByteIndex_ + _targetElementSize_ × _srcLength_. - 1. If _srcType_ is the same as _targetType_, then - 1. NOTE: If _srcType_ and _targetType_ are the same, the transfer must be performed in a manner that preserves the bit-level encoding of the source data. + 1. If _srcType_ is _targetType_, then + 1. NOTE: If _srcType_ is _targetType_, the transfer must be performed in a manner that preserves the bit-level encoding of the source data. 1. Repeat, while _targetByteIndex_ < _limit_, 1. Let _value_ be GetValueFromBuffer(_srcBuffer_, _srcByteIndex_, ~Uint8~, *true*, ~Unordered~). 1. Perform SetValueInBuffer(_targetBuffer_, _targetByteIndex_, ~Uint8~, _value_, *true*, ~Unordered~). @@ -39425,7 +39425,7 @@

    %TypedArray%.prototype.slice ( _start_, _end_ )

    1. If IsDetachedBuffer(_O_.[[ViewedArrayBuffer]]) is *true*, throw a *TypeError* exception. 1. Let _srcType_ be TypedArrayElementType(_O_). 1. Let _targetType_ be TypedArrayElementType(_A_). - 1. If _srcType_ is different from _targetType_, then + 1. If _srcType_ is not _targetType_, then 1. Let _n_ be 0. 1. Repeat, while _k_ < _final_, 1. Let _Pk_ be ! ToString(𝔽(_k_)). @@ -39437,7 +39437,7 @@

    %TypedArray%.prototype.slice ( _start_, _end_ )

    1. Let _srcBuffer_ be _O_.[[ViewedArrayBuffer]]. 1. Let _targetBuffer_ be _A_.[[ViewedArrayBuffer]]. 1. Let _elementSize_ be TypedArrayElementSize(_O_). - 1. NOTE: If _srcType_ and _targetType_ are the same, the transfer must be performed in a manner that preserves the bit-level encoding of the source data. + 1. NOTE: If _srcType_ is _targetType_, the transfer must be performed in a manner that preserves the bit-level encoding of the source data. 1. Let _srcByteOffset_ be _O_.[[ByteOffset]]. 1. Let _srcByteIndex_ be (_k_ × _elementSize_) + _srcByteOffset_. 1. Let _targetByteIndex_ be _A_.[[ByteOffset]]. @@ -39507,7 +39507,7 @@

    %TypedArray%.prototype.sort ( _comparefn_ )

    %TypedArray%.prototype.subarray ( _begin_, _end_ )

    -

    This method returns a new _TypedArray_ whose element type is the same as this _TypedArray_ and whose ArrayBuffer is the same as the ArrayBuffer of this _TypedArray_, referencing the elements at _begin_, inclusive, up to _end_, exclusive. If either _begin_ or _end_ is negative, it refers to an index from the end of the array, as opposed to from the beginning.

    +

    This method returns a new _TypedArray_ whose element type is the same as the element type of this _TypedArray_ and whose ArrayBuffer is the same as the ArrayBuffer of this _TypedArray_, referencing the elements at _begin_, inclusive, up to _end_, exclusive. If either _begin_ or _end_ is negative, it refers to an index from the end of the array, as opposed to from the beginning.

    It performs the following steps when called:

    1. Let _O_ be the *this* value. @@ -39731,7 +39731,7 @@

    1. Let _obj_ be IntegerIndexedObjectCreate(_proto_). 1. Assert: _obj_.[[ViewedArrayBuffer]] is *undefined*. 1. Set _obj_.[[TypedArrayName]] to _constructorName_. - 1. If _constructorName_ is *"BigInt64Array"* or *"BigUint64Array"*, set _obj_.[[ContentType]] to ~BigInt~. + 1. If _constructorName_ is either *"BigInt64Array"* or *"BigUint64Array"*, set _obj_.[[ContentType]] to ~BigInt~. 1. Otherwise, set _obj_.[[ContentType]] to ~Number~. 1. If _length_ is not present, then 1. Set _obj_.[[ByteLength]] to 0. @@ -39762,7 +39762,7 @@

    1. Let _srcByteOffset_ be _srcArray_.[[ByteOffset]]. 1. Let _elementLength_ be _srcArray_.[[ArrayLength]]. 1. Let _byteLength_ be _elementSize_ × _elementLength_. - 1. If _elementType_ is the same as _srcType_, then + 1. If _elementType_ is _srcType_, then 1. Let _data_ be ? CloneArrayBuffer(_srcData_, _srcByteOffset_, _byteLength_). 1. Else, 1. Let _data_ be ? AllocateArrayBuffer(%ArrayBuffer%, _byteLength_). @@ -40107,7 +40107,7 @@

    Map.prototype.forEach ( _callbackfn_ [ , _thisArg_ ] )

    1. Let _numEntries_ be the number of elements of _entries_. 1. Let _index_ be 0. 1. Repeat, while _index_ < _numEntries_, - 1. Let _e_ be the Record { [[Key]], [[Value]] } that is the value of _entries_[_index_]. + 1. Let _e_ be the Record { [[Key]], [[Value]] } that is _entries_[_index_]. 1. Set _index_ to _index_ + 1. 1. If _e_.[[Key]] is not ~empty~, then 1. Perform ? Call(_callbackfn_, _thisArg_, « _e_.[[Value]], _e_.[[Key]], _M_ »). @@ -40238,7 +40238,7 @@

    1. Let _index_ be 0. 1. Let _numEntries_ be the number of elements of _entries_. 1. Repeat, while _index_ < _numEntries_, - 1. Let _e_ be the Record { [[Key]], [[Value]] } that is the value of _entries_[_index_]. + 1. Let _e_ be the Record { [[Key]], [[Value]] } that is _entries_[_index_]. 1. Set _index_ to _index_ + 1. 1. If _e_.[[Key]] is not ~empty~, then 1. If _kind_ is ~key~, let _result_ be _e_.[[Key]]. @@ -40972,7 +40972,7 @@

    It verifies if the argument _type_ is an unsigned TypedArray element type.
    - 1. If _type_ is ~Uint8~, ~Uint8C~, ~Uint16~, ~Uint32~, or ~BigUint64~, return *true*. + 1. If _type_ is any of ~Uint8~, ~Uint8C~, ~Uint16~, ~Uint32~, or ~BigUint64~, return *true*. 1. Return *false*. @@ -40988,7 +40988,7 @@

    It verifies if the argument _type_ is an Integer TypedArray element type not including ~Uint8C~.
    - 1. If _type_ is ~Int8~, ~Uint8~, ~Int16~, ~Uint16~, ~Int32~, or ~Uint32~, return *true*. + 1. If _type_ is any of ~Int8~, ~Uint8~, ~Int16~, ~Uint16~, ~Int32~, or ~Uint32~, return *true*. 1. Return *false*. @@ -41004,7 +41004,7 @@

    It verifies if the argument _type_ is a BigInt TypedArray element type.
    - 1. If _type_ is ~BigUint64~ or ~BigInt64~, return *true*. + 1. If _type_ is either ~BigUint64~ or ~BigInt64~, return *true*. 1. Return *false*. @@ -41020,7 +41020,7 @@

    1. If IsUnclampedIntegerElementType(_type_) is *true*, return *true*. - 1. If IsBigIntElementType(_type_) is *true* and _order_ is not ~Init~ or ~Unordered~, return *true*. + 1. If IsBigIntElementType(_type_) is *true* and _order_ is neither ~Init~ nor ~Unordered~, return *true*. 1. Return *false*. @@ -42350,7 +42350,7 @@

    Atomics.wait ( _typedArray_, _index_, _value_, _timeout_ )

    1. If _typedArray_.[[TypedArrayName]] is *"BigInt64Array"*, let _v_ be ? ToBigInt64(_value_). 1. Otherwise, let _v_ be ? ToInt32(_value_). 1. Let _q_ be ? ToNumber(_timeout_). - 1. If _q_ is *NaN* or *+∞*𝔽, let _t_ be +∞; else if _q_ is *-∞*𝔽, let _t_ be 0; else let _t_ be max(ℝ(_q_), 0). + 1. If _q_ is either *NaN* or *+∞*𝔽, let _t_ be +∞; else if _q_ is *-∞*𝔽, let _t_ be 0; else let _t_ be max(ℝ(_q_), 0). 1. Let _B_ be AgentCanSuspend(). 1. If _B_ is *false*, throw a *TypeError* exception. 1. Let _block_ be _buffer_.[[ArrayBufferData]]. @@ -44840,7 +44840,7 @@

    prototype

    Whenever a GeneratorFunction instance is created another ordinary object is also created and is the initial value of the generator function's *"prototype"* property. The value of the prototype property is used to initialize the [[Prototype]] internal slot of a newly created Generator when the generator function object is invoked using [[Call]].

    This property has the attributes { [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *false* }.

    -

    Unlike Function instances, the object that is the value of the a GeneratorFunction's *"prototype"* property does not have a *"constructor"* property whose value is the GeneratorFunction instance.

    +

    Unlike Function instances, the object that is the value of a GeneratorFunction's *"prototype"* property does not have a *"constructor"* property whose value is the GeneratorFunction instance.

    @@ -44947,7 +44947,7 @@

    prototype

    Whenever an AsyncGeneratorFunction instance is created another ordinary object is also created and is the initial value of the async generator function's *"prototype"* property. The value of the prototype property is used to initialize the [[Prototype]] internal slot of a newly created AsyncGenerator when the generator function object is invoked using [[Call]].

    This property has the attributes { [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *false* }.

    -

    Unlike function instances, the object that is the value of the an AsyncGeneratorFunction's *"prototype"* property does not have a *"constructor"* property whose value is the AsyncGeneratorFunction instance.

    +

    Unlike function instances, the object that is the value of an AsyncGeneratorFunction's *"prototype"* property does not have a *"constructor"* property whose value is the AsyncGeneratorFunction instance.

    @@ -45112,7 +45112,7 @@

    1. Perform ? RequireInternalSlot(_generator_, [[GeneratorState]]). 1. Perform ? RequireInternalSlot(_generator_, [[GeneratorBrand]]). - 1. If _generator_.[[GeneratorBrand]] is not the same value as _generatorBrand_, throw a *TypeError* exception. + 1. If _generator_.[[GeneratorBrand]] is not _generatorBrand_, throw a *TypeError* exception. 1. Assert: _generator_ also has a [[GeneratorContext]] internal slot. 1. Let _state_ be _generator_.[[GeneratorState]]. 1. If _state_ is ~executing~, throw a *TypeError* exception. @@ -45465,7 +45465,7 @@

    1. Perform ? RequireInternalSlot(_generator_, [[AsyncGeneratorContext]]). 1. Perform ? RequireInternalSlot(_generator_, [[AsyncGeneratorState]]). 1. Perform ? RequireInternalSlot(_generator_, [[AsyncGeneratorQueue]]). - 1. If _generator_.[[GeneratorBrand]] is not the same value as _generatorBrand_, throw a *TypeError* exception. + 1. If _generator_.[[GeneratorBrand]] is not _generatorBrand_, throw a *TypeError* exception. 1. Return ~unused~. @@ -46364,7 +46364,7 @@

    1. Let _events_ be an empty Set. 1. For each event _E_ of EventSet(_execution_), do - 1. If _E_ is a ReadSharedMemory, WriteSharedMemory, or ReadModifyWriteSharedMemory event, add _E_ to _events_. + 1. If _E_ is any of a ReadSharedMemory, WriteSharedMemory, or ReadModifyWriteSharedMemory event, add _E_ to _events_. 1. Return _events_. @@ -47534,7 +47534,7 @@

    escape ( _string_ )

    1. Let _k_ be 0. 1. Repeat, while _k_ < _length_, 1. Let _char_ be the code unit (represented as a 16-bit unsigned integer) at index _k_ within _string_. - 1. If _char_ is one of the code units in *"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@\*_+-./"*, then + 1. If _char_ is any of the code units in *"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@\*_+-./"*, then 1. Let _S_ be the String value containing the single code unit _char_. 1. Else if _char_ ≥ 256, then 1. Let _n_ be the numeric value of _char_. @@ -47992,7 +47992,7 @@

    Changes to EvalDeclarationInstantiation

    1. Let _bindingExists_ be *false*. 1. Let _thisEnv_ be _lexEnv_. 1. Assert: The following loop will terminate. - 1. Repeat, while _thisEnv_ is not the same as _varEnv_, + 1. Repeat, while _thisEnv_ is not _varEnv_, 1. If _thisEnv_ is not an Object Environment Record, then 1. If ! _thisEnv_.HasBinding(_F_) is *true*, then 1. [id="step-evaldeclarationinstantiation-web-compat-bindingexists"] Let _bindingExists_ be *true*. @@ -48197,7 +48197,7 @@

    Changes to IsLooselyEqual

    1. Perform the following steps: 1. If Type(_x_) is Object and _x_ has an [[IsHTMLDDA]] internal slot and _y_ is either *null* or *undefined*, return *true*. - 1. If _x_ is either *null* or *undefined* and Type(_y_) is Object and _y_ has an [[IsHTMLDDA]] internal slot, return *true*. + 1. If _x_ is either *null* or *undefined*, Type(_y_) is Object, and _y_ has an [[IsHTMLDDA]] internal slot, return *true*.