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