// new.target is valid in any arrow function not in a global context.
new Function('(() => new.target)()');

// It's also good inside eval, but not global eval
assertThrowsInstanceOf(() => eval('() => new.target'), SyntaxError);

function assertNewTarget(expected) {
    assertEq((()=>new.target)(), expected);
    assertEq(eval('()=>new.target')(), expected);

    // Make sure that arrow functions can escape their original context and
    // still get the right answer.
    return (() => new.target);
}

const ITERATIONS = 550;
for (let i = 0; i < ITERATIONS; i++)
    assertEq(assertNewTarget(undefined)(), undefined);

for (let i = 0; i < ITERATIONS; i++)
    assertEq(new assertNewTarget(assertNewTarget)(), assertNewTarget);

if (typeof reportCompare === 'function')
    reportCompare(0,0,"OK");