iterclose-extra-args-throw.js (765B)
1 const iterable = { 2 [Symbol.iterator]() { 3 return { 4 i: 0, 5 next() { 6 return { value: this.i++, done: false } 7 }, 8 return(a, b, c, d) { 9 assertEq(a, undefined); 10 assertEq(b, undefined); 11 assertEq(c, undefined); 12 assertEq(d, undefined); 13 return { value: "return", done: true }; 14 } 15 }; 16 } 17 } 18 19 function closeIter(o) { 20 for (var x of o) { 21 if (x == 2) { 22 throw "good"; 23 } 24 } 25 } 26 27 function test() { 28 with ({}) {} 29 for (var i = 0; i < 100; i++) { 30 var caught = "bad"; 31 try { 32 closeIter(iterable) 33 } catch (e) { 34 caught = e; 35 } 36 assertEq(caught, "good"); 37 } 38 } 39 40 with ({}) {} 41 42 test(); 43 44 // Force an IC in Ion. 45 try { 46 closeIter([1,2,3,4,5]); 47 } catch {} 48 49 test();