Source code

Revision control

Copy as Markdown

Other Tools

// To prevent constant-folding.
let bTrue = true;
let bFalse = false;
function testMonomorphic() {
var obj = { true: 1, false: 2 };
for (var i = 0; i < 40; i++) {
obj[bTrue] = 1 + obj[bTrue];
obj[bFalse] = 2 + obj[bFalse];
var bool = (i & 1) === 1;
obj[bool] = 3 + obj[bool];
}
assertEq(obj.true, 101);
assertEq(obj.false, 142);
}
testMonomorphic();
function testMegamorphic() {
var arr = [];
for (var i = 0; i < 50; i++) {
arr.push({ true: i, ["x" + i]: i * 2, false: i * 3 });
}
var trues = 0;
var falses = 0;
var mixed = 0;
for (var i = 0; i < 100; i++) {
var obj = arr[i % arr.length];
trues += obj[bTrue];
falses += obj[bFalse];
var bool = (i & 1) === 1;
mixed += obj[bool];
obj[bool] += 1;
}
assertEq(trues, 2475);
assertEq(falses, 7375);
assertEq(mixed, 4900);
}
testMegamorphic();