summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-onStack-01.js
blob: 3e69a0a8b359eaee76fbedc8836801a27b296e0f (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
30
31
32
33
34
35
36
37
38
39
40
41
// Debugger.Frame.prototype.onStack is true for frames on the stack and false for
// frames that have returned

var desc = Object.getOwnPropertyDescriptor(Debugger.Frame.prototype, "live");
assertEq(typeof desc.get, "function");
assertEq(desc.set, undefined);
assertEq(desc.configurable, true);
assertEq(desc.enumerable, false);

var loc;

var g = newGlobal({newCompartment: true});
g.debuggeeGlobal = this;
g.eval("var hits = 0;");
g.eval("(" + function () {
        var a = [];
        var dbg = Debugger(debuggeeGlobal);
        dbg.onDebuggerStatement = function (frame) {
            var loc = debuggeeGlobal.loc;
            a[loc] = frame;
            for (var i = 0; i < a.length; i++) {
                assertEq(a[i] === frame, i === loc);
                assertEq(!!(a[i] && a[i].onStack), i >= loc);
            }
            hits++;
        };
    } + ")()");

function f(n) {
    loc = n; debugger;
    if (n !== 0) {
        f(n - 1);
        loc = n; debugger;
        eval("f(n - 1);");
        loc = n; debugger;
    }
}

f(4);
assertEq(g.hits, 16 + 8*3 + 4*3 + 2*3 + 1*3);