diff --git a/spec.html b/spec.html index 8745abf525..83e3aeb3ce 100644 --- a/spec.html +++ b/spec.html @@ -162,14 +162,14 @@

ECMAScript Overview

Objects

-

Even though ECMAScript includes syntax for class definitions, ECMAScript objects are not fundamentally class-based such as those in C++, Smalltalk, or Java. Instead objects may be created in various ways including via a literal notation or via constructors which create objects and then execute code that initializes all or part of them by assigning initial values to their properties. Each constructor is a function that has a property named `"prototype"` that is used to implement prototype-based inheritance and shared properties. Objects are created by using constructors in new expressions; for example, `new Date(2009, 11)` creates a new Date object. Invoking a constructor without using new has consequences that depend on the constructor. For example, `Date()` produces a string representation of the current date and time rather than an object.

-

Every object created by a constructor has an implicit reference (called the object's prototype) to the value of its constructor's `"prototype"` property. Furthermore, a prototype may have a non-null implicit reference to its prototype, and so on; this is called the prototype chain. When a reference is made to a property in an object, that reference is to the property of that name in the first object in the prototype chain that contains a property of that name. In other words, first the object mentioned directly is examined for such a property; if that object contains the named property, that is the property to which the reference refers; if that object does not contain the named property, the prototype for that object is examined next; and so on.

+

Even though ECMAScript includes syntax for class definitions, ECMAScript objects are not fundamentally class-based such as those in C++, Smalltalk, or Java. Instead objects may be created in various ways including via a literal notation or via constructors which create objects and then execute code that initializes all or part of them by assigning initial values to their properties. Each constructor is a function that has a property named *"prototype"* that is used to implement prototype-based inheritance and shared properties. Objects are created by using constructors in new expressions; for example, `new Date(2009, 11)` creates a new Date object. Invoking a constructor without using new has consequences that depend on the constructor. For example, `Date()` produces a string representation of the current date and time rather than an object.

+

Every object created by a constructor has an implicit reference (called the object's prototype) to the value of its constructor's *"prototype"* property. Furthermore, a prototype may have a non-null implicit reference to its prototype, and so on; this is called the prototype chain. When a reference is made to a property in an object, that reference is to the property of that name in the first object in the prototype chain that contains a property of that name. In other words, first the object mentioned directly is examined for such a property; if that object contains the named property, that is the property to which the reference refers; if that object does not contain the named property, the prototype for that object is examined next; and so on.

An image of lots of boxes and arrows.

In a class-based object-oriented language, in general, state is carried by instances, methods are carried by classes, and inheritance is only of structure and behaviour. In ECMAScript, the state and methods are carried by objects, while structure, behaviour, and state are all inherited.

All objects that do not directly contain a particular property that their prototype contains share that property and its value. Figure 1 illustrates this:

-

CF is a constructor (and also an object). Five objects have been created by using `new` expressions: cf1, cf2, cf3, cf4, and cf5. Each of these objects contains properties named `"q1"` and `"q2"`. The dashed lines represent the implicit prototype relationship; so, for example, cf3's prototype is CFp. The constructor, CF, has two properties itself, named `"P1"` and `"P2"`, which are not visible to CFp, cf1, cf2, cf3, cf4, or cf5. The property named `"CFP1"` in CFp is shared by cf1, cf2, cf3, cf4, and cf5 (but not by CF), as are any properties found in CFp's implicit prototype chain that are not named `"q1"`, `"q2"`, or `"CFP1"`. Notice that there is no implicit prototype link between CF and CFp.

+

CF is a constructor (and also an object). Five objects have been created by using `new` expressions: cf1, cf2, cf3, cf4, and cf5. Each of these objects contains properties named *"q1"* and *"q2"*. The dashed lines represent the implicit prototype relationship; so, for example, cf3's prototype is CFp. The constructor, CF, has two properties itself, named *"P1"* and *"P2"*, which are not visible to CFp, cf1, cf2, cf3, cf4, or cf5. The property named *"CFP1"* in CFp is shared by cf1, cf2, cf3, cf4, and cf5 (but not by CF), as are any properties found in CFp's implicit prototype chain that are not named *"q1"*, *"q2"*, or *"CFP1"*. Notice that there is no implicit prototype link between CF and CFp.

Unlike most class-based object languages, properties can be added to objects dynamically by assigning values to them. That is, constructors are not required to name or assign values to all or any of the constructed object's properties. In the above diagram, one could add a new shared property for cf1, cf2, cf3, cf4, and cf5 by assigning a new value to the property in CFp.

Although ECMAScript objects are not inherently class-based, it is often convenient to define class-like abstractions based upon a common pattern of constructor functions, prototype objects, and methods. The ECMAScript built-in objects themselves follow such a class-like pattern. Beginning with ECMAScript 2015, the ECMAScript language includes syntactic class definitions that permit programmers to concisely define objects that conform to the same class-like abstraction pattern used by the built-in objects.

@@ -211,7 +211,7 @@

object

constructor

function object that creates and initializes objects

-

The value of a constructor's `"prototype"` property is a prototype object that is used to implement inheritance and shared properties.

+

The value of a constructor's *"prototype"* property is a prototype object that is used to implement inheritance and shared properties.

@@ -219,7 +219,7 @@

constructor

prototype

object that provides shared properties for other objects

-

When a constructor creates an object, that object implicitly references the constructor's `"prototype"` property for the purpose of resolving property references. The constructor's `"prototype"` property can be referenced by the program expression constructor.prototype, and properties added to an object's prototype are shared, through inheritance, by all objects sharing the prototype. Alternatively, a new object may be created with an explicitly specified prototype by using the `Object.create` built-in function.

+

When a constructor creates an object, that object implicitly references the constructor's *"prototype"* property for the purpose of resolving property references. The constructor's *"prototype"* property can be referenced by the program expression constructor.prototype, and properties added to an object's prototype are shared, through inheritance, by all objects sharing the prototype. Alternatively, a new object may be created with an explicitly specified prototype by using the `Object.create` built-in function.

@@ -730,7 +730,7 @@

Syntax-Directed Operations

1. Let _status_ be SyntaxDirectedOperation of |SomeNonTerminal|. 2. Let _someParseNode_ be the parse of some source text. 2. Perform SyntaxDirectedOperation of _someParseNode_. - 2. Perform SyntaxDirectedOperation of _someParseNode_ passing `"value"` as the argument. + 2. Perform SyntaxDirectedOperation of _someParseNode_ passing *"value"* as the argument.

Unless explicitly specified otherwise, all chain productions have an implicit definition for every operation that might be applied to that production's left-hand side nonterminal. The implicit definition simply reapplies the same operation with the same parameters, if any, to the chain production's sole right-hand side nonterminal and then returns the result. For example, assume that some algorithm has a step of the form: “Return the result of evaluating |Block|” and that there is a production:

@@ -752,11 +752,11 @@

Runtime Semantics

Implicit Completion Values

The algorithms of this specification often implicitly return Completion Records whose [[Type]] is ~normal~. Unless it is otherwise obvious from the context, an algorithm statement that returns a value that is not a Completion Record, such as:

- 1. Return `"Infinity"`. + 1. Return *"Infinity"*.

means the same thing as:

- 1. Return NormalCompletion(`"Infinity"`). + 1. Return NormalCompletion(*"Infinity"*).

However, if the value expression of a “return” statement is a Completion Record construction literal, the resulting Completion Record is returned. If the value expression is a call to an abstract operation, the “return” statement simply returns the Completion Record produced by the abstract operation.

The abstract operation Completion(_completionRecord_) is used to emphasize that a previously computed Completion Record is being returned. The Completion abstract operation takes a single argument, _completionRecord_, and performs the following steps:

@@ -974,7 +974,7 @@

Well-Known Symbols

@@asyncIterator - `"Symbol.asyncIterator"` + *"Symbol.asyncIterator"* A method that returns the default AsyncIterator for an object. Called by the semantics of the `for`-`await`-`of` statement. @@ -985,7 +985,7 @@

Well-Known Symbols

@@hasInstance - `"Symbol.hasInstance"` + *"Symbol.hasInstance"* A method that determines if a constructor object recognizes an object as one of the constructor's instances. Called by the semantics of the `instanceof` operator. @@ -996,7 +996,7 @@

Well-Known Symbols

@@isConcatSpreadable - `"Symbol.isConcatSpreadable"` + *"Symbol.isConcatSpreadable"* A Boolean valued property that if true indicates that an object should be flattened to its array elements by `Array.prototype.concat`. @@ -1007,7 +1007,7 @@

Well-Known Symbols

@@iterator - `"Symbol.iterator"` + *"Symbol.iterator"* A method that returns the default Iterator for an object. Called by the semantics of the for-of statement. @@ -1018,7 +1018,7 @@

Well-Known Symbols

@@match - `"Symbol.match"` + *"Symbol.match"* A regular expression method that matches the regular expression against a string. Called by the `String.prototype.match` method. @@ -1029,7 +1029,7 @@

Well-Known Symbols

@@matchAll - `"Symbol.matchAll"` + *"Symbol.matchAll"* A regular expression method that returns an iterator, that yields matches of the regular expression against a string. Called by the `String.prototype.matchAll` method. @@ -1040,7 +1040,7 @@

Well-Known Symbols

@@replace - `"Symbol.replace"` + *"Symbol.replace"* A regular expression method that replaces matched substrings of a string. Called by the `String.prototype.replace` method. @@ -1051,7 +1051,7 @@

Well-Known Symbols

@@search - `"Symbol.search"` + *"Symbol.search"* A regular expression method that returns the index within a string that matches the regular expression. Called by the `String.prototype.search` method. @@ -1062,7 +1062,7 @@

Well-Known Symbols

@@species - `"Symbol.species"` + *"Symbol.species"* A function valued property that is the constructor function that is used to create derived objects. @@ -1073,7 +1073,7 @@

Well-Known Symbols

@@split - `"Symbol.split"` + *"Symbol.split"* A regular expression method that splits a string at the indices that match the regular expression. Called by the `String.prototype.split` method. @@ -1084,7 +1084,7 @@

Well-Known Symbols

@@toPrimitive - `"Symbol.toPrimitive"` + *"Symbol.toPrimitive"* A method that converts an object to a corresponding primitive value. Called by the ToPrimitive abstract operation. @@ -1095,7 +1095,7 @@

Well-Known Symbols

@@toStringTag - `"Symbol.toStringTag"` + *"Symbol.toStringTag"* A String valued property that is used in the creation of the default string description of an object. Accessed by the built-in method `Object.prototype.toString`. @@ -1106,7 +1106,7 @@

Well-Known Symbols

@@unscopables - `"Symbol.unscopables"` + *"Symbol.unscopables"* An object valued property whose own and inherited property names are property names that are excluded from the `with` environment bindings of the associated object. @@ -1744,10 +1744,10 @@

Number::bitwiseOR ( _x_, _y_ )

Number::toString ( _x_ )

The abstract operation Number::toString converts a Number _x_ to String format as follows:

- 1. If _x_ is *NaN*, return the String `"NaN"`. - 1. If _x_ is *+0* or *-0*, return the String `"0"`. - 1. If _x_ is less than zero, return the string-concatenation of `"-"` and ! Number::toString(-_x_). - 1. If _x_ is *+∞*, return the String `"Infinity"`. + 1. If _x_ is *NaN*, return the String *"NaN"*. + 1. If _x_ is *+0* or *-0*, return the String *"0"*. + 1. If _x_ is less than zero, return the string-concatenation of *"-"* and ! Number::toString(-_x_). + 1. If _x_ is *+∞*, return the String *"Infinity"*. 1. Otherwise, let _n_, _k_, and _s_ be integers such that _k_ ≥ 1, 10_k_ - 1 ≤ _s_ < 10_k_, the Number value for ℝ(_s_) × 10ℝ(_n_) - ℝ(_k_) is _x_, and _k_ is as small as possible. Note that _k_ is the number of digits in the decimal representation of _s_, that _s_ is not divisible by 10, and that the least significant digit of _s_ is not necessarily uniquely determined by these criteria. 1. If _k_ ≤ _n_ ≤ 21, return the string-concatenation of: * the code units of the _k_ digits of the decimal representation of _s_ (in order, with no leading zeroes) @@ -1955,24 +1955,24 @@

BinaryXor ( _x_, _y_ )

BigIntBitwiseOp ( _op_, _x_, _y_ )

- 1. Assert: _op_ is `"&"`, `"|"`, or `"^"`. + 1. Assert: _op_ is *"&"*, *"|"*, or *"^"*. 1. Let _result_ be *0n*. 1. Let _shift_ be 0. 1. Repeat, until (_x_ = 0 or _x_ = -1) and (_y_ = 0 or _y_ = -1), 1. Let _xDigit_ be _x_ modulo 2. 1. Let _yDigit_ be _y_ modulo 2. - 1. If _op_ is `"&"`, set _result_ to _result_ + 2_shift_ × BinaryAnd(_xDigit_, _yDigit_). - 1. Else if _op_ is `"|"`, set _result_ to _result_ + 2_shift_ × BinaryOr(_xDigit_, _yDigit_). + 1. If _op_ is *"&"*, set _result_ to _result_ + 2_shift_ × BinaryAnd(_xDigit_, _yDigit_). + 1. Else if _op_ is *"|"*, set _result_ to _result_ + 2_shift_ × BinaryOr(_xDigit_, _yDigit_). 1. Else, - 1. Assert: _op_ is `"^"`. + 1. Assert: _op_ is *"^"*. 1. Set _result_ to _result_ + 2_shift_ × BinaryXor(_xDigit_, _yDigit_). 1. Set _shift_ to _shift_ + 1. 1. Set _x_ to (_x_ - _xDigit_) / 2. 1. Set _y_ to (_y_ - _yDigit_) / 2. - 1. If _op_ is `"&"`, let _tmp_ be BinaryAnd(_x_ modulo 2, _y_ modulo 2). - 1. Else if _op_ is `"|"`, let _tmp_ be BinaryOr(_x_ modulo 2, _y_ modulo 2). + 1. If _op_ is *"&"*, let _tmp_ be BinaryAnd(_x_ modulo 2, _y_ modulo 2). + 1. Else if _op_ is *"|"*, let _tmp_ be BinaryOr(_x_ modulo 2, _y_ modulo 2). 1. Else, - 1. Assert: _op_ is `"^"`. + 1. Assert: _op_ is *"^"*. 1. Let _tmp_ be BinaryXor(_x_ modulo 2, _y_ modulo 2). 1. If _tmp_ ≠ 0, then 1. Set _result_ to _result_ - 2_shift_. NOTE: This extends the sign. @@ -1983,21 +1983,21 @@

BigIntBitwiseOp ( _op_, _x_, _y_ )

BigInt::bitwiseAND ( _x_, _y_ )

- 1. Return BigIntBitwiseOp(`"&"`, _x_, _y_). + 1. Return BigIntBitwiseOp(*"&"*, _x_, _y_).

BigInt::bitwiseXOR ( _x_, _y_ )

- 1. Return BigIntBitwiseOp(`"^"`, _x_, _y_). + 1. Return BigIntBitwiseOp(*"^"*, _x_, _y_).

BigInt::bitwiseOR ( _x_, _y_ )

- 1. Return BigIntBitwiseOp(`"|"`, _x_, _y_). + 1. Return BigIntBitwiseOp(*"|"*, _x_, _y_).
@@ -2005,7 +2005,7 @@

BigInt::bitwiseOR ( _x_, _y_ )

BigInt::toString ( _x_ )

The abstract operation BigInt::toString converts a BigInt _x_ to String format as follows:

- 1. If _x_ is less than zero, return the string-concatenation of the String `"-"` and ! BigInt::toString(-_x_). + 1. If _x_ is less than zero, return the string-concatenation of the String *"-"* and ! BigInt::toString(-_x_). 1. Return the String value consisting of the code units of the digits of the decimal representation of _x_.
@@ -2644,7 +2644,7 @@

Well-Known Intrinsic Objects

`ArrayBuffer.prototype` - The initial value of the `"prototype"` data property of %ArrayBuffer%; i.e., %ArrayBuffer.prototype% + The initial value of the *"prototype"* data property of %ArrayBuffer%; i.e., %ArrayBuffer.prototype% @@ -2665,7 +2665,7 @@

Well-Known Intrinsic Objects

`Array.prototype` - The initial value of the `"prototype"` data property of %Array% (); i.e., %Array.prototype% + The initial value of the *"prototype"* data property of %Array% (); i.e., %Array.prototype% @@ -2676,7 +2676,7 @@

Well-Known Intrinsic Objects

`Array.prototype.entries` - The initial value of the `"entries"` data property of %Array.prototype% (); i.e., %Array.prototype.entries% + The initial value of the *"entries"* data property of %Array.prototype% (); i.e., %Array.prototype.entries% @@ -2687,7 +2687,7 @@

Well-Known Intrinsic Objects

`Array.prototype.forEach` - The initial value of the `"forEach"` data property of %Array.prototype% (); i.e., %Array.prototype.forEach% + The initial value of the *"forEach"* data property of %Array.prototype% (); i.e., %Array.prototype.forEach% @@ -2698,7 +2698,7 @@

Well-Known Intrinsic Objects

`Array.prototype.keys` - The initial value of the `"keys"` data property of %Array.prototype% (); i.e., %Array.prototype.keys% + The initial value of the *"keys"* data property of %Array.prototype% (); i.e., %Array.prototype.keys% @@ -2709,7 +2709,7 @@

Well-Known Intrinsic Objects

`Array.prototype.values` - The initial value of the `"values"` data property of %Array.prototype% (); i.e., %Array.prototype.values% + The initial value of the *"values"* data property of %Array.prototype% (); i.e., %Array.prototype.values% @@ -2739,7 +2739,7 @@

Well-Known Intrinsic Objects

- The initial value of the `"prototype"` data property of %AsyncFunction%; i.e., %AsyncFunction.prototype% + The initial value of the *"prototype"* data property of %AsyncFunction%; i.e., %AsyncFunction.prototype% @@ -2749,7 +2749,7 @@

Well-Known Intrinsic Objects

- The initial value of the `"prototype"` property of %AsyncGeneratorFunction%; i.e., %AsyncGeneratorFunction.prototype% + The initial value of the *"prototype"* property of %AsyncGeneratorFunction%; i.e., %AsyncGeneratorFunction.prototype% @@ -2769,7 +2769,7 @@

Well-Known Intrinsic Objects

- The initial value of the `"prototype"` property of %AsyncGenerator%; i.e., %AsyncGenerator.prototype% + The initial value of the *"prototype"* property of %AsyncGenerator%; i.e., %AsyncGenerator.prototype% @@ -2845,7 +2845,7 @@

Well-Known Intrinsic Objects

`Boolean.prototype` - The initial value of the `"prototype"` data property of %Boolean% (); i.e., %Boolean.prototype% + The initial value of the *"prototype"* data property of %Boolean% (); i.e., %Boolean.prototype% @@ -2867,7 +2867,7 @@

Well-Known Intrinsic Objects

`DataView.prototype` - The initial value of the `"prototype"` data property of %DataView%; i.e., %DataView.prototype% + The initial value of the *"prototype"* data property of %DataView%; i.e., %DataView.prototype% @@ -2889,7 +2889,7 @@

Well-Known Intrinsic Objects

`Date.prototype` - The initial value of the `"prototype"` data property of %Date%.; i.e., %Date.prototype% + The initial value of the *"prototype"* data property of %Date%.; i.e., %Date.prototype% @@ -2955,7 +2955,7 @@

Well-Known Intrinsic Objects

`Error.prototype` - The initial value of the `"prototype"` data property of %Error%; i.e., %Error.prototype% + The initial value of the *"prototype"* data property of %Error%; i.e., %Error.prototype% @@ -2988,7 +2988,7 @@

Well-Known Intrinsic Objects

`EvalError.prototype` - The initial value of the `"prototype"` data property of %EvalError%; i.e., %EvalError.prototype% + The initial value of the *"prototype"* data property of %EvalError%; i.e., %EvalError.prototype% @@ -3010,7 +3010,7 @@

Well-Known Intrinsic Objects

`Float32Array.prototype` - The initial value of the `"prototype"` data property of %Float32Array%; i.e., %Float32Array.prototype% + The initial value of the *"prototype"* data property of %Float32Array%; i.e., %Float32Array.prototype% @@ -3032,7 +3032,7 @@

Well-Known Intrinsic Objects

`Float64Array.prototype` - The initial value of the `"prototype"` data property of %Float64Array%; i.e., %Float64Array.prototype% + The initial value of the *"prototype"* data property of %Float64Array%; i.e., %Float64Array.prototype% @@ -3054,7 +3054,7 @@

Well-Known Intrinsic Objects

`Function.prototype` - The initial value of the `"prototype"` data property of %Function%; i.e., %Function.prototype% + The initial value of the *"prototype"* data property of %Function%; i.e., %Function.prototype% @@ -3064,7 +3064,7 @@

Well-Known Intrinsic Objects

- The initial value of the `"prototype"` data property of %GeneratorFunction% + The initial value of the *"prototype"* data property of %GeneratorFunction% @@ -3084,7 +3084,7 @@

Well-Known Intrinsic Objects

- The initial value of the `"prototype"` data property of %Generator%; i.e., %Generator.prototype% + The initial value of the *"prototype"* data property of %Generator%; i.e., %Generator.prototype% @@ -3106,7 +3106,7 @@

Well-Known Intrinsic Objects

`Int8Array.prototype` - The initial value of the `"prototype"` data property of %Int8Array%; i.e., %Int8Array.prototype% + The initial value of the *"prototype"* data property of %Int8Array%; i.e., %Int8Array.prototype% @@ -3128,7 +3128,7 @@

Well-Known Intrinsic Objects

`Int16Array.prototype` - The initial value of the `"prototype"` data property of %Int16Array%; i.e., %Int16Array.prototype% + The initial value of the *"prototype"* data property of %Int16Array%; i.e., %Int16Array.prototype% @@ -3150,7 +3150,7 @@

Well-Known Intrinsic Objects

`Int32Array.prototype` - The initial value of the `"prototype"` data property of %Int32Array%; i.e., %Int32Array.prototype% + The initial value of the *"prototype"* data property of %Int32Array%; i.e., %Int32Array.prototype% @@ -3204,7 +3204,7 @@

Well-Known Intrinsic Objects

`JSON.parse` - The initial value of the `"parse"` data property of %JSON%; i.e., %JSON.parse% + The initial value of the *"parse"* data property of %JSON%; i.e., %JSON.parse% @@ -3215,7 +3215,7 @@

Well-Known Intrinsic Objects

`JSON.stringify` - The initial value of the `"stringify"` data property of %JSON%; i.e., %JSON.stringify% + The initial value of the *"stringify"* data property of %JSON%; i.e., %JSON.stringify% @@ -3247,7 +3247,7 @@

Well-Known Intrinsic Objects

`Map.prototype` - The initial value of the `"prototype"` data property of %Map%; i.e., %Map.prototype% + The initial value of the *"prototype"* data property of %Map%; i.e., %Map.prototype% @@ -3280,7 +3280,7 @@

Well-Known Intrinsic Objects

`Number.prototype` - The initial value of the `"prototype"` data property of %Number%; i.e., %Number.prototype% + The initial value of the *"prototype"* data property of %Number%; i.e., %Number.prototype% @@ -3302,7 +3302,7 @@

Well-Known Intrinsic Objects

`Object.prototype` - The initial value of the `"prototype"` data property of %Object% (); i.e., %Object.prototype% + The initial value of the *"prototype"* data property of %Object% (); i.e., %Object.prototype% @@ -3313,7 +3313,7 @@

Well-Known Intrinsic Objects

`Object.prototype.toString` - The initial value of the `"toString"` data property of %Object.prototype% (); i.e., %Object.prototype.toString% + The initial value of the *"toString"* data property of %Object.prototype% (); i.e., %Object.prototype.toString% @@ -3324,7 +3324,7 @@

Well-Known Intrinsic Objects

`Object.prototype.valueOf` - The initial value of the `"valueOf"` data property of %Object.prototype% (); i.e., %Object.prototype.valueOf% + The initial value of the *"valueOf"* data property of %Object.prototype% (); i.e., %Object.prototype.valueOf% @@ -3368,7 +3368,7 @@

Well-Known Intrinsic Objects

`Promise.prototype` - The initial value of the `"prototype"` data property of %Promise%; i.e., %Promise.prototype% + The initial value of the *"prototype"* data property of %Promise%; i.e., %Promise.prototype% @@ -3379,7 +3379,7 @@

Well-Known Intrinsic Objects

`Promise.prototype.then` - The initial value of the `"then"` data property of %Promise.prototype% (); i.e., %Promise.prototype.then% + The initial value of the *"then"* data property of %Promise.prototype% (); i.e., %Promise.prototype.then% @@ -3390,7 +3390,7 @@

Well-Known Intrinsic Objects

`Promise.all` - The initial value of the `"all"` data property of %Promise% (); i.e., %Promise.all% + The initial value of the *"all"* data property of %Promise% (); i.e., %Promise.all% @@ -3401,7 +3401,7 @@

Well-Known Intrinsic Objects

`Promise.reject` - The initial value of the `"reject"` data property of %Promise% (); i.e., %Promise.reject% + The initial value of the *"reject"* data property of %Promise% (); i.e., %Promise.reject% @@ -3412,7 +3412,7 @@

Well-Known Intrinsic Objects

`Promise.resolve` - The initial value of the `"resolve"` data property of %Promise% (); i.e., %Promise.resolve% + The initial value of the *"resolve"* data property of %Promise% (); i.e., %Promise.resolve% @@ -3445,7 +3445,7 @@

Well-Known Intrinsic Objects

`RangeError.prototype` - The initial value of the `"prototype"` data property of %RangeError%; i.e., %RangeError.prototype% + The initial value of the *"prototype"* data property of %RangeError%; i.e., %RangeError.prototype% @@ -3467,7 +3467,7 @@

Well-Known Intrinsic Objects

`ReferenceError.prototype` - The initial value of the `"prototype"` data property of %ReferenceError%; i.e., %ReferenceError.prototype% + The initial value of the *"prototype"* data property of %ReferenceError%; i.e., %ReferenceError.prototype% @@ -3500,7 +3500,7 @@

Well-Known Intrinsic Objects

`RegExp.prototype` - The initial value of the `"prototype"` data property of %RegExp%; i.e., %RegExp.prototype% + The initial value of the *"prototype"* data property of %RegExp%; i.e., %RegExp.prototype% @@ -3542,7 +3542,7 @@

Well-Known Intrinsic Objects

`Set.prototype` - The initial value of the `"prototype"` data property of %Set%; i.e., %Set.prototype% + The initial value of the *"prototype"* data property of %Set%; i.e., %Set.prototype% @@ -3564,7 +3564,7 @@

Well-Known Intrinsic Objects

`SharedArrayBuffer.prototype` - The initial value of the `"prototype"` data property of %SharedArrayBuffer%; i.e., %SharedArrayBuffer.prototype% + The initial value of the *"prototype"* data property of %SharedArrayBuffer%; i.e., %SharedArrayBuffer.prototype% @@ -3596,7 +3596,7 @@

Well-Known Intrinsic Objects

`String.prototype` - The initial value of the `"prototype"` data property of %String%; i.e., %String.prototype% + The initial value of the *"prototype"* data property of %String%; i.e., %String.prototype% @@ -3618,7 +3618,7 @@

Well-Known Intrinsic Objects

`Symbol.prototype` - The initial value of the `"prototype"` data property of %Symbol% (); i.e., %Symbol.prototype% + The initial value of the *"prototype"* data property of %Symbol% (); i.e., %Symbol.prototype% @@ -3640,7 +3640,7 @@

Well-Known Intrinsic Objects

`SyntaxError.prototype` - The initial value of the `"prototype"` data property of %SyntaxError%; i.e., %SyntaxError.prototype% + The initial value of the *"prototype"* data property of %SyntaxError%; i.e., %SyntaxError.prototype% @@ -3670,7 +3670,7 @@

Well-Known Intrinsic Objects

- The initial value of the `"prototype"` data property of %TypedArray%; i.e., %TypedArray.prototype% + The initial value of the *"prototype"* data property of %TypedArray%; i.e., %TypedArray.prototype% @@ -3692,7 +3692,7 @@

Well-Known Intrinsic Objects

`TypeError.prototype` - The initial value of the `"prototype"` data property of %TypeError%; i.e., %TypeError.prototype% + The initial value of the *"prototype"* data property of %TypeError%; i.e., %TypeError.prototype% @@ -3714,7 +3714,7 @@

Well-Known Intrinsic Objects

`Uint8Array.prototype` - The initial value of the `"prototype"` data property of %Uint8Array%; i.e., %Uint8Array.prototype% + The initial value of the *"prototype"* data property of %Uint8Array%; i.e., %Uint8Array.prototype% @@ -3736,7 +3736,7 @@

Well-Known Intrinsic Objects

`Uint8ClampedArray.prototype` - The initial value of the `"prototype"` data property of %Uint8ClampedArray%; i.e., %Uint8ClampedArray.prototype% + The initial value of the *"prototype"* data property of %Uint8ClampedArray%; i.e., %Uint8ClampedArray.prototype% @@ -3758,7 +3758,7 @@

Well-Known Intrinsic Objects

`Uint16Array.prototype` - The initial value of the `"prototype"` data property of %Uint16Array%; i.e., %Uint16Array.prototype% + The initial value of the *"prototype"* data property of %Uint16Array%; i.e., %Uint16Array.prototype% @@ -3780,7 +3780,7 @@

Well-Known Intrinsic Objects

`Uint32Array.prototype` - The initial value of the `"prototype"` data property of %Uint32Array%; i.e., %Uint32Array.prototype% + The initial value of the *"prototype"* data property of %Uint32Array%; i.e., %Uint32Array.prototype% @@ -3802,7 +3802,7 @@

Well-Known Intrinsic Objects

`URIError.prototype` - The initial value of the `"prototype"` data property of %URIError%; i.e., %URIError.prototype% + The initial value of the *"prototype"* data property of %URIError%; i.e., %URIError.prototype% @@ -3824,7 +3824,7 @@

Well-Known Intrinsic Objects

`WeakMap.prototype` - The initial value of the `"prototype"` data property of %WeakMap%; i.e., %WeakMap.prototype% + The initial value of the *"prototype"* data property of %WeakMap%; i.e., %WeakMap.prototype% @@ -3846,7 +3846,7 @@

Well-Known Intrinsic Objects

`WeakSet.prototype` - The initial value of the `"prototype"` data property of %WeakSet%; i.e., %WeakSet.prototype% + The initial value of the *"prototype"* data property of %WeakSet%; i.e., %WeakSet.prototype% @@ -4021,7 +4021,7 @@

Await Fulfilled Functions

1. Return *undefined*.
-

The `"length"` property of an Await fulfilled function is 1.

+

The *"length"* property of an Await fulfilled function is 1.

@@ -4042,7 +4042,7 @@

Await Rejected Functions

1. Return *undefined*. -

The `"length"` property of an Await rejected function is 1.

+

The *"length"* property of an Await rejected function is 1.

@@ -4263,17 +4263,17 @@

FromPropertyDescriptor ( _Desc_ )

1. Let _obj_ be ObjectCreate(%Object.prototype%). 1. Assert: _obj_ is an extensible ordinary object with no own properties. 1. If _Desc_ has a [[Value]] field, then - 1. Perform ! CreateDataPropertyOrThrow(_obj_, `"value"`, _Desc_.[[Value]]). + 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"value"*, _Desc_.[[Value]]). 1. If _Desc_ has a [[Writable]] field, then - 1. Perform ! CreateDataPropertyOrThrow(_obj_, `"writable"`, _Desc_.[[Writable]]). + 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"writable"*, _Desc_.[[Writable]]). 1. If _Desc_ has a [[Get]] field, then - 1. Perform ! CreateDataPropertyOrThrow(_obj_, `"get"`, _Desc_.[[Get]]). + 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"get"*, _Desc_.[[Get]]). 1. If _Desc_ has a [[Set]] field, then - 1. Perform ! CreateDataPropertyOrThrow(_obj_, `"set"`, _Desc_.[[Set]]). + 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"set"*, _Desc_.[[Set]]). 1. If _Desc_ has an [[Enumerable]] field, then - 1. Perform ! CreateDataPropertyOrThrow(_obj_, `"enumerable"`, _Desc_.[[Enumerable]]). + 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"enumerable"*, _Desc_.[[Enumerable]]). 1. If _Desc_ has a [[Configurable]] field, then - 1. Perform ! CreateDataPropertyOrThrow(_obj_, `"configurable"`, _Desc_.[[Configurable]]). + 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"configurable"*, _Desc_.[[Configurable]]). 1. Return _obj_. @@ -4284,30 +4284,30 @@

