|
1 // |jit-test| debug |
|
2 function f() { |
|
3 let (x = 1) { |
|
4 while (true) { |
|
5 yield evalInFrame(0, "x"); |
|
6 x++; |
|
7 let (y = 1) { |
|
8 yield evalInFrame(0, "++y"); |
|
9 yield evalInFrame(0, "++y"); |
|
10 } |
|
11 } |
|
12 } |
|
13 } |
|
14 |
|
15 var gen = f(); |
|
16 assertEq(gen.next(), 1); |
|
17 assertEq(gen.next(), 2); |
|
18 gc(); |
|
19 assertEq(gen.next(), 3); |
|
20 gc(); |
|
21 assertEq(gen.next(), 2); |
|
22 assertEq(gen.next(), 2); |
|
23 gc(); |
|
24 assertEq(gen.next(), 3); |
|
25 gc(); |
|
26 assertEq(gen.next(), 3); |
|
27 assertEq(gen.next(), 2); |
|
28 gc(); |
|
29 assertEq(gen.next(), 3); |
|
30 gen = null; |
|
31 gc(); |
|
32 |
|
33 function g() { |
|
34 let (x = 1) { |
|
35 while (true) { |
|
36 var inner = function (inc) { x += inc; return evalInFrame(0, "x") }; |
|
37 assertEq(inner(0), x); |
|
38 yield inner; |
|
39 assertEq(inner(0), x); |
|
40 } |
|
41 } |
|
42 } |
|
43 |
|
44 var gen = g(); |
|
45 var g1 = gen.next(); |
|
46 var g2 = gen.next(); |
|
47 gc(); |
|
48 assertEq(g1(1), 2); |
|
49 assertEq(g2(1), 3); |
|
50 gc(); |
|
51 assertEq(g1(1), 4); |
|
52 assertEq(g2(1), 5); |
|
53 gen = g1 = g2 = null; |
|
54 gc(); |