diff --git a/spec.html b/spec.html index 17f260a6a4..e9bd97fc71 100644 --- a/spec.html +++ b/spec.html @@ -15183,8 +15183,8 @@

Module Namespace Exotic Objects

-

A module namespace exotic object is an exotic object that exposes the bindings exported from an ECMAScript |Module| (See ). There is a one-to-one correspondence between the String-keyed own properties of a module namespace exotic object and the binding names exported by the |Module|. The exported bindings include any bindings that are indirectly exported using `export *` export items. Each String-valued own property key is the StringValue of the corresponding exported binding name. These are the only String-keyed properties of a module namespace exotic object. Each such property has the attributes { [[Writable]]: *true*, [[Enumerable]]: *true*, [[Configurable]]: *false* }. Module namespace exotic objects are not extensible.

-

An object is a module namespace exotic object if its [[GetPrototypeOf]], [[SetPrototypeOf]], [[IsExtensible]], [[PreventExtensions]], [[GetOwnProperty]], [[DefineOwnProperty]], [[HasProperty]], [[Get]], [[Set]], [[Delete]], and [[OwnPropertyKeys]] internal methods use the definitions in this section, and its other essential internal methods use the definitions found in . These methods are installed by ModuleNamespaceCreate.

+

A module namespace exotic object is an immutable prototype exotic object that exposes the bindings exported from an ECMAScript |Module| (See ). There is a one-to-one correspondence between the String-keyed own properties of a module namespace exotic object and the binding names exported by the |Module|. The exported bindings include any bindings that are indirectly exported using `export *` export items. Each String-valued own property key is the StringValue of the corresponding exported binding name. These are the only String-keyed properties of a module namespace exotic object. Each such property has the attributes { [[Writable]]: *true*, [[Enumerable]]: *true*, [[Configurable]]: *false* }. Module namespace exotic objects are not extensible.

+

An object is a module namespace exotic object if its [[GetPrototypeOf]], [[IsExtensible]], [[PreventExtensions]], [[GetOwnProperty]], [[DefineOwnProperty]], [[HasProperty]], [[Get]], [[Set]], [[Delete]], and [[OwnPropertyKeys]] internal methods use the definitions in this section, its [[SetPrototypeOf]] internal method uses the definition in (thus, it is an immutable prototype exotic object), and its other essential internal methods use the definitions found in . These methods are installed by ModuleNamespaceCreate.

Module namespace exotic objects have the internal slots defined in .

@@ -15237,21 +15237,6 @@

[[GetPrototypeOf]] ( ): a normal completion containing *null*

- -

- [[SetPrototypeOf]] ( - _V_: an Object or *null*, - ): a normal completion containing a Boolean -

-
-
for
-
a module namespace exotic object _O_
-
- - 1. Return ! SetImmutablePrototype(_O_, _V_). - -
-

[[IsExtensible]] ( ): a normal completion containing *false*

@@ -15446,13 +15431,13 @@

Immutable Prototype Exotic Objects

An immutable prototype exotic object is an exotic object that has a [[Prototype]] internal slot that will not change once it is initialized.

-

An object is an immutable prototype exotic object if its [[SetPrototypeOf]] internal method uses the following implementation. (Its other essential internal methods may use any implementation, depending on the specific immutable prototype exotic object in question.)

+

An object is an immutable prototype exotic object if its [[SetPrototypeOf]] internal method uses the following implementation. Its other essential internal methods may use any implementation, depending on the specific immutable prototype exotic object in question.

-

Unlike other exotic objects, there is not a dedicated creation abstract operation provided for immutable prototype exotic objects. This is because they are only used by %Object.prototype% and by host environments, and in host environments, the relevant objects are potentially exotic in other ways and thus need their own dedicated creation operation.

+

Unlike other exotic objects, there is not a dedicated creation abstract operation provided for immutable prototype exotic objects. This is because they are only used by %Object.prototype%, module namespace exotic objects, and by host environments, and in host environments, the relevant objects are potentially exotic in other ways and thus need their own dedicated creation operation.

- +

[[SetPrototypeOf]] ( _V_: an Object or *null*, @@ -15462,20 +15447,6 @@

for
an immutable prototype exotic object _O_

- - 1. Return ? SetImmutablePrototype(_O_, _V_). - -
- - -

- SetImmutablePrototype ( - _O_: an Object, - _V_: an Object or *null*, - ): either a normal completion containing a Boolean or a throw completion -

-
-
1. Let _current_ be ? _O_.[[GetPrototypeOf]](). 1. If SameValue(_V_, _current_) is *true*, return *true*.