ToPropertyDescriptor ( _Obj_ )

1. If Type(_Obj_) is not Object, throw a *TypeError* exception. 1. Let _desc_ be a new Property Descriptor that initially has no fields. - 1. Let _hasEnumerable_ be ? HasProperty(_Obj_, `"enumerable"`). + 1. Let _hasEnumerable_ be ? HasProperty(_Obj_, *"enumerable"*). 1. If _hasEnumerable_ is *true*, then - 1. Let _enumerable_ be ! ToBoolean(? Get(_Obj_, `"enumerable"`)). + 1. Let _enumerable_ be ! ToBoolean(? Get(_Obj_, *"enumerable"*)). 1. Set _desc_.[[Enumerable]] to _enumerable_. - 1. Let _hasConfigurable_ be ? HasProperty(_Obj_, `"configurable"`). + 1. Let _hasConfigurable_ be ? HasProperty(_Obj_, *"configurable"*). 1. If _hasConfigurable_ is *true*, then - 1. Let _configurable_ be ! ToBoolean(? Get(_Obj_, `"configurable"`)). + 1. Let _configurable_ be ! ToBoolean(? Get(_Obj_, *"configurable"*)). 1. Set _desc_.[[Configurable]] to _configurable_. - 1. Let _hasValue_ be ? HasProperty(_Obj_, `"value"`). + 1. Let _hasValue_ be ? HasProperty(_Obj_, *"value"*). 1. If _hasValue_ is *true*, then - 1. Let _value_ be ? Get(_Obj_, `"value"`). + 1. Let _value_ be ? Get(_Obj_, *"value"*). 1. Set _desc_.[[Value]] to _value_. - 1. Let _hasWritable_ be ? HasProperty(_Obj_, `"writable"`). + 1. Let _hasWritable_ be ? HasProperty(_Obj_, *"writable"*). 1. If _hasWritable_ is *true*, then - 1. Let _writable_ be ! ToBoolean(? Get(_Obj_, `"writable"`)). + 1. Let _writable_ be ! ToBoolean(? Get(_Obj_, *"writable"*)). 1. Set _desc_.[[Writable]] to _writable_. - 1. Let _hasGet_ be ? HasProperty(_Obj_, `"get"`). + 1. Let _hasGet_ be ? HasProperty(_Obj_, *"get"*). 1. If _hasGet_ is *true*, then - 1. Let _getter_ be ? Get(_Obj_, `"get"`). + 1. Let _getter_ be ? Get(_Obj_, *"get"*). 1. If IsCallable(_getter_) is *false* and _getter_ is not *undefined*, throw a *TypeError* exception. 1. Set _desc_.[[Get]] to _getter_. - 1. Let _hasSet_ be ? HasProperty(_Obj_, `"set"`). + 1. Let _hasSet_ be ? HasProperty(_Obj_, *"set"*). 1. If _hasSet_ is *true*, then - 1. Let _setter_ be ? Get(_Obj_, `"set"`). + 1. Let _setter_ be ? Get(_Obj_, *"set"*). 1. If IsCallable(_setter_) is *false* and _setter_ is not *undefined*, throw a *TypeError* exception. 1. Set _desc_.[[Set]] to _setter_. 1. If _desc_.[[Get]] is present or _desc_.[[Set]] is present, then @@ -4426,17 +4426,17 @@

