tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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();