return when desugaring to closures

David Herman dherman at
Thu Oct 9 16:18:07 PDT 2008

> My question was whether the semantics of break and continue would
> support the following:

Yes, this is another good case to consider. Thanks for pointing it out; I'll add this to the strawman:lambdas proposal. Essentially this is another aspect of the semantics of 'function' that is implicit -- that it cancels out the scope of break/continue labels -- and it's precisely these implicit elements of a language feature that break expected equivalences. (They are essentially "unhygienic" -- if you push me, I can explain the connection to macros.)

> while(true) {
> (function() {
> if (--x == 0) break;
> })();
> }

Note that the 'lambda' proposal is intended to be separate from 'function', whose semantics would be left unchanged. So your example would still be disallowed, but this:

    while(true) {
        (lambda() {
             if (--x == 0) break;

would be allowed.

> I honestly don't know, but it shouldn't cause any real trouble to
> allow it. The implementation would be analogous to that for labeled
> return. For example, if the appropriate while loop is no longer on the
> stack, the "break" would turn into an exception.

That's correct.


More information about the Es-discuss mailing list