ToPrimitive ( _input_ [ , _PreferredType_ ] )

1. Assert: _input_ is an ECMAScript language value. 1. If Type(_input_) is Object, then - 1. If _PreferredType_ is not present, let _hint_ be `"default"`. - 1. Else if _PreferredType_ is hint String, let _hint_ be `"string"`. + 1. If _PreferredType_ is not present, let _hint_ be *"default"*. + 1. Else if _PreferredType_ is hint String, let _hint_ be *"string"*. 1. Else, 1. Assert: _PreferredType_ is hint Number. - 1. Let _hint_ be `"number"`. + 1. Let _hint_ be *"number"*. 1. Let _exoticToPrim_ be ? GetMethod(_input_, @@toPrimitive). 1. If _exoticToPrim_ is not *undefined*, then 1. Let _result_ be ? Call(_exoticToPrim_, _input_, « _hint_ »). 1. If Type(_result_) is not Object, return _result_. 1. Throw a *TypeError* exception. - 1. If _hint_ is `"default"`, set _hint_ to `"number"`. + 1. If _hint_ is *"default"*, set _hint_ to *"number"*. 1. Return ? OrdinaryToPrimitive(_input_, _hint_). 1. Return _input_. @@ -4449,11 +4449,11 @@

OrdinaryToPrimitive ( _O_, _hint_ )

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

