"use strict"

function opaqueNewObject(prototype)
{
    return Object.create(prototype);
}
noInline(opaqueNewObject);

function putValueOnNewObject(value, prototype)
{
    var object = opaqueNewObject(prototype);
    object.myProperty = value;
    return object;
}
noInline(putValueOnNewObject)

for (var i = 0; i < 1e4; ++i) {
    var initialPrototype = new Object;
    for (var j = 0; j < 5; ++j) {
        var object = putValueOnNewObject(j, initialPrototype);
        if (object["myProperty"] !== j) {
            throw "Ooops, we mess up before the prototype change at iteration i = " + i + " j = " + j;
        }
    }

    initialPrototype.foo = "bar";
    for (var j = 0; j < 5; ++j) {
        var object = putValueOnNewObject(j, initialPrototype);
        if (object["myProperty"] !== j) {
            throw "Ooops, we mess up at iteration i = " + i + " j = " + j;
        }
    }
}