From 62887f2c66491846ab5c08e348373bdad07ea9a2 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Tue, 2 Mar 2021 04:08:08 +0000 Subject: [PATCH] fix corner case with `class` (#4713) --- lib/parse.js | 22 ++++++++++++---------- 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"; -- 2.34.1