Source code
Revision control
Copy as Markdown
Other Tools
function opaqueThrow() { with ({}) {} throw 3; }
function* foo(n) {
try {
// Get into the catch block.
opaqueThrow();
} catch(v12) {
// Yield a value.
yield 1;
} finally {
// OSR into Warp with JS_GENERATOR_CLOSING
// as the pushed exception.
for (let i = 0; i < 100; i++) { }
// Create an RPow.
var x = Math.pow(1,n);
// When the finally block terminates, we re-throw
// JS_GENERATOR_CLOSING, and rematerialize the frame
// for HandleClosingGeneratorReturn, triggering
// recovery of the RPow.
}
}
for (let i = 0; i < 30; i++) {
let gen = foo(1);
// Advance to the yield in the catch block.
gen.next();
// Close the generator.
gen.return();
}