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

Reply via email to