1. Assert: Type(_O_) is Object. - 1. Assert: Type(_hint_) is String and its value is either `"string"` or `"number"`. - 1. If _hint_ is `"string"`, then - 1. Let _methodNames_ be « `"toString"`, `"valueOf"` ». + 1. Assert: Type(_hint_) is String and its value is either *"string"* or *"number"*. + 1. If _hint_ is *"string"*, then + 1. Let _methodNames_ be « *"toString"*, *"valueOf"* ». 1. Else, - 1. Let _methodNames_ be « `"valueOf"`, `"toString"` ». + 1. Let _methodNames_ be « *"valueOf"*, *"toString"* ». 1. For each _name_ in _methodNames_ in List order, do 1. Let _method_ be ? Get(_O_, _name_). 1. If IsCallable(_method_) is *true*, then @@ -5046,7 +5046,7 @@

ToString ( _argument_ )

Undefined - Return `"undefined"`. + Return *"undefined"*. @@ -5054,7 +5054,7 @@

ToString ( _argument_ )

Null - Return `"null"`. + Return *"null"*. @@ -5062,8 +5062,8 @@

ToString ( _argument_ )

Boolean -

If _argument_ is *true*, return `"true"`.

-

If _argument_ is *false*, return `"false"`.

+

If _argument_ is *true*, return *"true"*.

