loop unrolling and completion values in ES6

Brendan Eich brendan at mozilla.org
Wed Apr 8 17:13:06 UTC 2015

Allen Wirfs-Brock wrote:
> Well, they do for normal loop completions (according to the spec.) but not for breaks.  I this the latter is a bug.  In particular, I think it is pretty obvious that:
>     eval(“ {0; while (true) {1; break}; 2}”)

(single quotes might avoid the smart-dumb transformation that happened 
here, which frustrated copy-paste into JS console :-|.)

> should evaluate to 1

Why? Completion is on the 2; expression statement at the end. The break 
doesn't break from the block.

> It is a little less obvious for:
>     eval(“{0; L: while (true) {1; while (true) {2; break L; 3}; 4}; 5}”)
> but, I think that consistency with the first case requires this to evaluate to 2.

The 3; and 4; statements are not reached, but 5; is -- again something 
seems wrong with these examples.


More information about the es-discuss mailing list