1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/basic/eif-generator.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,54 @@ 1.4 +// |jit-test| debug 1.5 +function f() { 1.6 + let (x = 1) { 1.7 + while (true) { 1.8 + yield evalInFrame(0, "x"); 1.9 + x++; 1.10 + let (y = 1) { 1.11 + yield evalInFrame(0, "++y"); 1.12 + yield evalInFrame(0, "++y"); 1.13 + } 1.14 + } 1.15 + } 1.16 +} 1.17 + 1.18 +var gen = f(); 1.19 +assertEq(gen.next(), 1); 1.20 +assertEq(gen.next(), 2); 1.21 +gc(); 1.22 +assertEq(gen.next(), 3); 1.23 +gc(); 1.24 +assertEq(gen.next(), 2); 1.25 +assertEq(gen.next(), 2); 1.26 +gc(); 1.27 +assertEq(gen.next(), 3); 1.28 +gc(); 1.29 +assertEq(gen.next(), 3); 1.30 +assertEq(gen.next(), 2); 1.31 +gc(); 1.32 +assertEq(gen.next(), 3); 1.33 +gen = null; 1.34 +gc(); 1.35 + 1.36 +function g() { 1.37 + let (x = 1) { 1.38 + while (true) { 1.39 + var inner = function (inc) { x += inc; return evalInFrame(0, "x") }; 1.40 + assertEq(inner(0), x); 1.41 + yield inner; 1.42 + assertEq(inner(0), x); 1.43 + } 1.44 + } 1.45 +} 1.46 + 1.47 +var gen = g(); 1.48 +var g1 = gen.next(); 1.49 +var g2 = gen.next(); 1.50 +gc(); 1.51 +assertEq(g1(1), 2); 1.52 +assertEq(g2(1), 3); 1.53 +gc(); 1.54 +assertEq(g1(1), 4); 1.55 +assertEq(g2(1), 5); 1.56 +gen = g1 = g2 = null; 1.57 +gc();