summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Script-clearBreakpoint-02.js
blob: 2de4eb210ef753413989d343d9ea6e56d30395ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// A breakpoint cleared during dispatch does not fire.
// (Breakpoint dispatch is well-behaved even when breakpoint handlers clear other breakpoints.)

var g = newGlobal({newCompartment: true});
var dbg = Debugger(g);
var log = '';
dbg.onDebuggerStatement = function (frame) {
    var s = frame.script;
    function handler(i) {
        if (i === 1)
            return function () { log += i; s.clearBreakpoint(h[1]); s.clearBreakpoint(h[2]); };
        return function () { log += i; };
    }
    var offs = s.getLineOffsets(g.line0 + 2);
    var h = [];
    for (var i = 0; i < 4; i++) {
        h[i] = {hit: handler(i)};
        for (var j = 0; j < offs.length; j++)
            s.setBreakpoint(offs[j], h[i]);
    }
};

g.eval("var line0 = Error().lineNumber;\n" +
       "debugger;\n" +          // line0 + 1
       "result = 'ok';\n");     // line0 + 2
assertEq(log, '013');