<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 6, 2015 at 3:57 PM, Marius Gundersen <span dir="ltr"><<a href="mailto:gundersen@gmail.com" target="_blank">gundersen@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><p dir="ltr">I don't see how wellLabeledStatement will protect against object literals with shorthand properties, like (x, y, z) => {x, y, z}.</p></blockquote><div><br></div><div>It would "protect" against them by disallowing them without the paren wrapping. A fail-fast SyntaxError beats the hell out of trying to diagnose an almost imperceptible runtime bug.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><p dir="ltr"> </p>
<p dir="ltr">The solution to the block vs object problem today is to wrap the object in parenthesis, but not the block. The only alternative that is easy for humans to understand and not ambiguous for machines is to wrap or prefix the block, but not the object, for example with do: </p>
<p dir="ltr">x => do {<br>
  let a = 5;<br>
  return a*x;<br>
} </p>
<p dir="ltr">AFAIK do expressions are not in ES6, but might be in ES7.</p></blockquote><div><br></div><div>I don't follow -- this isn't a labeled statement. How would it be any different from this?</div><div><br></div><div>x => {<br>  let a = 5;<br>  return a*x;<br>}<br></div><div><br></div><div><br></div><div>AFAIK nobody's proposed forbidding this form. How would do-expressions help here? Sure, IIUC do-expressions would be a good solution for labeled blocks, when they're available. But by es7 there's also plenty of time to refactor the spec to allow some variant of /be's proposed `WellLabeledStatement` grammar, which would allow well-formed labeled statements w/o the do prefix.</div><div><br></div><div>Just to reiterate, I'm arguing that paren-wrapping should <i>still </i>be required around object literal arrow bodies, now and forever. Anything else would be impossibly confusing. But I can't see a reason to allow an (accidentally) unwrapped object literal to parse. If it's not a "well-labeled statement", it's surely a mistake.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><p dir="ltr"> </p><span class=""><font color="#888888">
<p dir="ltr">Marius Gundersen </p>
</font></span><div class="gmail_quote"><div><div class="h5">On 6 Jan 2015 19:42, "Brendan Eich" <<a href="mailto:brendan@mozilla.org" target="_blank">brendan@mozilla.org</a>> wrote:<br type="attribution"></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div class="h5">Sorry, sent too soon.<br>
<br>
Dean Landolt wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
If it's too late to properly vet a change which narrowly excludes from arrow bodies any `LabeledStatement` that isn't a `WellLabeledStatement`, would it be feasible to simply exclude any `LabeledStatement` for now? I doubt there's much code in the wild that would be affected by this change -- certainly not yet. That'd buy plenty of time to add back proper support for `WellLabeledStatement` arrow bodies in es7.<br>
</blockquote>
<br>
The ES6 grammar has not been refactored per my old strawman. It has no WellLabeledStatement non-terminal.<br>
<br>
For ES6, we would need another production parameter to FunctionBody, FunctionStatementList, and StatementList (at least) by which to restrict a ConciseBody : { FunctionBody } such that the FunctionBody : FunctionStatementList (via FunctionStatementList : StatementList[opt], StatementList StatementListItem, etc.) doesn't start with a LabelledStatement.<br>
<br>
Cc'ing Allen and Waldemar for their thoughts.<br>
<br>
/be<br></div></div><span class="">
______________________________<u></u>_________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/<u></u>listinfo/es-discuss</a><br>
</span></blockquote></div>
</blockquote></div><br></div></div>