+

If _argument_ is *false*, return *"false"*.

@@ -5221,10 +5221,10 @@

ToLength ( _argument_ )

CanonicalNumericIndexString ( _argument_ )

-

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

+

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

1. Assert: Type(_argument_) is String. - 1. If _argument_ is `"-0"`, return *-0*. + 1. If _argument_ is *"-0"*, return *-0*. 1. Let _n_ be ! ToNumber(_argument_). 1. If SameValue(! ToString(_n_), _argument_) is *false*, return *undefined*. 1. Return _n_. @@ -5776,10 +5776,10 @@

CreateArrayFromList ( _elements_ )

LengthOfArrayLike ( _obj_ )

-

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

+

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

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

An array-like object is any object for which this operation returns an integer rather than an abrupt completion.

@@ -5830,7 +5830,7 @@

OrdinaryHasInstance ( _C_, _O_ )

1. Let _BC_ be _C_.[[BoundTargetFunction]]. 1. Return ? InstanceofOperator(_O_, _BC_). 1. If Type(_O_) is not Object, return *false*. - 1. Let _P_ be ? Get(_C_, `"prototype"`). + 1. Let _P_ be ? Get(_C_, *"prototype"*). 1. If Type(_P_) is not Object, throw a *TypeError* exception. 1. Repeat, 1. Set _O_ to ? _O_.[[GetPrototypeOf]](). @@ -5844,7 +5844,7 @@

SpeciesConstructor ( _O_, _defaultConstructor_ )

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

1. Assert: Type(_O_) is Object. - 1. Let _C_ be ? Get(_O_, `"constructor"`). + 1. Let _C_ be ? Get(_O_, *"constructor"*). 1. If _C_ is *undefined*, return _defaultConstructor_. 1. If Type(_C_) is not Object, throw a *TypeError* exception. 1. Let _S_ be ? Get(_C_, @@species). @@ -5947,7 +5947,7 @@

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

1. Otherwise, set _method_ to ? GetMethod(_obj_, @@iterator). 1. Let _iterator_ be ? Call(_method_, _obj_). 1. If Type(_iterator_) is not Object, throw a *TypeError* exception. - 1. Let _nextMethod_ be ? GetV(_iterator_, `"next"`). + 1. Let _nextMethod_ be ? GetV(_iterator_, *"next"*). 1. Let _iteratorRecord_ be the Record { [[Iterator]]: _iterator_, [[NextMethod]]: _nextMethod_, [[Done]]: *false* }. 1. Return _iteratorRecord_.
@@ -5971,7 +5971,7 @@

IteratorComplete ( _iterResult_ )

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

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

IteratorValue ( _iterResult_ )

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

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

IteratorClose ( _iteratorRecord_, _completion_ )

1. Assert: Type(_iteratorRecord_.[[Iterator]]) is Object. 1. Assert: _completion_ is a Completion Record. 1. Let _iterator_ be _iteratorRecord_.[[Iterator]]. - 1. Let _return_ be ? GetMethod(_iterator_, `"return"`). + 1. Let _return_ be ? GetMethod(_iterator_, *"return"*). 1. If _return_ is *undefined*, return Completion(_completion_). 1. Let _innerResult_ be Call(_return_, _iterator_). 1. If _completion_.[[Type]] is ~throw~, return Completion(_completion_). @@ -6019,7 +6019,7 @@

AsyncIteratorClose ( _iteratorRecord_, _completion_ )

1. Assert: Type(_iteratorRecord_.[[Iterator]]) is Object. 1. Assert: _completion_ is a Completion Record. 1. Let _iterator_ be _iteratorRecord_.[[Iterator]]. - 1. Let _return_ be ? GetMethod(_iterator_, `"return"`). + 1. Let _return_ be ? GetMethod(_iterator_, *"return"*). 1. If _return_ is *undefined*, return Completion(_completion_). 1. Let _innerResult_ be Call(_return_, _iterator_). 1. If _innerResult_.[[Type]] is ~normal~, set _innerResult_ to Await(_innerResult_.[[Value]]). @@ -6036,8 +6036,8 @@

CreateIterResultObject ( _value_, _done_ )

1. Assert: Type(_done_) is Boolean. 1. Let _obj_ be ObjectCreate(%Object.prototype%). - 1. Perform ! CreateDataPropertyOrThrow(_obj_, `"value"`, _value_). - 1. Perform ! CreateDataPropertyOrThrow(_obj_, `"done"`, _done_). + 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"value"*, _value_). + 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"done"*, _done_). 1. Return _obj_. @@ -6072,7 +6072,7 @@

ListIteratorNext Functions

1. Set _O_.[[ListIteratorNextIndex]] to _index_ + 1. 1. Return CreateIterResultObject(_list_[_index_], *false*).
-

The `"length"` property of a ListIteratorNext function is 0.

+

The *"length"* property of a ListIteratorNext function is 0.

@@ -6900,7 +6900,7 @@

HasRestrictedGlobalProperty ( _N_ )

1. Return *true*.
-

Properties may exist upon a global object that were directly created rather than being declared using a var or function declaration. A global lexical binding may not be created that has the same name as a non-configurable property of the global object. The global property `"undefined"` is an example of such a property.

+

Properties may exist upon a global object that were directly created rather than being declared using a var or function declaration. A global lexical binding may not be created that has the same name as a non-configurable property of the global object. The global property *"undefined"* is an example of such a property.

@@ -7648,10 +7648,10 @@

RunJobs ( )

1. Perform ? InitializeHostDefinedRealm(). 1. In an implementation-dependent manner, obtain the ECMAScript source texts (see clause ) and any associated host-defined values for zero or more ECMAScript scripts and/or ECMAScript modules. For each such _sourceText_ and _hostDefined_, do 1. If _sourceText_ is the source code of a script, then - 1. Perform EnqueueJob(`"ScriptJobs"`, ScriptEvaluationJob, « _sourceText_, _hostDefined_ »). + 1. Perform EnqueueJob(*"ScriptJobs"*, ScriptEvaluationJob, « _sourceText_, _hostDefined_ »). 1. Else, 1. Assert: _sourceText_ is the source code of a module. - 1. Perform EnqueueJob(`"ScriptJobs"`, TopLevelModuleEvaluationJob, « _sourceText_, _hostDefined_ »). + 1. Perform EnqueueJob(*"ScriptJobs"*, TopLevelModuleEvaluationJob, « _sourceText_, _hostDefined_ »). 1. Repeat, 1. Suspend the running execution context and remove it from the execution context stack. 1. Assert: The execution context stack is now empty. @@ -8188,7 +8188,7 @@

ObjectCreate ( _proto_ [ , _internalSlotsList_ ] )

OrdinaryCreateFromConstructor ( _constructor_, _intrinsicDefaultProto_ [ , _internalSlotsList_ ] )

-

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

+

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

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

