Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
michael@0 | 1 | // |jit-test| debug |
michael@0 | 2 | function f() { |
michael@0 | 3 | let (x = 1) { |
michael@0 | 4 | while (true) { |
michael@0 | 5 | yield evalInFrame(0, "x"); |
michael@0 | 6 | x++; |
michael@0 | 7 | let (y = 1) { |
michael@0 | 8 | yield evalInFrame(0, "++y"); |
michael@0 | 9 | yield evalInFrame(0, "++y"); |
michael@0 | 10 | } |
michael@0 | 11 | } |
michael@0 | 12 | } |
michael@0 | 13 | } |
michael@0 | 14 | |
michael@0 | 15 | var gen = f(); |
michael@0 | 16 | assertEq(gen.next(), 1); |
michael@0 | 17 | assertEq(gen.next(), 2); |
michael@0 | 18 | gc(); |
michael@0 | 19 | assertEq(gen.next(), 3); |
michael@0 | 20 | gc(); |
michael@0 | 21 | assertEq(gen.next(), 2); |
michael@0 | 22 | assertEq(gen.next(), 2); |
michael@0 | 23 | gc(); |
michael@0 | 24 | assertEq(gen.next(), 3); |
michael@0 | 25 | gc(); |
michael@0 | 26 | assertEq(gen.next(), 3); |
michael@0 | 27 | assertEq(gen.next(), 2); |
michael@0 | 28 | gc(); |
michael@0 | 29 | assertEq(gen.next(), 3); |
michael@0 | 30 | gen = null; |
michael@0 | 31 | gc(); |
michael@0 | 32 | |
michael@0 | 33 | function g() { |
michael@0 | 34 | let (x = 1) { |
michael@0 | 35 | while (true) { |
michael@0 | 36 | var inner = function (inc) { x += inc; return evalInFrame(0, "x") }; |
michael@0 | 37 | assertEq(inner(0), x); |
michael@0 | 38 | yield inner; |
michael@0 | 39 | assertEq(inner(0), x); |
michael@0 | 40 | } |
michael@0 | 41 | } |
michael@0 | 42 | } |
michael@0 | 43 | |
michael@0 | 44 | var gen = g(); |
michael@0 | 45 | var g1 = gen.next(); |
michael@0 | 46 | var g2 = gen.next(); |
michael@0 | 47 | gc(); |
michael@0 | 48 | assertEq(g1(1), 2); |
michael@0 | 49 | assertEq(g2(1), 3); |
michael@0 | 50 | gc(); |
michael@0 | 51 | assertEq(g1(1), 4); |
michael@0 | 52 | assertEq(g2(1), 5); |
michael@0 | 53 | gen = g1 = g2 = null; |
michael@0 | 54 | gc(); |