On Apr 29, 2010, at 3:48 PM, Mark S. Miller wrote:

On Thu, Apr 29, 2010 at 3:32 PM, Brendan Eich <[email protected]> wrote:As far as I can tell, this is covered by ECMA-262 7.9.2:

The source

  a = b + c
  (d + e).print()

is not transformed by automatic semicolon insertion, because the parenthesised expression that begins the second
line can be interpreted as an argument list for a function call:

  a = b + c(d + e).print()


Formally, that makes sense. But given that all the other

    <keyword> ... "{" ... "}"

productions, if they occur at the beginning of a statement, end with the "}", I think this reading of the let expression may be confusing. What if we adopt the same (admittedly unpleasant) rule we already have for the "function" keyword: It can't begin an expression statement. If it occurs at the beginning of a statement, it is a statement. If you want a let expression in that position, surround it with parens.

Yeah, we can do this -- it will not break us since we do it for function and { already. In particular, you can't start an object initialiser at the front of a statement -- this bites destructuring assignment with an object pattern too, but in practice it's ok: majority case uses a binding keyword to destructure to fresh names; minority case, you parenthesize.

Thanks for pointing this out.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to