spreadcall-not-optimized-static-5b.js (885B)
1 // Tests when JSOP_OPTIMIZE_SPREADCALL can't be applied during the initial 2 // Ion compilation. 3 4 // JSOP_OPTIMIZE_SPREADCALL can be optimised when the following conditions 5 // are fulfilled: 6 // (1) the argument is an array 7 // (2) the array has no hole 8 // (3) array[@@iterator] is not modified 9 // (4) the array's prototype is Array.prototype 10 // (5) Array.prototype[@@iterator] is not modified 11 // (6) %ArrayIteratorPrototype%.next is not modified 12 13 function add(a, b) { 14 return a + b; 15 } 16 17 // Array.prototype[@@iterator] was modified. 18 function test() { 19 var ArrayPrototypeIterator = Array.prototype[Symbol.iterator]; 20 Array.prototype[Symbol.iterator] = function() { 21 return ArrayPrototypeIterator.call([3, 4]); 22 }; 23 function fn(...rest) { 24 return add(...rest); 25 } 26 for (var i = 0; i < 2000; ++i) { 27 assertEq(fn(1, 2), 7); 28 } 29 } 30 test();