Allen Wirfs-Brock (2014-06-25T15:21:50.000Z)
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 <wingo at igalia.com> wrote:
> On Wed 25 Jun 2014 15:19, Andy Wingo <wingo at igalia.com> writes:
> 
> > Hi,
> >
> > On Fri 20 Jun 2014 15:16, "Mark S. Miller" <erights at google.com> writes:
> >
> >> On Fri, Jun 20, 2014 at 1:48 AM, Andy Wingo <wingo at 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 at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140625/c2fc85ae/attachment.html>
domenic at domenicdenicola.com (2014-06-27T19:01:26.400Z)
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.