diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-06-03 13:23:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-03 20:23:14 +0800 |
commit | 83f7887e5d2eb58b3fdbfc1d0d7dd92ce972a105 (patch) | |
tree | 19e4abb90f94290284264cdd7bee7b4bfd9cdfd2 | |
parent | dff7b48921cd90d23f05678c08e2065d9390b07b (diff) | |
download | tracifyjs-83f7887e5d2eb58b3fdbfc1d0d7dd92ce972a105.tar.gz tracifyjs-83f7887e5d2eb58b3fdbfc1d0d7dd92ce972a105.zip |
fix corner case in `unused` (#4993)
fixes #4992
-rw-r--r-- | lib/compress.js | 19 | ||||
-rw-r--r-- | test/compress/classes.js | 31 |
2 files changed, 33 insertions, 17 deletions
diff --git a/lib/compress.js b/lib/compress.js index b20a41e5..73cc2df5 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1029,12 +1029,12 @@ merge(Compressor.prototype, { if (prop.key instanceof AST_Node) prop.key.walk(tw); return prop.value; }).forEach(function(prop) { - if (prop.static && (prop.value instanceof AST_Lambda || !prop.value.contains_this())) { - prop.value.walk(tw); - } else { + if (!prop.static || prop instanceof AST_ClassField && prop.value.contains_this()) { push(tw); prop.value.walk(tw); pop(tw); + } else { + prop.value.walk(tw); } }); return true; @@ -6185,12 +6185,6 @@ merge(Compressor.prototype, { } return true; } - } else if (node instanceof AST_This && scope instanceof AST_DefClass) { - var def = scope.name.definition(); - if (!(def.id in in_use_ids)) { - in_use_ids[def.id] = true; - in_use.push(def); - } } return scan_ref_scoped(node, descend, true); }); @@ -7703,10 +7697,9 @@ merge(Compressor.prototype, { for (var i = 0; i < props.length; i++) { var prop = props[i]; if (prop.key instanceof AST_Node) exprs.push(prop.key); - if (prop instanceof AST_ClassField - && prop.static - && prop.value - && !(prop.value instanceof AST_Lambda)) { + if (prop.static && prop.value + && prop instanceof AST_ClassField + && prop.value.has_side_effects(compressor)) { if (prop.value.contains_this()) return this; values.push(prop.value); } diff --git a/test/compress/classes.js b/test/compress/classes.js index cbecf669..f9797022 100644 --- a/test/compress/classes.js +++ b/test/compress/classes.js @@ -973,9 +973,9 @@ issue_4681: { } expect: { console.log(function(a) { - class A { + (class { static p = a = this; - } + }); return typeof a; }()); } @@ -1399,9 +1399,9 @@ issue_4821_1: { } expect: { var a; - class A { + (class { static p = void (a = this); - } + }); console.log(typeof a); } expect_stdout: "function" @@ -1725,3 +1725,26 @@ issue_4982_2: { expect_stdout: "PASS" node_version: ">=12" } + +issue_4992: { + options = { + reduce_vars: true, + toplevel: true, + unused: true, + } + input: { + class A { + static P = this; + get p() {} + } + console.log(typeof A.P); + } + expect: { + console.log(typeof class { + static P = this; + get p() {} + }.P); + } + expect_stdout: "function" + node_version: ">=12" +} |