summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/generators/bug1791968.js
blob: 8438981ddfe899b7dacf3ff9580294f5d85bee42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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();
}