Caitlin Potter wrote:
The strawman changes to the grammar are still ambiguous :(
`() => {}` -> noop or Object or SyntaxError? If SyntaxError, ...why?
No, the strawman addresses this: "An empty pair of braces |*{}*| other
than at start of /Statement/ is an /ObjectLiteral/." The grammar is
unambiguous. Notice the meta-? in the first production RHS below, and
the non-empty-producing nature of the second:
Block:
{ UnlabeledStatementFirstList? }
{ WellLabeledStatement StatementList? }
UnlabeledStatementFirstList:
UnlabeledStatement
UnlabeledStatementFirstList Statement
The final piece of the puzzle is here:
We retain the |[lookahead ∉ {*{*, *function*}]| restriction in
/ExpressionStatement/. At the start of a statement, |*{*| can be the
start of a block only, never an object literal.
I think hacking around this would not get rid of the footgun, but
would just make it more complicated to understand the footgun, personally.
You mean replace the footgun with a smaller one, maybe one so small it
doesn't matter. Saying that the proposal doesn't get rid of the footgun
means it still remains impossible to write x => {p: x} and not get what
Frankie and others want: an arrow returning an object. But the proposal
does fix that footgun.
How often do you really want an empty object instead of a block with no
statements?
/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss