return when desugaring to closures

Waldemar Horwat waldemar at google.com
Fri Oct 10 13:25:42 PDT 2008


Brendan Eich wrote:
> On Oct 9, 2008, at 3:05 PM, Lex Spoon wrote:
> 
>> On Thu, Oct 9, 2008 at 5:31 PM, Brendan Eich <brendan at mozilla.org>  
>> 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!).

So what should f(5, 0) do?

function f(x, h) {
  while (true) {
    try {
      if (h == 0)
        h = function() {break};
      if (x != 0)
        f(x-1, h);
      else
        h();
    } catch (e) {
      alert("caught " + e + " on " + x);
    } finally {
      alert("f called finally on " + x);
    }
    alert("f looping on " + x);
  }
  alert("f exited on " + x);
}

    Waldemar


More information about the Es-discuss mailing list