invalidation-point.js   [plain text]


function foo(o, p) {
    possiblyDoBadThings(p);
    return o.f();
}
noInline(foo);

function Thingy() { }
Thingy.prototype.f = function() { return 42; }

function possiblyDoBadThings(p) {
    if (p)
        Thingy.prototype.f = function() { return 24; }
}
noInline(possiblyDoBadThings);

for (var i = 0; i < 100000; ++i) {
    var result = foo(new Thingy(), false);
    if (result != 42)
        throw "Error: bad result: " + result;
}

var result = foo(new Thingy(), true);
if (result != 24)
    throw "Error: bad result: " + result;