35 lines
699 B
JavaScript
35 lines
699 B
JavaScript
let shouldVendNull = false;
|
|
function vendNext() {
|
|
if (shouldVendNull)
|
|
return 1;
|
|
return { done: true };
|
|
}
|
|
noInline(vendNext);
|
|
|
|
// Pass shouldVendNull as param so we don't OSR when it becomes true.
|
|
function test(shouldVendNull) {
|
|
let iterable = {
|
|
[Symbol.iterator]() { return this; },
|
|
next() { return vendNext(); }
|
|
}
|
|
for (let o of iterable)
|
|
throw new Error();
|
|
if (shouldVendNull)
|
|
throw new Error();
|
|
}
|
|
noInline(test);
|
|
|
|
for (let i = 0; i < 1e5; ++i)
|
|
test();
|
|
|
|
shouldVendNull = true;
|
|
let error;
|
|
try {
|
|
test(true);
|
|
} catch (e) {
|
|
error = e;
|
|
}
|
|
|
|
if (error != "TypeError: Iterator result interface is not an object.")
|
|
throw error;
|