// Eval of new.target is invalid outside functions. try { eval('new.target'); assertEq(false, true); } catch (e if e instanceof SyntaxError) { } // new.target is invalid inside eval inside top-level arrow functions assertThrowsInstanceOf(() => eval('new.target'), SyntaxError); // new.target is invalid inside indirect eval. let ieval = eval; try { (function () ieval('new.target'))(); assertEq(false, true); } catch (e if e instanceof SyntaxError) { } function assertNewTarget(expected) { assertEq(eval('new.target'), expected); assertEq((()=>eval('new.target'))(), expected); // Also test nestings "by induction" assertEq(eval('eval("new.target")'), expected); assertEq(eval("eval('eval(`new.target`)')"), expected); } const ITERATIONS = 550; for (let i = 0; i < ITERATIONS; i++) assertNewTarget(undefined); for (let i = 0; i < ITERATIONS; i++) new assertNewTarget(assertNewTarget); if (typeof reportCompare === "function") reportCompare(0,0,"OK");