Statement completion values in loops

Michael Day mikeday at yeslogic.com
Wed Jul 28 04:49:38 PDT 2010


Hi,

The spec seems to describe completion values in loops in a confusing and 
possibly incorrect way that is different from what Mozilla does.

Here is a loop, where I would expect the completion value to be 17, and 
this is indeed what Mozilla returns when the code is evaled():

x = true;
outer: while(x) {
     99;
     while (true) {
        if (!x) continue outer;
        x = false;
        17;
     }
}

However, following the spec it would seem like it should be 99.

The inner loop ends with a continue statement that will return an abrupt 
completion with no value. In both ECMA-262-3 and ECMA-262-5 abrupt 
completions are returned immediately as is, and the completion value 
from the last loop iteration is not returned.

I've got some escaped code here for anyone who wants to try it:

y = eval("x = true;"+
"outer: while(x) {"+
"    99;"+
"    while (true) {"+
"       if (!x) continue outer;"+
"       x = false;"+
"       17;"+
"    }"+
"}");

alert(y);

The relevant section of the spec is "12.6.2 The while statement".

Any guidance on this matter would be gratefully appreciated.

Best regards,

Michael

-- 
Print XML with Prince!
http://www.princexml.com


More information about the es-discuss mailing list