ladybird/Libraries/LibJS/Tests/functions/function-new-target.js
Linus Groh 39a1c9d827 LibJS: Implement 'new.target'
This adds a new MetaProperty AST node which will be used for
'new.target' and 'import.meta' meta properties. The parser now
distinguishes between "in function context" and "in arrow function
context" (which is required for this).
When encountering TokenType::New we will attempt to parse it as meta
property and resort to regular new expression parsing if that fails,
much like the parsing of labelled statements.
2020-11-02 22:40:59 +01:00

26 lines
656 B
JavaScript

test("basic functionality", () => {
function foo() {
return new.target;
}
expect(foo()).toBeUndefined();
expect(new foo()).toEqual(foo);
function bar() {
const baz = () => new.target;
return baz();
}
expect(bar()).toBeUndefined();
expect(new bar()).toEqual(bar);
class baz {
constructor() {
this.newTarget = new.target;
}
}
expect(new baz().newTarget).toEqual(baz);
});
// FIXME: This does not work as expected as toEval() places the code inside a function :|
test.skip("syntax error outside of function", () => {
expect("new.target").not.toEval();
});