var o;
var f1;
var counter = 0;

function f2(a) {
    bailout();
    return f2.arguments;
};

var restartCode = "counter = 0; " + f2.toSource();

// We need to reevaluate this function everytime, otherwise it is flagged as
// having an argument object and it would not be re-entered.

// This test case is checking that f.arguments reflects the overflow or the
// underflow of arguments after a bailout.  Due to the way bailouts are
// recovered we need to check for the intial frame and for any other JS frame
// below.
//
// To produce a JSFrame, we need to avoid the 'Hot' counters of f1 to be the
// same as f2, because IonMonkey will try to inline f2 in f1, and not
// compiling/calling f2 separately. This explain why we ignore the 5 first call
// of f1 by returning immediately.
//
// Bailouts are caused by calling an object function, which is expected to be a
// function by IonMonkey.  So bailout() cause a bailout in the currently
// compiled function.
//
// To avoid any preventive effect to re-enter f2, we re-evaluate it before every
// test.

// Check bailouts of the initial frame.

eval(restartCode);
while (counter++ < 50) {
    o = f2();
    assertEq(o.length, 0);
}

eval(restartCode);
while (counter++ < 50) {
    o = f2(21);
    assertEq(o.length, 1);
    assertEq(o[0], 21);
}

eval(restartCode);
while (counter++ < 50) {
    o = f2(21,42);
    assertEq(o.length, 2);
    assertEq(o[0], 21);
    assertEq(o[1], 42);
}

// 100 arguments.
eval(restartCode);
while (counter++ < 50) {
    o = f2(0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9);
    assertEq(o.length, 100);
    for (var i in o)
        assertEq(o[i], i % 10);
}

// 200 arguments.
eval(restartCode);
while (counter++ < 50) {
    o = f2(0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,

           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9);
    assertEq(o.length, 200);
    for (var i in o)
        assertEq(o[i], i % 10);
}

// 300 arguments.
eval(restartCode);
while (counter++ < 50) {
    o = f2(0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,

           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,

           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
           0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9);
    assertEq(o.length, 300);
    for (var i in o)
        assertEq(o[i], i % 10);
}

// Check bailouts of one frame which is not the initial frame.

eval(restartCode);
f1 = function() {
    if (counter < 5) return 0;
    return f2();
};
while (counter++ < 50) {
    o = f1();
    if (counter < 5) continue;
    assertEq(o.length, 0);
}

eval(restartCode);
f1 = function() {
    if (counter < 5) return 0;
    return f2(21);
};
while (counter++ < 50) {
    o = f1();
    if (counter < 5) continue;
    assertEq(o.length, 1);
    assertEq(o[0], 21);
}

eval(restartCode);
f1 = function() {
    if (counter < 5) return 0;
    return f2(21,42);
};
while (counter++ < 50) {
    o = f1();
    if (counter < 5) continue;
    assertEq(o.length, 2);
    assertEq(o[0], 21);
    assertEq(o[1], 42);
}

// 100 arguments.
eval(restartCode);
f1 = function() {
    if (counter < 5) return 0;
    return f2(0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9);
};
while (counter++ < 50) {
    o = f1();
    if (counter < 5) continue;
    assertEq(o.length, 100);
    for (var i in o)
        assertEq(o[i], i % 10);
}

// 200 arguments.
eval(restartCode);
f1 = function() {
    if (counter < 5) return 0;
    return f2(0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,

              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
              0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9);
};
while (counter++ < 50) {
    o = f1();
    if (counter < 5) continue;
    assertEq(o.length, 200);
    for (var i in o)
        assertEq(o[i], i % 10);
}

// 300 arguments.
eval(restartCode);
f1 = function() {
  if (counter < 5) return 0;
  return f2(0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,

            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,

            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,
            0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9);
};
while (counter++ < 500) {
    o = f1();
    if (counter < 5) continue;
    assertEq(o.length, 300);
    for (var i in o)
        assertEq(o[i], i % 10);
}
