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
-
-
-
- 1. Return ! SetImmutablePrototype(_O_, _V_).
-
-
-
[[IsExtensible]] ( ): a normal completion containing *false*
-
- 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*.