// Disabled debuggers keep breakpoint handlers alive.

var g = newGlobal();
g.eval("var line0 = Error().lineNumber;\n" +
       "function f() {\n" +     // line0 + 1
       "    return 2;\n" +      // line0 + 2
       "}\n");
var N = 4;
var hits = 0;
for (var i = 0; i < N; i++) {
    var dbg = Debugger(g);
    dbg.onDebuggerStatement = function (frame) {
        var handler = {hit: function () { hits++; }};
        var s = frame.eval("f").return.script;
        var offs = s.getLineOffsets(g.line0 + 2);
        for (var j = 0; j < offs.length; j++)
            s.setBreakpoint(offs[j], handler);
    };
}
g.eval('debugger;');
dbg.enabled = false;
gc({});
dbg.enabled = true;
assertEq(g.f(), 2);
assertEq(hits, N);
