summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/warp/function-var-environment.js
blob: dd23cb67a9ea941272958a8b7cd59e9e6ecebcf9 (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
42
43
function defaultValue() { return 123; }

// 2 environment objects: Call => Var. The lambda uses both of them.
function testBasic(p = defaultValue()) {
    for (var i = 0; i < 2000; i++) {}
    return () => i + p;
}
assertEq(testBasic()(), 2123);

function testBailout(p = defaultValue()) {
    for (var i = 0; i < 2000; i++) {
        if (i > 1950) {
            bailout();
        }
    }
    return () => i + p;
}
assertEq(testBailout()(), 2123);

// 3 environment objects: Call => Var => Lexical. The lambda uses all of them.
let escaped;
function testVarAndLexical(p = defaultValue()) {
    var q = p + 1;
    let i = 0;
    for (; i < 2000; i++) {
        escaped = () => i + p + q;
    }
}
testVarAndLexical();
assertEq(escaped(), 2247);

function testVarAndLexicalBailout(p = defaultValue()) {
    var q = p + 1;
    let i = 0;
    for (; i < 2000; i++) {
        escaped = () => i + p - q;
        if (i > 1950) {
            bailout();
        }
    }
}
testVarAndLexicalBailout();
assertEq(escaped(), 1999);