bool-property-key.js (867B)
1 // To prevent constant-folding. 2 let bTrue = true; 3 let bFalse = false; 4 5 function testMonomorphic() { 6 var obj = { true: 1, false: 2 }; 7 for (var i = 0; i < 40; i++) { 8 obj[bTrue] = 1 + obj[bTrue]; 9 obj[bFalse] = 2 + obj[bFalse]; 10 var bool = (i & 1) === 1; 11 obj[bool] = 3 + obj[bool]; 12 } 13 assertEq(obj.true, 101); 14 assertEq(obj.false, 142); 15 } 16 testMonomorphic(); 17 18 function testMegamorphic() { 19 var arr = []; 20 for (var i = 0; i < 50; i++) { 21 arr.push({ true: i, ["x" + i]: i * 2, false: i * 3 }); 22 } 23 var trues = 0; 24 var falses = 0; 25 var mixed = 0; 26 for (var i = 0; i < 100; i++) { 27 var obj = arr[i % arr.length]; 28 trues += obj[bTrue]; 29 falses += obj[bFalse]; 30 var bool = (i & 1) === 1; 31 mixed += obj[bool]; 32 obj[bool] += 1; 33 } 34 assertEq(trues, 2475); 35 assertEq(falses, 7375); 36 assertEq(mixed, 4900); 37 } 38 testMegamorphic();