Skip to content

Commit 318315c

Browse files
authored
Editorial: avoid changing internal methods of ordinary objects
This is a follow-up to #871. Changing the [[SetPrototypeOf]] method of the result of OrdinaryObjectCreate goes against the intention of separating OrdinaryObjectCreate and MakeBasicObject, so this fixes that.
1 parent 79bd7e0 commit 318315c

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

index.bs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11288,7 +11288,17 @@ with the [{{LegacyNoInterfaceObject}}] [=extended attribute=].
1128811288
then set |proto| to |realm|.\[[Intrinsics]].[[{{%Error.prototype%}}]].
1128911289
1. Otherwise, set |proto| to |realm|.\[[Intrinsics]].[[{{%Object.prototype%}}]].
1129011290
1. Assert: <a abstract-op>Type</a>(|proto|) is Object.
11291-
1. Let |interfaceProtoObj| be [=!=] [$OrdinaryObjectCreate$](|proto|).
11291+
1. Let |interfaceProtoObj| be null.
11292+
1. If |interface| is declared with the [{{Global}}] [=extended attribute=], or
11293+
|interface| is in the set of [=inherited interfaces=] of an interface
11294+
that is declared with the [{{Global}}] [=extended attribute=], then:
11295+
1. Set |interfaceProtoObj| to [=!=] [$MakeBasicObject$](« \[[Prototype]], \[[Extensible]] »).
11296+
1. Set |interfaceProtoObj|.\[[Prototype]] to |proto|.
11297+
1. Set the internal methods of |interfaceProtoObj|
11298+
which are specific to [=immutable prototype exotic objects=]
11299+
to the definitions specified in
11300+
[=ECMA-262 Immutable prototype exotic objects=].
11301+
1. Otherwise, set |interfaceProtoObj| to [=!=] [$OrdinaryObjectCreate$](|proto|).
1129211302
1. If |interface| has any [=member=] declared with the [{{Unscopable}}] [=extended attribute=],
1129311303
then:
1129411304

@@ -11305,13 +11315,6 @@ with the [{{LegacyNoInterfaceObject}}] [=extended attribute=].
1130511315
\[[Writable]]: <emu-val>false</emu-val>, \[[Enumerable]]: <emu-val>false</emu-val>,
1130611316
\[[Configurable]]: <emu-val>true</emu-val>}.
1130711317
1. Perform [=!=] <a abstract-op>DefinePropertyOrThrow</a>(|interfaceProtoObj|, {{@@unscopables}}, |desc|).
11308-
1. If |interface| is declared with the [{{Global}}] [=extended attribute=], or
11309-
|interface| is in the set of [=inherited interfaces=] of an interface
11310-
that is declared with the [{{Global}}] [=extended attribute=], then:
11311-
1. Set the internal methods of |interfaceProtoObj|
11312-
which are specific to [=immutable prototype exotic objects=]
11313-
to the definitions specified in
11314-
[=ECMA-262 Immutable prototype exotic objects=].
1131511318
1. If |interface| is not declared with the [{{Global}}] [=extended attribute=], then:
1131611319
1. [=Define the regular attributes=] of |interface| on |interfaceProtoObj| given |realm|.
1131711320
1. [=Define the regular operations=] of |interface| on |interfaceProtoObj| given |realm|.

0 commit comments

Comments
 (0)