aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js52
-rw-r--r--test/compress/classes.js21
2 files changed, 49 insertions, 24 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 101fdb4e..ba7ab4a0 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -938,31 +938,35 @@ merge(Compressor.prototype, {
node.variables.each(function(def) {
reset_def(tw, compressor, def);
});
- if (!node.name) return;
- var d = node.name.definition();
- var parent = tw.parent();
- if (parent instanceof AST_ExportDeclaration || parent instanceof AST_ExportDefault) d.single_use = false;
- if (safe_to_assign(tw, d, true)) {
- mark(tw, d);
- tw.loop_ids[d.id] = tw.in_loop;
- d.fixed = function() {
- return node;
- };
- d.fixed.assigns = [ node ];
- if (!is_safe_lexical(d)) d.single_use = false;
- } else {
- d.fixed = false;
- }
- });
- def(AST_ClassField, function(tw) {
- var node = this;
- if (node.static) return;
- if (node.key instanceof AST_Node) node.key.walk(tw);
- if (node.value) {
- push(tw);
- node.value.walk(tw);
- pop(tw);
+ if (node.extends) node.extends.walk(tw);
+ if (node.name) {
+ var d = node.name.definition();
+ var parent = tw.parent();
+ if (parent instanceof AST_ExportDeclaration || parent instanceof AST_ExportDefault) d.single_use = false;
+ if (safe_to_assign(tw, d, true)) {
+ mark(tw, d);
+ tw.loop_ids[d.id] = tw.in_loop;
+ d.fixed = function() {
+ return node;
+ };
+ d.fixed.assigns = [ node ];
+ if (!is_safe_lexical(d)) d.single_use = false;
+ } else {
+ d.fixed = false;
+ }
}
+ node.properties.filter(function(prop) {
+ if (prop.key instanceof AST_Node) prop.key.walk(tw);
+ return prop.value;
+ }).forEach(function(prop) {
+ if (prop.static) {
+ prop.value.walk(tw);
+ } else {
+ push(tw);
+ prop.value.walk(tw);
+ pop(tw);
+ }
+ });
return true;
});
def(AST_Conditional, function(tw) {
diff --git a/test/compress/classes.js b/test/compress/classes.js
index ab2652c8..dea0d5b0 100644
--- a/test/compress/classes.js
+++ b/test/compress/classes.js
@@ -747,3 +747,24 @@ issue_4687_2: {
expect_stdout: "PASS"
node_version: ">=4"
}
+
+issue_4705: {
+ options = {
+ evaluate: true,
+ reduce_vars: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ var a = "PASS";
+ class A {
+ p = a = "FAIL";
+ [console.log(a)];
+ }
+ }
+ expect: {
+ console.log("PASS");
+ }
+ expect_stdout: "PASS"
+ node_version: ">=12"
+}