Allen Wirfs-Brock (2014-01-07T19:44:52.000Z)
domenic at domenicdenicola.com (2014-01-14T17:41:08.108Z)
Unless we can identify real implementation issues, the semantics of ```js do { } ``` should simply be those of a blocks. JS programmer shouldn't have to learn which subset of statement are invalid in a `do` expression block. In particular, I see no reason why a JS programmer should be able to refactor any valid BlockStatement in to an equivalent ExpressionStatement simply by putting a `do` in front of the leading `{` The meaning of things like: ```js function (x) { for (let i of x.state!==special? x : do {return bar(x)}) foo(i) } ``` is clear and also easy enough to specify. Unless there are some non-obvious implementation issues, I don't see why we would want to disallow such things. The only place where the possible semantics isn't totally obvious is things like: ```js for (x of z ? q : do {break}) ... ``` or ```js for (x of do { if (z) q; else continue}) ... ``` The semantics in the ES6 draft for an unlabeled `break` or `continue` completion in the head of a `for` statement treats both of these as terminating the `for` statement and continuing with the statement following the `for`.