return when desugaring to closures

Brendan Eich brendan at
Thu Oct 9 15:19:53 PDT 2008

On Oct 9, 2008, at 3:05 PM, Lex Spoon wrote:

> On Thu, Oct 9, 2008 at 5:31 PM, Brendan Eich <brendan at>  
> wrote: JS has break from labeled statement, and continue to labeled  
> loop bottom, a la Java. These look trouble-free to me. Let me know  
> if you see a hard case. Thanks,
> My question was whether the semantics of break and continue would  
> support the following:
> while(true) {
>   (function() {
>     if (--x == 0) break;
>   })();
> }

That's currently a specified error (possibly at runtime; chapter 16 of  
ES3 allows it to be at compile time).

So a future edition could allow it, probably without opt-in  
versioning. Our compatibility model does not guarantee exceptions,  
since it allows contemporaneous extensions that remove those  
exceptions (see ES3 chapter 16 again, second bulleted list, first  
bullet -- these lists need their own sub-sections and numbers!).

> 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.

Right, and break to label outside the function's body, but lexically  
in scope, would be completely analogous (or just "the same" ;-)):

L: while (true) {
   (function () {
     ... // stuff possibly including a loop or switch that brackets  
the next line
     if (--x == 0) break L;

> For example, if the appropriate while loop is no longer on the  
> stack, the "break" would turn into an exception.

Yes, this new runtime exception is the price of admission.

The exception seems to a major source of grief in the Java BGGA  
closures controversy, or at least it did when I last looked. But it  
comes up with escape continuations in Scheme, and it is inevitable if  
we want these kinds of program equivalences.

I'm interested in the reactions of others on the list to such "return/ 
break/continue from already-deactivated statement/frame" exceptions.  
They could be caught and handled, of course. Feature and bug, dessert  
topping and floor wax ;-).


More information about the Es-discuss mailing list