// FIXME: unskip when this is solved
// https://bugs.webkit.org/show_bug.cgi?id=191163
//@ skip if ["arm", "mips", "x86"].include?($architecture)
function assert(b) {
    if (!b)
        throw new Error("Bad assertion");
}
noInline(assert);

function identity(a) { return a; }
noInline(identity);

function bar(...args) {
    return args;
}
noInline(bar);

function foo(a, ...args) {
    let arg = identity(a);
    try {
        let r = bar(...args, ...args);
        return r;
    } catch(e) {
        return arg;
    }
}
noInline(foo);

for (let i = 0; i < 40000; i++) {
    let args = [];
    for (let i = 0; i < 400; i++) {
        args.push(i);
    }

    let o = {};
    let r = foo(o, ...args);
    let i = 0;
    for (let arg of args) {
        assert(r[i] === arg);
        i++;
    }
    for (let arg of args) {
        assert(r[i] === arg);
        i++;
    }
}

for (let i = 0; i < 20; i++) {
    let threw = false;
    let o = {};
    let args = [];
    let argCount = maxArguments() * (2/3);
    argCount = argCount | 0;
    for (let i = 0; i < argCount; i++) {
        args.push(i);
    }

    let r = foo(o, ...args);
    assert(r === o);
}
