bug1773496.js (659B)
1 var shouldBail = false; 2 function foo() { 3 if (shouldBail) { 4 bailout(); 5 return 0; 6 } 7 for (var i = 0; i < 1000; i++) {} 8 return { value: undefined, done: true } 9 } 10 11 const iterable = { 12 [Symbol.iterator]() { 13 return { 14 i: 0, 15 next() { 16 return { value: this.i++, done: false } 17 }, 18 return() { 19 return foo(); 20 } 21 }; 22 } 23 } 24 25 function closeIter() { 26 with ({}) {} 27 for (var x of iterable) { 28 if (x == 2) { 29 break; 30 } 31 } 32 } 33 34 with ({}) {} 35 for (var i = 0; i < 100; i++) { 36 closeIter(); 37 } 38 39 shouldBail = true; 40 41 caught = false; 42 try { 43 closeIter(); 44 } catch { 45 caught = true; 46 } 47 assertEq(caught, true);