var foos = [
    function(o) { o.ff = 42; },
    function(o) { o.ff = 42; },
    function(o) { o.ff = 42; },
    function(o) { o.ff = 42; },
    function(o) { o.ff = 42; },
    function(o) { o.ff = 42; },
    function(o) { o.ff = 42; },
    function(o) { o.ff = 42; }
];

if (foos.length != 8)
    throw "Error";

function bar(o, n) {
    if (n == 0)
        return;
    o.na = 1;
    if (n == 1)
        return;
    o.nb = 2;
    if (n == 2)
        return;
    o.nc = 3;
    if (n == 3)
        return;
    o.nd = 4;
    if (n == 4)
        return;
    o.ne = 5;
    if (n == 5)
        return;
    o.nf = 6;
    if (n == 6)
        return;
    o.ng = 7;
    if (n == 7)
        return;
    o.nh = 8;
}

function baz(o, n) {
    if (n == 0)
        return;
    if (o.na != 1)
        throw "Memory corruption";
    if (n == 1)
        return;
    if (o.nb != 2)
        throw "Memory corruption";
    if (n == 2)
        return;
    if (o.nc != 3)
        throw "Memory corruption";
    if (n == 3)
        return;
    if (o.nd != 4)
        throw "Memory corruption";
    if (n == 4)
        return;
    if (o.ne != 5)
        throw "Memory corruption";
    if (n == 5)
        return;
    if (o.nf != 6)
        throw "Memory corruption";
    if (n == 6)
        return;
    if (o.ng != 7)
        throw "Memory corruption";
    if (n == 7)
        return;
    if (o.nh != 8)
        throw "Memory corruption";
}

for (var i = 0; i < 8; ++i)
    noInline(foos[i]);
noInline(bar);

for (var i = 0; i < 100000; ++i) {
    var o = {};
    var p = {a:1, b:2, c:3, d:4, e:5, f:6};
    bar(o, i % 8);
    bar(p, i % 8);
    
    foos[i % 8](o);
    foos[i % 8](p);
    
    if (o.ff != 42)
        throw "Bad result in o: " + o.ff;
    if (p.ff != 42)
        throw "Bad result in o: " + p.ff;
    
    if (p.a != 1 || p.b != 2 || p.c != 3 || p.d != 4 || p.e != 5 || p.f != 6)
        throw "Memory corruption"
    baz(o, i % 8);
    baz(p, i % 8);
}

