statements that could be expressions?

Brendan Eich brendan at mozilla.com
Fri Jun 3 16:04:01 PDT 2011


On Jun 3, 2011, at 3:11 PM, Waldemar Horwat wrote:

> On 06/02/11 20:12, Brendan Eich wrote:
>>> - Conflict between blocks and statements:
>>> 
>>> a = {x: while (x) { ... break x;}}
>>> 
>>> is either an object initializer or a block containing a labeled while statement.
>> 
>> http://wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax based on feedback from Jorge here on the list mentions a block that cannot start with a label. Two-token lookahead restriction, why not?
> 
> Don't you also want to allow (either now or in the future) for the shorthand {x, y} to mean {x:x, y:y}?  There are also getters, setters, and various other stuff that can be put into object initializers now or in the future, so there are more possibilities than just an identifier followed by a colon.

True, and {x, y} is noted somewhere (or was in a past version) as a problem. http://wiki.ecmascript.org/doku.php?id=strawman:object_initialiser_shorthand did not get promoted yet, and I forgot to keep this pot boiling.

The accessors are not ambiguous, but the proposed !, ~, and # property prefixes for writable, enumerable, and configurable false-setting do make trouble.

Perhaps Breton's more radical idea of unifying objects and block (lambdas) deserves a look, instead of trying to separate syntaxes that start with { at this late date.

/be


More information about the es-discuss mailing list