summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Environment-identity-01.js
blob: 7d0c5b134d4063623f95eb92459c177c227fa362 (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
// The value of frame.environment is the same Environment object at different
// times within a single visit to a scope.

var g = newGlobal({newCompartment: true});
var dbg = Debugger(g);
g.eval("function h() { debugger; }");
var hits, env;
dbg.onDebuggerStatement = function (hframe) {
    var frame = hframe.older;
    var e = frame.environment;

    // frame.environment is at least cached from one moment to the next.
    assertEq(e, frame.environment);

    // frame.environment is cached from statement to statement within a call frame.
    if (env === undefined)
        env = e;
    else
        assertEq(e, env);

    hits++;
};

hits = 0;
env = undefined;
g.eval("function f() { (function () { var i = 0; h(); var j = 2; h(); })(); }");
g.f();
assertEq(hits, 2);

hits = 0;
env = undefined;
g.eval("function f2() { { let i = 0; h(); let j = 2; h(); } }");
g.f2();
assertEq(hits, 2);

hits = 0;
env = undefined;
g.eval("function f3() { { let i; for (i = 0; i < 2; i++) h(); } }");
g.f3();
assertEq(hits, 2);