- From: Domenic Denicola <notifications@github.com>
- Date: Tue, 19 Dec 2017 11:51:45 -0800
- To: heycam/webidl <webidl@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <heycam/webidl/pull/494/review/84569948@github.com>
domenic commented on this pull request.
> - return the [=named properties object=]
- for |A|, as defined in [[#named-properties-object]].
- 1. Otherwise, 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%}}.
+ 1. Let |proto| be null.
+ 1. If |interface| is declared with the [{{Global}}] [=extended attribute=],
+ and |interface| [=support named properties|supports named properties=],
+ then set |proto| to the [=named properties object=] of |interface|,
+ as defined in [[#named-properties-object]].
+ 1. Otherwise, if |interface| is declared to inherit from another interface,
+ then set |proto| to the [=interface prototype object=] of the inherited interface.
Also should state the interface prototype object in _realm_.
> + then set |proto| to the [=named properties object=] of |interface|,
+ as defined in [[#named-properties-object]].
+ 1. Otherwise, if |interface| is declared to inherit from another interface,
+ then set |proto| to the [=interface prototype object=] of the inherited interface.
+ 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. Let |interfaceProtoObj| be [=!=] <a abstract-op>ObjectCreate</a>(|proto|).
+ 1. If |interface| has any [=member=] declared with the [{{Unscopable}}] [=extended attribute=],
+ then:
+ 1. Let |unscopableObject| be the result of performing [=!=]
+ <a abstract-op>ObjectCreate</a>(|realm|.\[[Intrinsics]].[[{{%ObjectPrototype%}}]]).
+ 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|).
Style nit/matter of preference: I would install the property after filling it up with values, so move the following step up above these two.
> + 1. Let |interfaceProtoObj| be [=!=] <a abstract-op>ObjectCreate</a>(|proto|).
+ 1. If |interface| has any [=member=] declared with the [{{Unscopable}}] [=extended attribute=],
+ then:
+ 1. Let |unscopableObject| be the result of performing [=!=]
+ <a abstract-op>ObjectCreate</a>(|realm|.\[[Intrinsics]].[[{{%ObjectPrototype%}}]]).
+ 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. [=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. [=Expose the regular attributes=] of |interface| on |interfaceProtoObj| given |realm|.
+ 1. [=list/For each=] [=exposed=] [=regular operation=] |op| that is a [=member=] of |interface|:
Why did the other two get their own dedicated "expose the X"s, but not regular operations?
--
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-84569948
Received on Tuesday, 19 December 2017 19:52:07 UTC