tor-browser

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

Environment-gc-02.js (726B)


      1 // A closure's .environment keeps the lexical environment alive even if the closure is destroyed.
      2 
      3 var N = 4;
      4 var g = newGlobal({newCompartment: true});
      5 g.eval("function add(a) { return function (b) { return eval('a + b'); }; }");
      6 var dbg = new Debugger;
      7 var gw = dbg.addDebuggee(g);
      8 var aw = gw.getOwnPropertyDescriptor("add").value;
      9 
     10 // Create N closures and collect environments.
     11 var arr = [];
     12 for (var i = 0; i < N; i++)
     13    arr[i] = aw.call(null, i).return.environment;
     14 
     15 // Test that they work now.
     16 function check() {
     17    for (var i = 0; i < N; i++) {
     18        assertEq(arr[i].find("b"), null);
     19        assertEq(arr[i].find("a"), arr[i]);
     20    }
     21 }
     22 check();
     23 
     24 // Test that they work after gc.
     25 gc();
     26 gc({});
     27 g.gc(g);
     28 check();