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