varargs-inlined-simple-exit-aliasing-weird-reversed-args.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.";
}

noInline(verify);

function bar() {
    var a = arguments;
    this.verify(arguments, a);
    return foo.apply(null, a);
}

function baz(a, b) {
    return this.bar(a + 1, b + 1);
}

noInline(baz);

for (var i = 0; i < 20000; ++i) {
    var o = {
        baz: baz,
        bar: bar,
        verify: function() { }
    };
    var result = o.baz(1, 2);
    if (result != 1 + 1 + 2 + 1)
        throw "Error: bad result: " + result;
}

var o = {
    baz: baz,
    bar: bar,
    verify: verify
};
var result = o.baz(1, 2);
if (result != 1 + 1 + 2 + 1)
    throw "Error: bad result at end: " + result;