| // The same object gets the same Debugger.Object wrapper at different times, if the difference would be observable. |
| |
| var N = 12; |
| |
| var g = newGlobal(); |
| var dbg = Debugger(g); |
| var wrappers = []; |
| |
| dbg.onDebuggerStatement = function (frame) { wrappers.push(frame.arguments[0]); }; |
| g.eval("var originals = []; function f(x) { originals.push(x); debugger; }"); |
| for (var i = 0; i < N; i++) |
| g.eval("f({});"); |
| assertEq(wrappers.length, N); |
| |
| for (var i = 0; i < N; i++) |
| for (var j = i + 1; j < N; j++) |
| assertEq(wrappers[i] === wrappers[j], false); |
| |
| gc(); |
| |
| dbg.onDebuggerStatement = function (frame) { assertEq(frame.arguments[0], wrappers.pop()); }; |
| g.eval("function h(x) { debugger; }"); |
| for (var i = 0; i < N; i++) |
| g.eval("h(originals.pop());"); |
| assertEq(wrappers.length, 0); |