diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-03-02 04:08:08 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-02 12:08:08 +0800 |
commit | 62887f2c66491846ab5c08e348373bdad07ea9a2 (patch) | |
tree | c2f58f66262c85e2195eee6a167f9195f9a83709 | |
parent | 68b2dadc58d649f3a917b602a66804ad50aae2ae (diff) | |
download | tracifyjs-62887f2c66491846ab5c08e348373bdad07ea9a2.tar.gz tracifyjs-62887f2c66491846ab5c08e348373bdad07ea9a2.zip |
fix corner case with `class` (#4713)
-rw-r--r-- | lib/parse.js | 22 | ||||
-rw-r--r-- | test/compress/classes.js | 13 |
2 files changed, 25 insertions, 10 deletions
diff --git a/lib/parse.js b/lib/parse.js index 2cb30409..0798062d 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -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); diff --git a/test/compress/classes.js b/test/compress/classes.js index f94731fb..386e3725 100644 --- a/test/compress/classes.js +++ b/test/compress/classes.js @@ -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"; |