- From: Domenic Denicola <notifications@github.com>
- Date: Mon, 09 Apr 2018 12:21:44 -0700
- To: heycam/webidl <webidl@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <heycam/webidl/pull/494/review/110579367@github.com>
domenic approved this pull request.
Looks great! Only a few minor suggestions; feel free to merge without another round.
> + 1. [=list/For each=] [=exposed=] [=member=] |member| of |interface|
+ that is declared with the [{{Unscopable}}] [=extended attribute=]:
+ 1. Let |id| be |member|'s [=identifier=].
+ 1. Perform [=!=] <a abstract-op>CreateDataProperty</a>(|unscopableObject|, |id|,
+ <emu-val>true</emu-val>).
+ 1. Let |desc| be the PropertyDescriptor{\[[Value]]: |unscopableObject|,
+ \[[Writable]]: <emu-val>false</emu-val>, \[[Enumerable]]: <emu-val>false</emu-val>,
+ \[[Configurable]]: <emu-val>true</emu-val>}.
+ 1. Perform [=!=] <a abstract-op>DefinePropertyOrThrow</a>(|interfaceProtoObj|, {{@@unscopables}}, |desc|).
+ 1. If |interface| is declared with the [{{Global}}] [=extended attribute=], or
+ |interface| is in the set of [=inherited interfaces=] of an interface
+ that is declared with the [{{Global}}] [=extended attribute=], then:
+ 1. Set the internal methods of |interfaceProtoObj|
+ which are specific to [=immutable prototype exotic objects=]
+ to the definitions specified in
+ [=ECMA-262 §9.4.7|ECMA-262 §9.4.7 Immutable prototype exotic objects=].
The section numbers here seem likely to get out of date; perhaps just "ECMA-262 Immutable prototype exotic objects"?
> + then set |proto| to the [=named properties object=] in |realm| of |interface|.
+ 1. Otherwise, if |interface| is declared to inherit from another interface,
+ then set |proto| to the [=interface prototype object=] in |realm|
+ of that [=inherited interface=].
+ 1. Otherwise, if |interface| is the {{DOMException}} [=interface=],
+ then set |proto| to |realm|.\[[Intrinsics]].[[{{%ErrorPrototype%}}]].
+ 1. Otherwise, if |interface| is declared with the [{{LegacyArrayClass}}] [=extended attribute=],
+ then set |proto| to |realm|.\[[Intrinsics]].[[{{%ArrayPrototype%}}]].
+ 1. Otherwise, set |proto| to |realm|.\[[Intrinsics]].[[{{%ObjectPrototype%}}]].
+ 1. Assert: <a abstract-op>Type</a>(|proto|) is Object.
+ 1. Let |interfaceProtoObj| be [=!=] <a abstract-op>ObjectCreate</a>(|proto|).
+ 1. If |interface| has any [=member=] declared with the [{{Unscopable}}] [=extended attribute=],
+ then:
+
+ Issue: Should an {{@@unscopables}} property also be defined if |interface| is
+ declared with the [{{Global}}] [=extended attribute=]?
Can we file this in the issue tracker? I don't remember why it would be done.
> - the following steps:
-
- 1. If |A| is declared to inherit from another interface, then return the
- [=interface prototype object=]
- for the inherited interface.
- 1. Otherwise, if |A| is declared with the [{{LegacyArrayClass}}]
- extended attribute, then return {{%ArrayPrototype%}}.
- 1. Otherwise, return {{%ObjectPrototype%}}.
+<div algorithm>
+ The [=named properties object=] for a given [=interface=] |interface| and [=Realm=] |realm|,
+ is <dfn lt="create a named properties object">created</dfn> as follows:
+
+ 1. Let |proto| be null.
+ 1. If |interface| is declared to inherit from another interface,
+ then set |proto| to the [=interface prototype object=] in |realm| for the [=inherited interface=].
+ 1. Otherwise, if |interface| is declared with the [{{LegacyArrayClass}}] [=extended attribute=],
May be worth a bug to disallow [LegacyArrayClass] on [Global]s so we can delete this.
> @@ -12407,6 +12468,35 @@ attribute is the concatenation of the class string of the namespace, ".",
and the class string that the interface would otherwise have without this
extended attribute.
+[=Platform objects=] have an internal \[[SetPrototypeOf]] method
+as defined in [[#platform-object-setprototypeof]].
+
+For each [=interface=] |interface| implemented by a [=platform object=] |obj|,
+the following steps must be run:
+
+1. [=Define the unforgeable regular operations=] of |interface| on |obj|, given [=Realm=] |realm|.
_realm_ is not defined. Probably just need to add it into the "For each" statement, e.g. "Within a Realm _realm_, for each...". Similar problem below.
> @@ -12407,6 +12468,35 @@ attribute is the concatenation of the class string of the namespace, ".",
and the class string that the interface would otherwise have without this
extended attribute.
+[=Platform objects=] have an internal \[[SetPrototypeOf]] method
+as defined in [[#platform-object-setprototypeof]].
+
+For each [=interface=] |interface| implemented by a [=platform object=] |obj|,
+the following steps must be run:
Maybe "run as part of _obj_'s creation"?
> +For each [=interface=] |interface| implemented by a [=platform object=] |obj|,
+the following steps must be run:
+
+1. [=Define the unforgeable regular operations=] of |interface| on |obj|, given [=Realm=] |realm|.
+1. [=Define the unforgeable regular attributes=] of |interface| on |obj|, given [=Realm=] |realm|.
+
+If a [=platform object=] |obj| implements an interface
+which is declared with the [{{Global}}] [=extended attribute=], then
+for each [=interface=] |interface| implemented by a |obj|,
+the following steps must be run:
+
+1. [=Define the regular operations=] of |interface| on |obj|, given [=Realm=] |realm|.
+1. [=Define the regular attributes=] of |interface| on |obj|, given [=Realm=] |realm|.
+
+Additionaly, [=platform objects=] which implement an [=interface=]
+which has a [{{Global}}] [=extended attribute=],
I think this comma is unnecessary.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/heycam/webidl/pull/494#pullrequestreview-110579367
Received on Monday, 9 April 2018 19:22:08 UTC