fix corner case with class (#4713)

This commit is contained in:
Alex Lam S.L
2021-03-02 04:08:08 +00:00
committed by GitHub
parent 68b2dadc58
commit 62887f2c66
2 changed files with 25 additions and 10 deletions

View File

@@ -1053,6 +1053,16 @@ function parse($TEXT, options) {
return stat;
}
function has_modifier(name) {
if (!is("name", name)) return;
var token = peek();
if (!token) return;
if (is_token(token, "operator", "=")) return;
if (token.type == "punc" && /^[(;}]$/.test(token.value)) return;
if (has_newline_before(token)) return;
return next();
}
function class_(ctor) {
var was_async = S.in_async;
var was_gen = S.in_generator;
@@ -1078,16 +1088,8 @@ function parse($TEXT, options) {
continue;
}
var start = S.token;
var fixed = is("name", "static");
if (fixed) next();
var async = is("name", "async") && peek();
if (async) {
if (async.type == "punc" && /^[(=;}]$/.test(async.value) || has_newline_before(async)) {
async = false;
} else {
async = next();
}
}
var fixed = !!has_modifier("static");
var async = has_modifier("async");
if (is("operator", "*")) {
next();
var internal = is("name") && /^#/.test(S.token.value);

View File

@@ -82,6 +82,19 @@ fields: {
node_version: ">=12"
}
modifier_as_field_name: {
input: {
for (var k in new class { async; static = 42 })
console.log(k);
}
expect_exact: "for(var k in new class{async;static=42})console.log(k);"
expect_stdout: [
"async",
"static",
]
node_version: ">=12"
}
methods: {
input: {
"use strict";