Source code

Revision control

Copy as Markdown

Other Tools

// Test failure when constructing a function whose |.prototype| property isn't an object.
function Klass() {
this.prop = 1;
}
// Save the original prototype.
const KlassPrototype = Klass.prototype;
// Set the prototype to a non-object value.
Klass.prototype = null;
const prototypes = [
null,
KlassPrototype,
];
const N = 500;
let c = 0;
for (let i = 0; i <= N; ++i) {
// Always perform a set to avoid a cold-code bailout.
let proto = prototypes[(i === N)|0];
Klass.prototype = proto;
// Create a new object.
let o = new Klass();
// Read a property from the new object to ensure it was correctly allocated
// and initialised.
c += o.prop;
// The prototype defaults to %Object.prototype% when the |.prototype|
// property isn't an object.
assertEq(Object.getPrototypeOf(o), proto === null ? Object.prototype : KlassPrototype);
}
assertEq(c, N + 1);