| // Since we put new.target at the end of the arguments vector, ensrue that it |
| // doesn't interact with the arguments object |
| |
| var argsContent; |
| |
| function argsWithNewTarget(foo) { |
| assertEq(arguments.length, argsContent.length); |
| for (let i = 0; i < arguments.length; i++) |
| assertEq(arguments[i], argsContent[i]); |
| let nt = new.target; |
| |
| // Assigning to the arguments object shouldn't infect new.target, either |
| arguments[arguments.length] = 42; |
| assertEq(new.target, nt); |
| } |
| |
| // Test constructing invocations, with under and overflow |
| argsContent = []; |
| for (let i = 0; i < 100; i++) |
| new argsWithNewTarget(); |
| |
| argsContent = [1]; |
| for (let i = 0; i < 100; i++) |
| new argsWithNewTarget(1); |
| |
| argsContent = [1,2,3]; |
| for (let i = 0; i < 100; i++) |
| new argsWithNewTarget(1, 2, 3); |
| |
| // Test spreadnew as well. |
| argsContent = []; |
| for (let i = 0; i < 100; i++) |
| new argsWithNewTarget(...[]); |
| |
| argsContent = [1]; |
| for (let i = 0; i < 100; i++) |
| new argsWithNewTarget(...[1]); |
| |
| argsContent = [1,2,3]; |
| for (let i = 0; i < 100; i++) |
| new argsWithNewTarget(...[1,2,3]); |
| |
| if (typeof reportCompare === "function") |
| reportCompare(0,0,"OK"); |