<div dir="ltr">The strawman changes to the grammar are still ambiguous :(<div><br></div><div>`() => {}` -> noop or Object or SyntaxError? If SyntaxError, ...why?</div><div><br></div><div>I think hacking around this would not get rid of the footgun, but would just make it more complicated to understand the footgun, personally.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 5, 2015 at 2:46 PM, Domenic Denicola <span dir="ltr"><<a href="mailto:d@domenic.me" target="_blank">d@domenic.me</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">What do you think the chances of this are in ES7+? That is, how backward-compatible is this change? The linked strawman doesn't seem to touch on `() => { foo: bar }` as a back-compat hazard. Do you feel hopeful?<br>
<br>
-----Original Message-----<br>
From: es-discuss [mailto:<a href="mailto:es-discuss-bounces@mozilla.org">es-discuss-bounces@mozilla.org</a>] On Behalf Of Brendan Eich<br>
Sent: Monday, January 5, 2015 14:41<br>
To: Calvin Metcalf<br>
Cc: es-discuss<br>
Subject: Re: (x) => {foo: bar}<br>
<br>
See<br>
<br>
<a href="http://wiki.ecmascript.org/doku.php?id=strawman:block_vs_object_literal" target="_blank">http://wiki.ecmascript.org/doku.php?id=strawman:block_vs_object_literal</a><br>
<br>
This could be done, but not for ES6. Sorry I didn't push this harder, earlier.<br>
<br>
/be<br>
<br>
Calvin Metcalf wrote:<br>
> this seems like a footgun and has tripped people up in the wild<br>
> <a href="https://twitter.com/jankrems/status/544645776518184960" target="_blank">https://twitter.com/jankrems/status/544645776518184960</a><br>
><br>
> On Mon Jan 05 2015 at 2:05:52 PM Caitlin Potter<br>
> <<a href="mailto:caitpotter88@gmail.com">caitpotter88@gmail.com</a> <mailto:<a href="mailto:caitpotter88@gmail.com">caitpotter88@gmail.com</a>>> wrote:<br>
><br>
>     > In the implementations I checked, this is actually allowed, but<br>
>     it's parsed as a label instead of what you may expect at first<br>
>     glance (an object).<br>
><br>
>     For it to be a concise body, you need to change it to `let f = (x)<br>
>     => ({foo: bar});`. Otherwise, it's like a regular function body.<br>
><br>
>     On Mon, Jan 5, 2015 at 2:02 PM, Frankie Bagnardi<br>
>     <<a href="mailto:f.bagnardi@gmail.com">f.bagnardi@gmail.com</a> <mailto:<a href="mailto:f.bagnardi@gmail.com">f.bagnardi@gmail.com</a>>> wrote:<br>
><br>
>         let f = (x) => {foo: bar};<br>
><br>
>         In the implementations I checked, this is actually allowed,<br>
>         but it's parsed as a label instead of what you may expect at<br>
>         first glance (an object).<br>
><br>
>         Is there any reason this is allowed?  If there's no reason<br>
>         other than to match function(){}, this should be a syntax<br>
>         error, in my opinion.<br>
><br>
>         A potentially easier and wider reaching solution here would be<br>
>         to restrict labels in strict mode to demand a possible<br>
>         break/continue, else it's a syntax error.  The only area I'd<br>
>         be concerned about compatibility is low level generated<br>
>         JavaScript.<br>
><br>
>         Thoughts?<br>
><br>
>         _______________________________________________<br>
>         es-discuss mailing list<br>
>         <a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a> <mailto:<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a>><br>
>         <a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
><br>
><br>
>     _______________________________________________<br>
>     es-discuss mailing list<br>
>     <a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a> <mailto:<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a>><br>
>     <a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
><br>
> _______________________________________________<br>
> es-discuss mailing list<br>
> <a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
> <a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div><br></div>