load(libdir + "iteration.js"); // break in finally. function *f1() { L: try { yield 1; } finally { break L; } return 2; } it = f1(); assertIteratorNext(it, 1); assertIteratorResult(it.return(4), 2, true); assertIteratorDone(it); // continue in finally, followed by return. function *f2() { do try { yield 1; } catch (e) { assertEq(0, 1); } finally { continue; } while (0); return 2; } it = f2(); assertIteratorNext(it, 1); assertIteratorResult(it.return(4), 2, true); assertIteratorDone(it); // continue in finally, followed by yield. function *f3() { do try { yield 1; } catch (e) { assertEq(0, 1); } finally { continue; } while (0); yield 2; } it = f3(); assertIteratorNext(it, 1); assertIteratorResult(it.return(4), 2, false); assertIteratorDone(it); // continue in finally. function *f4() { var i = 0; while (true) { try { yield i++; } finally { if (i < 3) continue; } } } it = f4(); assertIteratorNext(it, 0); assertIteratorResult(it.return(-1), 1, false); assertIteratorResult(it.return(-2), 2, false); assertIteratorResult(it.return(-3), -3, true); assertIteratorDone(it);