megamorphic-invalidate.js (1632B)
1 setJitCompilerOption("ic.force-megamorphic", 1); 2 3 function testAddToIntermediate() { 4 var C = Object.create(null); 5 var B = Object.create(C); 6 var A = Object.create(B); 7 C.x = 1; 8 for (var i = 0; i < 50; i++) { 9 assertEq(A.x, i <= 45 ? 1 : 0); 10 if (i === 45) { 11 B.x = 0; 12 } 13 } 14 } 15 for (var i = 0; i < 5; i++) { 16 testAddToIntermediate(); 17 } 18 19 function testAddToReceiver() { 20 var C = Object.create(null); 21 var B = Object.create(C); 22 var A = Object.create(B); 23 C.x = 1; 24 for (var i = 0; i < 50; i++) { 25 assertEq(A.x, i <= 45 ? 1 : 0); 26 if (i === 45) { 27 A.x = 0; 28 } 29 } 30 } 31 for (var i = 0; i < 5; i++) { 32 testAddToReceiver(); 33 } 34 35 function testDelete() { 36 var C = Object.create(null); 37 var B = Object.create(C); 38 var A = Object.create(B); 39 C.x = 1; 40 for (var i = 0; i < 50; i++) { 41 assertEq(A.x, i <= 45 ? 1 : undefined); 42 if (i === 45) { 43 delete C.x; 44 } 45 } 46 } 47 for (var i = 0; i < 5; i++) { 48 testDelete(); 49 } 50 51 function testDataToAccessor() { 52 var C = Object.create(null); 53 var B = Object.create(C); 54 var A = Object.create(B); 55 C.x = 1; 56 for (var i = 0; i < 50; i++) { 57 assertEq(A.x, i <= 45 ? 1 : 7); 58 if (i === 45) { 59 Object.defineProperty(C, "x", {get: () => 7}); 60 } 61 } 62 } 63 for (var i = 0; i < 5; i++) { 64 testDataToAccessor(); 65 } 66 67 function testProtoChange() { 68 var C = Object.create(null); 69 var B = Object.create(C); 70 var A = Object.create(B); 71 C.x = 1; 72 for (var i = 0; i < 50; i++) { 73 assertEq(A.x, i <= 45 ? 1 : 8); 74 if (i === 45) { 75 Object.setPrototypeOf(B, {a: 0, b: 1, x: 8}); 76 } 77 } 78 } 79 for (var i = 0; i < 5; i++) { 80 testProtoChange(); 81 }