| let i = 10000; | |
| let e; | |
| let d = { | |
| get done() { | |
| let result = !(--i); | |
| if (i % 5000 == 0) | |
| OSRExit(); | |
| return result; | |
| }, | |
| get value() { | |
| if (i % 5000 == 0) | |
| throw e = new Error(); | |
| return i; | |
| } | |
| }; | |
| let x = { | |
| next: ()=>d | |
| } | |
| let iter = {}; | |
| iter[Symbol.iterator] = ()=>x; | |
| function foo() { | |
| for (let x of iter) { | |
| if (x !== --oldI) | |
| throw new Error(); | |
| } | |
| } | |
| let oldI = i; | |
| try { | |
| foo(); | |
| } catch (error) { | |
| if (e !== error) | |
| throw error | |
| } | |
| if (!e) | |
| throw new Error(); |