chromium/third_party/blink/web_tests/fast/js/script-tests/method-check.js

description(
"Test method-check related bugs"
);

function func2() { }

// This test yields PASS, if malloc does not reuse the memory address for the structure of String prototype
function func()
{
    String.prototype.a = function() { }
    String.prototype.b = function() { }

    if (window.GCController)
        GCController.collect();
    else {
        // The following 3 lines cause gc() flush on a Debian
        // Linux machine, but there is no guarantee, it works on
        // any other computer. (Not even another Debian Linux)
        // If func2() is not called or a much bigger or lower
        // value than 5000 is chosen, the crash won't happen
        func2()
        for (var i = 0; i < 5000; ++i)
            new Boolean()
    }

    var str = ""
    for (var i = 0; i < 5; ++i)
        str.a()
}

func()
func()

// Test that method caching correctly invalidates (doesn't incorrectly continue to call a previously cached function).
var total = 0;
function addOne()
{
    ++total;
}
function addOneHundred()
{
    total+=100;
}
var totalizer = {
    makeCall: function(callback)
    {
        this.callback = callback;
        this.callback();
    }
};
for (var i=0; i<100; ++i)
    totalizer.makeCall(addOne);
totalizer.makeCall(addOneHundred);
shouldBe('total', '200');

// Check that we don't assert when method_check is applied to a non-JSFunction
for (var i = 0; i < 10000; i++)
    Array.constructor(1);