42 lines
576 B
JavaScript
42 lines
576 B
JavaScript
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();
|