support new.target (#4746)

fixes #4745
This commit is contained in:
Alex Lam S.L
2021-03-06 23:11:36 +00:00
committed by GitHub
parent ad903e9240
commit c7520b4b97
4 changed files with 55 additions and 1 deletions

View File

@@ -1812,10 +1812,17 @@ var AST_Super = DEFNODE("Super", null, {
var AST_This = DEFNODE("This", null, {
$documentation: "The `this` symbol",
_validate: function() {
if (this.name !== "this") throw new Error('name must be "this"');
if (this.TYPE == "This" && this.name !== "this") throw new Error('name must be "this"');
},
}, AST_ObjectIdentity);
var AST_NewTarget = DEFNODE("NewTarget", null, {
$documentation: "The `new.target` symbol",
_validate: function() {
if (this.name !== "new.target") throw new Error('name must be "new.target": ' + this.name);
},
}, AST_This);
var AST_Template = DEFNODE("Template", "expressions strings tag", {
$documentation: "A template literal, i.e. tag`str1${expr1}...strN${exprN}strN+1`",
$propdoc: {

View File

@@ -1736,6 +1736,15 @@ function parse($TEXT, options) {
var new_ = function(allow_calls) {
var start = S.token;
expect_token("operator", "new");
if (is("punc", ".") && is_token(peek(), "name", "target")) {
next();
next();
return new AST_NewTarget({
name: "new.target",
start: start,
end: prev(),
})
}
var newexp = expr_atom(false), args;
if (is("punc", "(")) {
next();

View File

@@ -1225,3 +1225,22 @@ issue_4725_2: {
expect_stdout: "PASS"
node_version: ">=4"
}
new_target: {
input: {
console.log(typeof new class {
constructor() {
this.f = () => new.target;
}
}().f());
}
expect: {
console.log(typeof new class {
constructor() {
this.f = () => new.target;
}
}().f());
}
expect_stdout: "function"
node_version: ">=6"
}

View File

@@ -5752,3 +5752,22 @@ issue_4725_2: {
expect_stdout: "PASS"
node_version: ">=4"
}
new_target: {
input: {
console.log(typeof new function() {
return new.target;
}, function() {
return new.target;
}());
}
expect: {
console.log(typeof new function() {
return new.target;
}(), function() {
return new.target;
}());
}
expect_stdout: "function undefined"
node_version: ">=6"
}