Allen, > If propKey is the string value "__proto__"
Do we want to allow "__\u0070roto__" or not? For "use strict" we made it clear that no escape sequences are allowed. I think we should follow that route unless it makes implementation and/or speccing too hard. On Wed, Jun 25, 2014 at 11:21 AM, Allen Wirfs-Brock <al...@wirfs-brock.com> wrote: > yes, this is covered by > http://people.mozilla.org/~jorendorff/es6-draft.html#sec-__proto__-property-names-in-object-initializers > > > __proto__ only has special meaning within a production: > > PropertyDefiniton : PropertyName ":" AssignmentExpression > > and when PropertyName is not a ComputedPropertyName. > > All other PropertyDefinition forms that have __proto__ as the property > name (whether literally or as a ComputedPropertyName) just define ordinary > properties with the name "__proto__". > > The current non-duplicated name restriction made it illegal to have more > than one __proto__ : something property definitions in an object literal. > Because __proto__: something is a special form with its own semantics I > think we should continue to make it illegal to have more than one of them, > even when we relax the duplicate rule for regular property definitions. > > Allen > > > On Jun 25, 2014, at 8:09 AM, Erik Arvidsson wrote: > > If I recall correctly the intent was that __proto__ was special syntax for > setting the [[Prototype]]. So only three following cases are setting the > [[Prototype]] > > {__proto__: object} > {'__proto__': object} > {"__proto__": object} > > Other combinations set an own property: > > {['__proto__']: object} > {'__\u0070roto__]: object} > {__proto__() {}} > var __proto__; > {__proto__} > {get __proto__() {}} > {set __proto__(x) {}} > > Combining these leads to confusing code (so don't do that) but the > semantics is clear. > > > On Wed, Jun 25, 2014 at 9:27 AM, Andy Wingo <wi...@igalia.com> wrote: > >> On Wed 25 Jun 2014 15:19, Andy Wingo <wi...@igalia.com> writes: >> >> > Hi, >> > >> > On Fri 20 Jun 2014 15:16, "Mark S. Miller" <erig...@google.com> writes: >> > >> >> On Fri, Jun 20, 2014 at 1:48 AM, Andy Wingo <wi...@igalia.com> wrote: >> >> > >> >> > There is one change: >> >> > >> >> > ({ foo: 3, get foo() { return 4 } }) >> >> > >> >> This is not allowed with current sloppy mode. >> >> >> >> Yes, good catch. This is a change, and it is now allowed. >> > >> > What about: >> > >> > ({ get __proto__() {}, __proto__: foo }) // (1) >> > >> > Does this end up setting the prototype of the result? Would it if there >> > were a setter? >> > >> > Likewise: >> > >> > ({ __proto__: foo, get __proto__() {} }) // (2) >> > >> > This one is kinda similar: >> > >> > ({ ['__proto__']: 34, __proto__: foo }) // (3) >> >> And another one: >> >> ({ get __proto__() {}, __proto__: foo, set __proto__(x) {} }) >> >> Does the resulting accessor have a setter and a getter, or just a >> setter? I would think just a setter, in the same way that this one >> would only have a setter: >> >> ({ get qux() {}, qux: foo, set qux(x) {} }) >> >> Andy >> > > > > -- > erik > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss > > > -- erik
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss