- From: Domenic Denicola <notifications@github.com>
- Date: Wed, 09 Nov 2016 13:37:38 -0800
- To: heycam/webidl <webidl@noreply.github.com>
- Message-ID: <heycam/webidl/pull/230/review/7898653@github.com>
domenic approved this pull request. Looks good. Some editorial nits and some things worth doing as a follow-up. > @@ -2127,8 +2127,18 @@ If multiple legacy callers are specified on an interface, overload resolution is used to determine which legacy caller is invoked when the object is called as if it were a function. -Legacy callers must not be defined to return a -[=promise type=]. +[=Legacy callers=] can only be defined on interfaces that also +[=support indexed properties|supports indexed=] or +[=support named properties|named properties=]. + +Note: This artificial restriction allows bundling all the interfaces +which support these various legacy [=extended attributes=] How about "bundling all interfaces with exotic object behavior"? What "various legacy extended attributes" were you thinking of? > @@ -5073,6 +5083,13 @@ object that are considered to be platform objects: * objects that implement a non-[=callback interface|callback=] [=interface=]; * objects representing IDL {{DOMException|DOMExceptions}}. +<dfn id="dfn-legacy-platform-object" export>Legacy platform objects</dfn> are +[=platform objects=] that implement an [=interface=] which +does not have a [{{Global}}] or [{{PrimaryGlobal}}] [=extended attribute=], +[=support indexed properties|supports indexed=] or s/supports/support to match "objects" > * The interface must not define a [=named property setter=]. +* The interface must not define an [=indexed property getter=]. Probably add "or indexed property setter"? > -If a [=platform object=] implements an [=interface=] that -[=support indexed properties|supports indexed=] or -[=support named properties|named properties=], -the object will appear to have additional properties that correspond to the -object’s indexed and named properties. These properties are not “real” own +[=Legacy platform objects=] will appear to have additional properties that correspond to the s/the/their ? > properties on the object, but are made to look like they are by being exposed by the \[[GetOwnProperty]] internal method. -However, when the [{{Global}}] or -[{{PrimaryGlobal}}] -[=extended attribute=] has been used, -named properties are not exposed on the object but on another object -in the prototype chain, the [=named properties object=]. - It is permissible for an object to implement multiple interfaces that support indexed properties. Maybe as a follow-up we should disallow this. @bzbarsky, do you know of any existing interfaces that implement one or more interfaces that support indexed properties? (Or for that matter named properties.) > -If a [=platform object=] implements an [=interface=] that -[=support indexed properties|supports indexed=] or -[=support named properties|named properties=], -the object will appear to have additional properties that correspond to the -object’s indexed and named properties. These properties are not “real” own +[=Legacy platform objects=] will appear to have additional properties that correspond to the +[=indexed properties|indexed=] and [=named properties=]. These properties are not “real” own properties on the object, but are made to look like they are by being exposed by the \[[GetOwnProperty]] internal method. Link this to the [[GOP]] method's definition? > - This should ensure that for objects with named properties, property resolution is done in the following order: + <div class="note"> IMO this note should not be part of the algorithm, i.e., as it was before is better. > </div> -Support for [=getters=] is -handled by the <a href="#getownproperty">platform object \[[GetOwnProperty]] method</a> -defined in section [[#getownproperty]], and -for [=setters=] -by the <a href="#defineownproperty">platform object \[[DefineOwnProperty]] method</a> -defined in section [[#defineownproperty]] and the <a href="#platformobjectset">platform object \[[Set]] method</a> -defined in section [[#platformobjectset]]. +Support for [=getters=] is handled by the <a href="#legacy-platform-object-getownproperty">legacy platform object \[[GetOwnProperty]] method</a>, +and for [=setters=] by the <a href="#legacy-platform-object-defineownproperty">legacy platform object \[[DefineOwnProperty]] method</a>, +and the <a href="#legacy-platform-object-set">legacy platform object \[[Set]] method</a>. No comma before the last "and" > -<h4 id="getownproperty-guts" dfn>The PlatformObjectGetOwnProperty abstract operation</h4> +<h4 id="getownproperty-guts" lt="LegacyPlatformObjectGetOwnProperty" dfn>The LegacyPlatformObjectGetOwnProperty abstract operation</h4> Needs `abstract-op` attribute in the `h4`, I think instead of `dfn`. Then all references to it must be `<a abstract-op>...</a>` instead of `[=...=]`. This ensures casing is preserved in the "terms defined in this specification" section. > @@ -12032,22 +12034,18 @@ defined in section [[#platformobjectset]]. </div> -<h4 id="getownproperty">Platform object \[[GetOwnProperty]] method</h4> +<h4 id="legacy-platform-object-getownproperty" oldids="getownproperty">Legacy platform object \[[GetOwnProperty]] method</h4> IMO these section headers should be simpler for easier scanning. Either just `\[[GetOwnProperty]]`, or maybe ES-style `\[[GetOwnProperty]] ( |P| )` like we've done in HTML (see https://html.spec.whatwg.org/multipage/browsers.html#windowproxy-getownproperty). > <div algorithm="to invoke the internal [[GetOwnProperty]] method of platform objects"> - The internal \[[GetOwnProperty]] method of every [=platform object=] |O| - that implements an [=interface=] which - [=support indexed properties|supports indexed=] or - [=support named properties|named properties=] + The internal \[[GetOwnProperty]] method of every [=legacy platform object=] |O| If you move the variable declarations into the header, these intro paragraphs can go away, as they have in HTML. > </div> -<h4 id="invoking-indexed-setter">Invoking a platform object indexed property setter</h4> +<h4 id="invoking-indexed-setter">Invoking a legacy platform object indexed property setter</h4> As a follow-up: IMO this should be an abstract op, like LegacyPlatformObjectGetOwnProperty. And all the abstract ops should move after the method definitions, to the bottom of this section. > the following steps are taken: - 1. If |O| [=support indexed properties|supports indexed properties=] or - |O| [=support named properties|supports named properties=], - return <emu-val>false</emu-val>. - 1. Return [=OrdinaryPreventExtensions=](|O|). + 1. return <emu-val>false</emu-val>. Capitalize `Return` -- 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/230#pullrequestreview-7898653
Received on Wednesday, 9 November 2016 21:38:28 UTC