OrdinaryCreateFromConstructor ( _constructor_, _intrinsicDefaultProto_ [ , _

GetPrototypeFromConstructor ( _constructor_, _intrinsicDefaultProto_ )

-

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

+

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

1. Assert: _intrinsicDefaultProto_ is a String value that is this specification's name of an intrinsic object. The corresponding object must be an intrinsic that is intended to be used as the [[Prototype]] value of an object. 1. Assert: IsCallable(_constructor_) is *true*. - 1. Let _proto_ be ? Get(_constructor_, `"prototype"`). + 1. Let _proto_ be ? Get(_constructor_, *"prototype"*). 1. If Type(_proto_) is not Object, then 1. Let _realm_ be ? GetFunctionRealm(_constructor_). 1. Set _proto_ to _realm_'s intrinsic object named _intrinsicDefaultProto_. @@ -8451,7 +8451,7 @@

[[Construct]] ( _argumentsList_, _newTarget_ )

1. Let _callerContext_ be the running execution context. 1. Let _kind_ be _F_.[[ConstructorKind]]. 1. If _kind_ is ~base~, then - 1. Let _thisArgument_ be ? OrdinaryCreateFromConstructor(_newTarget_, `"%Object.prototype%"`). + 1. Let _thisArgument_ be ? OrdinaryCreateFromConstructor(_newTarget_, *"%Object.prototype%"*). 1. Let _calleeContext_ be PrepareForOrdinaryCall(_F_, _newTarget_). 1. Assert: _calleeContext_ is now the running execution context. 1. If _kind_ is ~base~, perform OrdinaryCallBindThis(_F_, _calleeContext_, _thisArgument_). @@ -8559,8 +8559,8 @@

AddRestrictedFunctionProperties ( _F_, _realm_ )

1. Assert: _realm_.[[Intrinsics]].[[%ThrowTypeError%]] exists and has been initialized. 1. Let _thrower_ be _realm_.[[Intrinsics]].[[%ThrowTypeError%]]. - 1. Perform ! DefinePropertyOrThrow(_F_, `"caller"`, PropertyDescriptor { [[Get]]: _thrower_, [[Set]]: _thrower_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). - 1. Return ! DefinePropertyOrThrow(_F_, `"arguments"`, PropertyDescriptor { [[Get]]: _thrower_, [[Set]]: _thrower_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). + 1. Perform ! DefinePropertyOrThrow(_F_, *"caller"*, PropertyDescriptor { [[Get]]: _thrower_, [[Set]]: _thrower_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). + 1. Return ! DefinePropertyOrThrow(_F_, *"arguments"*, PropertyDescriptor { [[Get]]: _thrower_, [[Set]]: _thrower_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). @@ -8570,22 +8570,22 @@

%ThrowTypeError% ( )

1. Throw a *TypeError* exception.

The value of the [[Extensible]] internal slot of a %ThrowTypeError% function is *false*.

-

The `"length"` property of a %ThrowTypeError% function has the attributes { [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *false* }.

+

The *"length"* property of a %ThrowTypeError% function has the attributes { [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *false* }.

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

-

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

+

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

1. Assert: _F_ is an ECMAScript function object. 1. Assert: IsConstructor(_F_) is *true*. - 1. Assert: _F_ is an extensible object that does not have a `"prototype"` own property. + 1. Assert: _F_ is an extensible object that does not have a *"prototype"* own property. 1. If _writablePrototype_ is not present, set _writablePrototype_ to *true*. 1. If _prototype_ is not present, then 1. Set _prototype_ to ObjectCreate(%Object.prototype%). - 1. Perform ! DefinePropertyOrThrow(_prototype_, `"constructor"`, PropertyDescriptor { [[Value]]: _F_, [[Writable]]: _writablePrototype_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). - 1. Perform ! DefinePropertyOrThrow(_F_, `"prototype"`, PropertyDescriptor { [[Value]]: _prototype_, [[Writable]]: _writablePrototype_, [[Enumerable]]: *false*, [[Configurable]]: *false* }). + 1. Perform ! DefinePropertyOrThrow(_prototype_, *"constructor"*, PropertyDescriptor { [[Value]]: _F_, [[Writable]]: _writablePrototype_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). + 1. Perform ! DefinePropertyOrThrow(_F_, *"prototype"*, PropertyDescriptor { [[Value]]: _prototype_, [[Writable]]: _writablePrototype_, [[Enumerable]]: *false*, [[Configurable]]: *false* }). 1. Return NormalCompletion(*undefined*).
@@ -8614,29 +8614,29 @@

MakeMethod ( _F_, _homeObject_ )

SetFunctionName ( _F_, _name_ [ , _prefix_ ] )

-

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

+

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

- 1. Assert: _F_ is an extensible object that does not have a `"name"` own property. + 1. Assert: _F_ is an extensible object that does not have a *"name"* own property. 1. Assert: Type(_name_) is either Symbol or String. 1. Assert: If _prefix_ is present, then Type(_prefix_) is String. 1. If Type(_name_) is Symbol, then 1. Let _description_ be _name_'s [[Description]] value. 1. If _description_ is *undefined*, set _name_ to the empty String. - 1. Else, set _name_ to the string-concatenation of `"["`, _description_, and `"]"`. + 1. Else, set _name_ to the string-concatenation of *"["*, _description_, and *"]"*. 1. If _prefix_ is present, then 1. Set _name_ to the string-concatenation of _prefix_, the code unit 0x0020 (SPACE), and _name_. - 1. Return ! DefinePropertyOrThrow(_F_, `"name"`, PropertyDescriptor { [[Value]]: _name_, [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *true* }). + 1. Return ! DefinePropertyOrThrow(_F_, *"name"*, PropertyDescriptor { [[Value]]: _name_, [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *true* }).

SetFunctionLength ( _F_, _length_ )

-

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

+

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

- 1. Assert: _F_ is an extensible object that does not have a `"length"` own property. + 1. Assert: _F_ is an extensible object that does not have a *"length"* own property. 1. Assert: Type(_length_) is Number. 1. Assert: _length_ ≥ 0 and ! IsInteger(_length_) is *true*. - 1. Return ! DefinePropertyOrThrow(_F_, `"length"`, PropertyDescriptor { [[Value]]: _length_, [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *true* }). + 1. Return ! DefinePropertyOrThrow(_F_, *"length"*, PropertyDescriptor { [[Value]]: _length_, [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *true* }).
@@ -8679,10 +8679,10 @@

FunctionDeclarationInstantiation ( _func_, _argumentsList_ )

1. If _func_.[[ThisMode]] is ~lexical~, then 1. NOTE: Arrow functions never have an arguments objects. 1. Set _argumentsObjectNeeded_ to *false*. - 1. Else if `"arguments"` is an element of _parameterNames_, then + 1. Else if *"arguments"* is an element of _parameterNames_, 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 *"arguments"* is an element of _functionNames_ or if *"arguments"* is an element of _lexicalNames_, then 1. Set _argumentsObjectNeeded_ to *false*. 1. For each String _paramName_ in _parameterNames_, do 1. Let _alreadyDeclared_ be _envRec_.HasBinding(_paramName_). @@ -8698,11 +8698,11 @@

FunctionDeclarationInstantiation ( _func_, _argumentsList_ )

1. NOTE: 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. 1. Let _ao_ be CreateMappedArgumentsObject(_func_, _formals_, _argumentsList_, _envRec_). 1. If _strict_ is *true*, then - 1. Perform ! _envRec_.CreateImmutableBinding(`"arguments"`, *false*). + 1. Perform ! _envRec_.CreateImmutableBinding(*"arguments"*, *false*). 1. Else, - 1. Perform ! _envRec_.CreateMutableBinding(`"arguments"`, *false*). - 1. Call _envRec_.InitializeBinding(`"arguments"`, _ao_). - 1. Let _parameterBindings_ be a new List of _parameterNames_ with `"arguments"` appended. + 1. Perform ! _envRec_.CreateMutableBinding(*"arguments"*, *false*). + 1. Call _envRec_.InitializeBinding(*"arguments"*, _ao_). + 1. Let _parameterBindings_ be a new List of _parameterNames_ with *"arguments"* appended. 1. Else, 1. Let _parameterBindings_ be _parameterNames_. 1. Let _iteratorRecord_ be CreateListIteratorRecord(_argumentsList_). @@ -8772,7 +8772,7 @@

Built-in Function Objects

Unless otherwise specified every built-in function object has the %Function.prototype% object as the initial value of its [[Prototype]] internal slot.

The behaviour specified for each built-in function via algorithm steps or other means is the specification of the function body behaviour for both [[Call]] and [[Construct]] invocations of the function. However, [[Construct]] invocation is not supported by all built-in functions. For each built-in function, when invoked with [[Call]], the [[Call]] _thisArgument_ provides the *this* value, the [[Call]] _argumentsList_ provides the named parameters, and the NewTarget value is *undefined*. When invoked with [[Construct]], the *this* value is uninitialized, the [[Construct]] _argumentsList_ provides the named parameters, and the [[Construct]] _newTarget_ parameter provides the NewTarget value. If the built-in function is implemented as an ECMAScript function object then this specified behaviour must be implemented by the ECMAScript code that is the body of the function. Built-in functions that are ECMAScript function objects must be strict functions. If a built-in constructor has any [[Call]] behaviour other than throwing a *TypeError* exception, an ECMAScript implementation of the function must be done in a manner that does not cause the function's [[FunctionKind]] internal slot to have the value ~classConstructor~.

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. When a built-in constructor is called as part of a `new` expression the _argumentsList_ parameter of the invoked [[Construct]] internal method provides the values for the built-in constructor's named parameters.

-

Built-in functions that are not constructors do not have a `"prototype"` property unless otherwise specified in the description of a particular function.

+

Built-in functions that are not constructors do not have a *"prototype"* property unless otherwise specified in the description of a particular function.

If a built-in function object is not implemented as an ECMAScript function it must provide [[Call]] and [[Construct]] internal methods that conform to the following definitions:

@@ -8932,7 +8932,7 @@

BoundFunctionCreate ( _targetFunction_, _boundThis_, _boundArgs_ )

Array Exotic Objects

-

An Array object 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 object has a non-configurable `"length"` property whose value is always a nonnegative integer 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 object 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 object and is unaffected by `"length"` or array index properties that may be inherited from its prototypes.

+

An Array object 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 object has a non-configurable *"length"* property whose value is always a nonnegative integer 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 object 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 object 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_)) is equal to _P_ and ToUint32(_P_) is not equal to 232 - 1.

@@ -8943,10 +8943,10 @@

[[DefineOwnProperty]] ( _P_, _Desc_ )

When the [[DefineOwnProperty]] internal method of an Array exotic object _A_ is called with property key _P_, and Property Descriptor _Desc_, the following steps are taken:

1. Assert: IsPropertyKey(_P_) is *true*. - 1. If _P_ is `"length"`, then + 1. If _P_ is *"length"*, then 1. Return ? ArraySetLength(_A_, _Desc_). 1. Else if _P_ is an array index, then - 1. Let _oldLenDesc_ be OrdinaryGetOwnProperty(_A_, `"length"`). + 1. Let _oldLenDesc_ be OrdinaryGetOwnProperty(_A_, *"length"*). 1. Assert: _oldLenDesc_ will never be *undefined* or an accessor descriptor because Array objects are created with a length data property that cannot be deleted or reconfigured. 1. Let _oldLen_ be _oldLenDesc_.[[Value]]. 1. Let _index_ be ! ToUint32(_P_). @@ -8955,7 +8955,7 @@

[[DefineOwnProperty]] ( _P_, _Desc_ )

1. If _succeeded_ is *false*, return *false*. 1. If _index_ ≥ _oldLen_, then 1. Set _oldLenDesc_.[[Value]] to _index_ + 1. - 1. Let _succeeded_ be OrdinaryDefineOwnProperty(_A_, `"length"`, _oldLenDesc_). + 1. Let _succeeded_ be OrdinaryDefineOwnProperty(_A_, *"length"*, _oldLenDesc_). 1. Assert: _succeeded_ is *true*. 1. Return *true*. 1. Return OrdinaryDefineOwnProperty(_A_, _P_, _Desc_). @@ -8975,7 +8975,7 @@

ArrayCreate ( _length_ [ , _proto_ ] )

1. Set _A_.[[DefineOwnProperty]] as specified in . 1. Set _A_.[[Prototype]] to _proto_. 1. Set _A_.[[Extensible]] to *true*. - 1. Perform ! OrdinaryDefineOwnProperty(_A_, `"length"`, PropertyDescriptor { [[Value]]: _length_, [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *false* }). + 1. Perform ! OrdinaryDefineOwnProperty(_A_, *"length"*, PropertyDescriptor { [[Value]]: _length_, [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *false* }). 1. Return _A_.
@@ -8988,7 +8988,7 @@

ArraySpeciesCreate ( _originalArray_, _length_ )

1. If _length_ is *-0*, set _length_ to *+0*. 1. Let _isArray_ be ? IsArray(_originalArray_). 1. If _isArray_ is *false*, return ? ArrayCreate(_length_). - 1. Let _C_ be ? Get(_originalArray_, `"constructor"`). + 1. Let _C_ be ? Get(_originalArray_, *"constructor"*). 1. If IsConstructor(_C_) is *true*, then 1. Let _thisRealm_ be the current Realm Record. 1. Let _realmC_ be ? GetFunctionRealm(_C_). @@ -9011,24 +9011,24 @@

ArraySetLength ( _A_, _Desc_ )

When the abstract operation ArraySetLength is called with an Array exotic object _A_, and Property Descriptor _Desc_, the following steps are taken:

1. If _Desc_.[[Value]] is absent, then - 1. Return OrdinaryDefineOwnProperty(_A_, `"length"`, _Desc_). + 1. Return OrdinaryDefineOwnProperty(_A_, *"length"*, _Desc_). 1. Let _newLenDesc_ be a copy of _Desc_. 1. Let _newLen_ be ? ToUint32(_Desc_.[[Value]]). 1. Let _numberLen_ be ? ToNumber(_Desc_.[[Value]]). 1. If _newLen_ ≠ _numberLen_, throw a *RangeError* exception. 1. Set _newLenDesc_.[[Value]] to _newLen_. - 1. Let _oldLenDesc_ be OrdinaryGetOwnProperty(_A_, `"length"`). + 1. Let _oldLenDesc_ be OrdinaryGetOwnProperty(_A_, *"length"*). 1. Assert: _oldLenDesc_ will never be *undefined* or an accessor descriptor because Array objects are created with a length data property that cannot be deleted or reconfigured. 1. Let _oldLen_ be _oldLenDesc_.[[Value]]. 1. If _newLen_ ≥ _oldLen_, then - 1. Return OrdinaryDefineOwnProperty(_A_, `"length"`, _newLenDesc_). + 1. Return OrdinaryDefineOwnProperty(_A_, *"length"*, _newLenDesc_). 1. If _oldLenDesc_.[[Writable]] is *false*, return *false*. 1. If _newLenDesc_.[[Writable]] is absent or has the value *true*, let _newWritable_ be *true*. 1. Else, 1. Need to defer setting the [[Writable]] attribute to *false* in case any elements cannot be deleted. 1. Let _newWritable_ be *false*. 1. Set _newLenDesc_.[[Writable]] to *true*. - 1. Let _succeeded_ be ! OrdinaryDefineOwnProperty(_A_, `"length"`, _newLenDesc_). + 1. Let _succeeded_ be ! OrdinaryDefineOwnProperty(_A_, *"length"*, _newLenDesc_). 1. If _succeeded_ is *false*, return *false*. 1. Repeat, while _newLen_ < _oldLen_, 1. Set _oldLen_ to _oldLen_ - 1. @@ -9036,10 +9036,10 @@

ArraySetLength ( _A_, _Desc_ )

1. If _deleteSucceeded_ is *false*, then 1. Set _newLenDesc_.[[Value]] to _oldLen_ + 1. 1. If _newWritable_ is *false*, set _newLenDesc_.[[Writable]] to *false*. - 1. Perform ! OrdinaryDefineOwnProperty(_A_, `"length"`, _newLenDesc_). + 1. Perform ! OrdinaryDefineOwnProperty(_A_, *"length"*, _newLenDesc_). 1. Return *false*. 1. If _newWritable_ is *false*, then - 1. Return OrdinaryDefineOwnProperty(_A_, `"length"`, PropertyDescriptor { [[Writable]]: *false* }). This call will always return *true*. + 1. Return OrdinaryDefineOwnProperty(_A_, *"length"*, PropertyDescriptor { [[Writable]]: *false* }). This call will always return *true*. 1. Return *true*.
@@ -9050,7 +9050,7 @@

ArraySetLength ( _A_, _Desc_ )

String Exotic Objects

-

A String object is an exotic object that encapsulates a String value and exposes virtual integer-indexed data properties corresponding to the individual code unit elements of the String value. String exotic objects always have a data property named `"length"` whose value is the number of code unit elements in the encapsulated String value. Both the code unit data properties and the `"length"` property are non-writable and non-configurable.

+

A String object is an exotic object that encapsulates a String value and exposes virtual integer-indexed data properties corresponding to the individual code unit elements of the String value. String exotic objects always have a data property named *"length"* whose value is the number of code unit elements in the encapsulated String value. Both the code unit data properties and the *"length"* property are non-writable and non-configurable.

String exotic objects have the same internal slots as ordinary objects. They also have a [[StringData]] internal slot.

String exotic objects provide alternative definitions for the following internal methods. All of the other String exotic object essential internal methods that are not defined below are as specified in .

@@ -9112,7 +9112,7 @@

StringCreate ( _value_, _prototype_ )

1. Set _S_.[[Prototype]] to _prototype_. 1. Set _S_.[[Extensible]] to *true*. 1. Let _length_ be the number of code unit elements in _value_. - 1. Perform ! DefinePropertyOrThrow(_S_, `"length"`, PropertyDescriptor { [[Value]]: _length_, [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *false* }). + 1. Perform ! DefinePropertyOrThrow(_S_, *"length"*, PropertyDescriptor { [[Value]]: _length_, [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *false* }). 1. Return _S_.
@@ -9150,10 +9150,10 @@

Arguments Exotic Objects

The ParameterMap object and its property values are used as a device for specifying the arguments object correspondence to argument bindings. The ParameterMap object and the objects that are the values of its properties are not directly observable from ECMAScript code. An ECMAScript implementation does not need to actually create or use such objects to implement the specified semantics.

-

Ordinary arguments objects define a non-configurable accessor property named `"callee"` which throws a *TypeError* exception on access. The `"callee"` property has a more specific meaning for arguments exotic objects, which are created only for some class of non-strict functions. The definition of this property in the ordinary variant exists to ensure that it is not defined in any other manner by conforming ECMAScript implementations.

+

Ordinary arguments objects define a non-configurable accessor property named *"callee"* which throws a *TypeError* exception on access. The *"callee"* property has a more specific meaning for arguments exotic objects, which are created only for some class of non-strict functions. The definition of this property in the ordinary variant exists to ensure that it is not defined in any other manner by conforming ECMAScript implementations.

-

ECMAScript implementations of arguments exotic objects have historically contained an accessor property named `"caller"`. Prior to ECMAScript 2017, this specification included the definition of a throwing `"caller"` property on ordinary arguments objects. Since implementations do not contain this extension any longer, ECMAScript 2017 dropped the requirement for a throwing `"caller"` accessor.

+

ECMAScript implementations of arguments exotic objects have historically contained an accessor property named *"caller"*. Prior to ECMAScript 2017, this specification included the definition of a throwing *"caller"* property on ordinary arguments objects. Since implementations do not contain this extension any longer, ECMAScript 2017 dropped the requirement for a throwing *"caller"* accessor.

@@ -9251,14 +9251,14 @@

CreateUnmappedArgumentsObject ( _argumentsList_ )

1. Let _len_ be the number of elements in _argumentsList_. 1. Let _obj_ be ObjectCreate(%Object.prototype%, « [[ParameterMap]] »). 1. Set _obj_.[[ParameterMap]] to *undefined*. - 1. Perform DefinePropertyOrThrow(_obj_, `"length"`, PropertyDescriptor { [[Value]]: _len_, [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *true* }). + 1. Perform DefinePropertyOrThrow(_obj_, *"length"*, PropertyDescriptor { [[Value]]: _len_, [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *true* }). 1. Let _index_ be 0. 1. Repeat, while _index_ < _len_, 1. Let _val_ be _argumentsList_[_index_]. 1. Perform ! CreateDataPropertyOrThrow(_obj_, ! ToString(_index_), _val_). 1. Set _index_ to _index_ + 1. 1. Perform ! DefinePropertyOrThrow(_obj_, @@iterator, PropertyDescriptor { [[Value]]: %Array.prototype.values%, [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *true* }). - 1. Perform ! DefinePropertyOrThrow(_obj_, `"callee"`, PropertyDescriptor { [[Get]]: %ThrowTypeError%, [[Set]]: %ThrowTypeError%, [[Enumerable]]: *false*, [[Configurable]]: *false* }). + 1. Perform ! DefinePropertyOrThrow(_obj_, *"callee"*, PropertyDescriptor { [[Get]]: %ThrowTypeError%, [[Set]]: %ThrowTypeError%, [[Enumerable]]: *false*, [[Configurable]]: *false* }). 1. Return _obj_.
@@ -9287,7 +9287,7 @@

CreateMappedArgumentsObject ( _func_, _formals_, _argumentsList_, _env_ )CreateMappedArgumentsObject ( _func_, _formals_, _argumentsList_, _env_ ) @@ -9659,7 +9659,7 @@

[[Get]] ( _P_, _Receiver_ )

1. Assert: _binding_ is a ResolvedBinding Record. 1. Let _targetModule_ be _binding_.[[Module]]. 1. Assert: _targetModule_ is not *undefined*. - 1. If _binding_.[[BindingName]] is `"*namespace*"`, then + 1. If _binding_.[[BindingName]] is *"\*namespace\*"*, then 1. Return ? GetModuleNamespace(_targetModule_). 1. Let _targetEnv_ be _targetModule_.[[Environment]]. 1. If _targetEnv_ is *undefined*, throw a *ReferenceError* exception. @@ -9883,7 +9883,7 @@

[[GetPrototypeOf]] ( )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"getPrototypeOf"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"getPrototypeOf"*). 1. If _trap_ is *undefined*, then 1. Return ? _target_.[[GetPrototypeOf]](). 1. Let _handlerProto_ be ? Call(_trap_, _handler_, « _target_ »). @@ -9916,7 +9916,7 @@

[[SetPrototypeOf]] ( _V_ )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"setPrototypeOf"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"setPrototypeOf"*). 1. If _trap_ is *undefined*, then 1. Return ? _target_.[[SetPrototypeOf]](_V_). 1. Let _booleanTrapResult_ be ! ToBoolean(? Call(_trap_, _handler_, « _target_, _V_ »)). @@ -9948,7 +9948,7 @@

[[IsExtensible]] ( )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"isExtensible"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"isExtensible"*). 1. If _trap_ is *undefined*, then 1. Return ? IsExtensible(_target_). 1. Let _booleanTrapResult_ be ! ToBoolean(? Call(_trap_, _handler_, « _target_ »)). @@ -9977,7 +9977,7 @@

[[PreventExtensions]] ( )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"preventExtensions"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"preventExtensions"*). 1. If _trap_ is *undefined*, then 1. Return ? _target_.[[PreventExtensions]](). 1. Let _booleanTrapResult_ be ! ToBoolean(? Call(_trap_, _handler_, « _target_ »)). @@ -10008,7 +10008,7 @@

[[GetOwnProperty]] ( _P_ )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"getOwnPropertyDescriptor"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"getOwnPropertyDescriptor"*). 1. If _trap_ is *undefined*, then 1. Return ? _target_.[[GetOwnProperty]](_P_). 1. Let _trapResultObj_ be ? Call(_trap_, _handler_, « _target_, _P_ »). @@ -10061,7 +10061,7 @@

[[DefineOwnProperty]] ( _P_, _Desc_ )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"defineProperty"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"defineProperty"*). 1. If _trap_ is *undefined*, then 1. Return ? _target_.[[DefineOwnProperty]](_P_, _Desc_). 1. Let _descObj_ be FromPropertyDescriptor(_Desc_). @@ -10108,7 +10108,7 @@

[[HasProperty]] ( _P_ )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"has"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"has"*). 1. If _trap_ is *undefined*, then 1. Return ? _target_.[[HasProperty]](_P_). 1. Let _booleanTrapResult_ be ! ToBoolean(? Call(_trap_, _handler_, « _target_, _P_ »)). @@ -10145,7 +10145,7 @@

[[Get]] ( _P_, _Receiver_ )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"get"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"get"*). 1. If _trap_ is *undefined*, then 1. Return ? _target_.[[Get]](_P_, _Receiver_). 1. Let _trapResult_ be ? Call(_trap_, _handler_, « _target_, _P_, _Receiver_ »). @@ -10179,7 +10179,7 @@

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

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"set"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"set"*). 1. If _trap_ is *undefined*, then 1. Return ? _target_.[[Set]](_P_, _V_, _Receiver_). 1. Let _booleanTrapResult_ be ! ToBoolean(? Call(_trap_, _handler_, « _target_, _P_, _V_, _Receiver_ »)). @@ -10217,7 +10217,7 @@

[[Delete]] ( _P_ )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"deleteProperty"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"deleteProperty"*). 1. If _trap_ is *undefined*, then 1. Return ? _target_.[[Delete]](_P_). 1. Let _booleanTrapResult_ be ! ToBoolean(? Call(_trap_, _handler_, « _target_, _P_ »)). @@ -10248,7 +10248,7 @@

[[OwnPropertyKeys]] ( )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"ownKeys"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"ownKeys"*). 1. If _trap_ is *undefined*, then 1. Return ? _target_.[[OwnPropertyKeys]](). 1. Let _trapResultArray_ be ? Call(_trap_, _handler_, « _target_ »). @@ -10309,7 +10309,7 @@

[[Call]] ( _thisArgument_, _argumentsList_ )

1. If _handler_ is *null*, throw a *TypeError* exception. 1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. - 1. Let _trap_ be ? GetMethod(_handler_, `"apply"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"apply"*). 1. If _trap_ is *undefined*, then 1. Return ? Call(_target_, _thisArgument_, _argumentsList_). 1. Let _argArray_ be ! CreateArrayFromList(_argumentsList_). @@ -10329,7 +10329,7 @@

[[Construct]] ( _argumentsList_, _newTarget_ )

1. Assert: Type(_handler_) is Object. 1. Let _target_ be _O_.[[ProxyTarget]]. 1. Assert: IsConstructor(_target_) is *true*. - 1. Let _trap_ be ? GetMethod(_handler_, `"construct"`). + 1. Let _trap_ be ? GetMethod(_handler_, *"construct"*). 1. If _trap_ is *undefined*, then 1. Return ? Construct(_target_, _argumentsList_, _newTarget_). 1. Let _argArray_ be ! CreateArrayFromList(_argumentsList_). @@ -10922,13 +10922,13 @@

Static Semantics: Early Errors

IdentifierStart :: `\` UnicodeEscapeSequence IdentifierPart :: `\` UnicodeEscapeSequence @@ -12189,7 +12189,7 @@

Static Semantics: Early Errors

BindingIdentifier : Identifier @@ -12241,19 +12241,19 @@

Static Semantics: Early Errors

Identifier : IdentifierName but not ReservedWord