varargs-inlined-simple-exit-aliasing.js   [plain text]


function foo(a, b) {
    return a + b;
}

function verify(a, b) {
    if (a !== b)
        throw "Error: the two arguments objects aren't identical.";
    if (a[0] !== 42)
        throw "Error: the first argument isn't 42 (a).";
    if (b[0] !== 42)
        throw "Error: the first argument isn't 42 (b).";
}

noInline(verify);

var global = false;
function bar(x) {
    var a = arguments;
    if (global) {
        x = 42;
        verify(arguments, a);
    }
    return foo.apply(null, a);
}

function baz(a, b) {
    return bar(a, b);
}

noInline(baz);

for (var i = 0; i < 10000; ++i) {
    var result = baz(1, 2);
    if (result != 1 + 2)
        throw "Error: bad result: " + result;
}

global = true;
var result = baz(1, 2);
if (result != 42 + 2)
    throw "Error: bad result at end: " + result;