fold-multi-put-by-offset-to-put-by-offset.js   [plain text]


function foo(o) {
    o.f = (o.f | 0) + 42;
}

function callFoo(o) {
    return foo(o);
}

noInline(callFoo);

for (var i = 0; i < 10000; ++i) {
    var object;
    if ((i % 3) == 0)
        object = {g:3};
    else if ((i % 3) == 1)
        object = {f:1, g:2};
    else if ((i % 3) == 2)
        object = {g:1, f:2};
    callFoo(object);
    if (object.f != 42 + (i % 3))
        throw "Error: bad result for i = " + i + ": " + object.f;
}

function bar(o) {
    var result = o.f;
    foo(o);
    return result;
}

noInline(bar);

for (var i = 0; i < 100000; ++i) {
    var o = {f:42};
    var result = bar(o);
    if (result != 42)
        throw "Error: bad result at end: " + result;
    if (o.f != 42 + 42)
        throw "Error: bad o.f: " + o.f;
}