// A closure's .environment keeps the lexical environment alive even if the closure is destroyed. var N = 4; var g = newGlobal(); g.eval("function add(a) { return function (b) { return eval('a + b'); }; }"); var dbg = new Debugger; var gw = dbg.addDebuggee(g); var aw = gw.getOwnPropertyDescriptor("add").value; // Create N closures and collect environments. var arr = []; for (var i = 0; i < N; i++) arr[i] = aw.call(null, i).return.environment; // Test that they work now. function check() { for (var i = 0; i < N; i++) { assertEq(arr[i].find("b"), null); assertEq(arr[i].find("a"), arr[i]); } } check(); // Test that they work after gc. gc(); gc({}); g.gc(g); check();