summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-onPop-01.js
blob: 2b9f227e3de3342451787d2c10dfe48e9504a942 (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
27
28
29
// When multiple frames have onPop handlers, they are called in the correct order.
var g = newGlobal({newCompartment: true});
g.eval("function f() { debugger; }");
g.eval("function g() { f(); }");
g.eval("function h() { g(); }");
g.eval("function i() { h(); }");

var dbg = new Debugger(g);
var log;
function logger(frame, mark) { 
    return function (completion) {
        assertEq(this, frame);
        assertEq('return' in completion, true);
        log += mark;
    };
}
dbg.onEnterFrame = function handleEnter(f) {
    log += "(" + f.callee.name;
    // Note that this establishes a distinct function object as each
    // frame's onPop handler. Thus, a pass proves that each frame is
    // remembering its handler separately.
    f.onPop = logger(f, f.callee.name + ")");  
};
dbg.onDebuggerStatement = function handleDebugger(f) {
    log += 'd';
};
log = '';
g.i();
assertEq(log, "(i(h(g(fdf)g)h)i)");