cross-realm-spread-call.js (952B)
1 // Test for `foo(...arguments)` spread calls with a cross-realm ArgumentsObject. 2 function testArgs(a, b, c) { 3 return `${a} ${b} ${c}`; 4 } 5 function test() { 6 var g = newGlobal(); 7 // Replace g.%ArrayIteratorPrototype%.next. 8 g.evaluate(` 9 let arrIterProto = Object.getPrototypeOf([][Symbol.iterator]()); 10 let count = 0; 11 arrIterProto.next = function() { 12 if (count > 2) { 13 count = 0; 14 return {done: true, value: 0}; 15 } 16 return {done: false, value:count++ * 5} }; 17 `); 18 for (var i = 0; i < 30; i++) { 19 var myRealmArgs = () => (function() { return arguments; })(1, 2, 3); 20 var crossRealmArgs = () => g.evaluate(`(function() { return arguments; })(1, 2, 3)`); 21 assertEq(testArgs(...myRealmArgs()), "1 2 3"); 22 assertEq(testArgs(...crossRealmArgs()), "0 5 10"); 23 var mixed = (i & 1) ? myRealmArgs() : crossRealmArgs(); 24 assertEq(testArgs(...mixed), (i & 1) ? "1 2 3" : "0 5 10"); 25 } 26 } 27 test();