| // new.target is valid inside Function() invocations |
| var func = new Function("new.target"); |
| |
| // Note that this will also test new.target in ion inlines. When the toplevel |
| // script is compiled, assertNewTarget will be inlined. |
| function assertNewTarget(expected, unused) { assertEq(new.target, expected); } |
| |
| // Test non-constructing invocations, with arg underflow, overflow, and correct |
| // numbers |
| for (let i = 0; i < 100; i++) |
| assertNewTarget(undefined, null); |
| |
| for (let i = 0; i < 100; i++) |
| assertNewTarget(undefined); |
| |
| for (let i = 0; i < 100; i++) |
| assertNewTarget(undefined, null, 1); |
| |
| // Test spread-call |
| for (let i = 0; i < 100; i++) |
| assertNewTarget(...[undefined]); |
| |
| for (let i = 0; i < 100; i++) |
| assertNewTarget(...[undefined, null]); |
| |
| for (let i = 0; i < 100; i++) |
| assertNewTarget(...[undefined, null, 1]); |
| |
| // Test constructing invocations, again with under and overflow |
| for (let i = 0; i < 100; i++) |
| new assertNewTarget(assertNewTarget, null); |
| |
| for (let i = 0; i < 100; i++) |
| new assertNewTarget(assertNewTarget); |
| |
| for (let i = 0; i < 100; i++) |
| new assertNewTarget(assertNewTarget, null, 1); |
| |
| // Test spreadnew as well. |
| for (let i = 0; i < 100; i++) |
| new assertNewTarget(...[assertNewTarget]); |
| |
| for (let i = 0; i < 100; i++) |
| new assertNewTarget(...[assertNewTarget, null]); |
| |
| for (let i = 0; i < 100; i++) |
| new assertNewTarget(...[assertNewTarget, null, 1]); |
| |
| if (typeof reportCompare === "function") |
| reportCompare(0,0,"OK"); |