<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Oct 21, 2010, at 11:18 PM, Dominic Cooney wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Is it helpful to keep picking at these nits?</blockquote><div><br></div>Sure, much appreciated. These have to get fixed sooner or later, sooner's fine. Thanks again,</div><div><br></div><div>/be</div><div><br><blockquote type="cite"><div><br></div><div>Dominic<br><br><div class="gmail_quote">On Fri, Oct 22, 2010 at 3:15 PM, Brendan Eich <span dir="ltr">&lt;<a href="mailto:brendan@mozilla.com">brendan@mozilla.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div style="word-wrap:break-word"><div><div class="im"><div>On Oct 21, 2010, at 10:58 PM, Dominic Cooney wrote:</div><br>
<blockquote type="cite">The proposed syntax for destructuring objects at &lt;<a href="http://wiki.ecmascript.org/doku.php?id=harmony:destructuring" target="_blank">http://wiki.ecmascript.org/doku.php?id=harmony:destructuring</a>&gt; is:<br>
<br>Pattern ::= "{" (Field ("," Field)* ","?)? "}"&nbsp;<br>
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(array destructuring elided)<br><div>Element ::= Pattern | LValue<br>Field ::= Identifier (":" Element)?<br>LValue ::= &lt;any lvalue expression allowed in a normal assignment expression&gt;</div><div><br>

</div><div>This misses the opportunity for some parallelism with object literals. For example, I can construct {' 0blah': x} with an object literal, but I can't access the ' 0blah' with object destructuring.</div>
</blockquote><div><br></div></div>This is just another (still not formal enough, obviously not yet not carefully spec'ed :-|) grammar bug, copied from the ES4 destructuring proposal page. SpiderMonkey and Rhino get it right:</div>
<div><br></div><div><div>js&gt; var {"0": x} = {"0":42} &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>js&gt; x</div><div>42</div><div>js&gt; var {"0blah": z} = {"0blah":42}&nbsp;</div><div>js&gt; z</div><div>42</div>
<div class="im"><div><br></div><div><br></div><blockquote type="cite">
<div>Maybe Field ::= Identifier (":" Element)? could be changed to:</div><div><br></div><div>Field ::= PropertyName (":" Element)?</div><div><br></div><div>(using ECMA-262's PropertyName)&nbsp;to permit {' 0blah': x} = ...</div>

<div><br></div><div>This also allows seeming nonsense like {' 0blah'}, but I'm not sure that is so bad since bindings in *objects* can have names that aren't identifiers, so why not in scopes in general, too?</div>
</blockquote><div><br></div></div>No, that goes too far. There's no way to name the binding. It's not a property of any object. Again, SpiderMonkey:</div><div><br></div><div><div>js&gt; var {"0blah"} = {"0blah":42}</div>
<div>typein:1: SyntaxError: missing variable name:</div><div>typein:1: var {"0blah"} = {"0blah":42}</div><div>typein:1: .....^</div><div><br></div><div><br></div></div><div class="im"><div><blockquote type="cite">
<div>So to preserve desugarability you could spell out the alternatives of PropertyName in Field, to require elements with strings and numbers:</div><div><br></div><div>Field ::= Identifier (":" Element)?</div>
<div>&nbsp;&nbsp; &nbsp;| StringLiteral ":" Element</div><div>&nbsp;&nbsp; &nbsp;| NumericLiteral ":" Element</div></blockquote><br></div></div><div>Right, that's the way to go. I'll make sure the wiki page is updated again. Thanks,</div>
<div><br></div><font color="#888888"><div>/be</div><br></font></div></blockquote></div><br></div>
_______________________________________________<br>es-discuss mailing list<br><a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>https://mail.mozilla.org/listinfo/es-discuss<br></blockquote></div><br></body></html>