summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/cacheir/fun-call-apply-weird.js
blob: ee1fe0e531dc30c9c1806dbdd402ea6f82035c12 (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
// |jit-test| --fast-warmup

// Function with overridden call/apply (scripted).
function funOverridden1(x, y) { return x + y; }
funOverridden1.call = x => x + 1;
funOverridden1.apply = x => x + 2;

// Function with overridden call/apply (native).
function funOverridden2(x, y) { return x + y; }
funOverridden2.call = Math.abs;
funOverridden2.apply = Math.abs;

// Function with call/apply properties with other names.
function funOverridden3(x, y) { return x + y; }
funOverridden3.myCall = Function.prototype.call;
funOverridden3.myApply = Function.prototype.apply;

function f() {
    var arr = [1, 2];
    for (var i = 0; i < 100; i++) {
        assertEq(funOverridden1.call(i, i), i + 1);
        assertEq(funOverridden1.apply(i, i), i + 2);

        assertEq(funOverridden2.call(i, i), i);
        assertEq(funOverridden2.apply(i, i), i);

        assertEq(funOverridden3.myCall(null, i, i), i + i);
        assertEq(funOverridden3.myApply(null, arr), 3);
    }
}
f();