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: 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; |