aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2020-11-16 18:06:00 +0000
committerGitHub <noreply@github.com>2020-11-17 02:06:00 +0800
commit42e34c870ad5979135ab7407ab62abce9507fc28 (patch)
tree2465b3c694049962454944d6d7d35aea7bb82805
parente390e7e12467ec1dd204245212aea9f811763439 (diff)
downloadtracifyjs-42e34c870ad5979135ab7407ab62abce9507fc28.tar.gz
tracifyjs-42e34c870ad5979135ab7407ab62abce9507fc28.zip
fix corner case in `unused` (#4277)
fixes #4276
-rw-r--r--lib/compress.js15
-rw-r--r--test/compress/let.js58
2 files changed, 68 insertions, 5 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 97252f7f..9eb4a9e8 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -5032,7 +5032,7 @@ merge(Compressor.prototype, {
}
}
var old_def, var_defs = var_defs_by_id.get(sym.id);
- if (!def.value) {
+ if (!def.value && !(node instanceof AST_Let)) {
if (var_defs.length > 1) {
AST_Node.info("Dropping declaration of variable {name} [{file}:{line},{col}]", template(def.name));
remove(var_defs, def);
@@ -5071,13 +5071,18 @@ merge(Compressor.prototype, {
duplicated++;
}
if (side_effects.length > 0) {
- if (tail.length > 0) {
- side_effects.push(def.value);
- def.value = make_sequence(def.value, side_effects);
- } else {
+ if (tail.length == 0) {
body.push(make_node(AST_SimpleStatement, node, {
body: make_sequence(node, side_effects)
}));
+ } else if (def.value) {
+ side_effects.push(def.value);
+ def.value = make_sequence(def.value, side_effects);
+ } else {
+ def.value = make_node(AST_UnaryPrefix, def, {
+ operator: "void",
+ expression: make_sequence(def, side_effects)
+ });
}
side_effects = [];
}
diff --git a/test/compress/let.js b/test/compress/let.js
index 728e40b4..20bec4d3 100644
--- a/test/compress/let.js
+++ b/test/compress/let.js
@@ -1006,3 +1006,61 @@ issue_4274_2: {
expect_stdout: "PASS"
node_version: ">=4"
}
+
+issue_4276_1: {
+ options = {
+ unused: true,
+ }
+ input: {
+ "use strict";
+ try {
+ let a = b, b;
+ console.log("FAIL");
+ } catch (e) {
+ console.log("PASS");
+ }
+ }
+ expect: {
+ "use strict";
+ try {
+ let a = b, b;
+ console.log("FAIL");
+ } catch (e) {
+ console.log("PASS");
+ }
+ }
+ expect_stdout: "PASS"
+ node_version: ">=4"
+}
+
+issue_4276_2: {
+ options = {
+ unused: true,
+ }
+ input: {
+ "use strict";
+ try {
+ let a = f(), b;
+ console.log("FAIL");
+ function f() {
+ return b;
+ }
+ } catch (e) {
+ console.log("PASS");
+ }
+ }
+ expect: {
+ "use strict";
+ try {
+ let a = f(), b;
+ console.log("FAIL");
+ function f() {
+ return b;
+ }
+ } catch (e) {
+ console.log("PASS");
+ }
+ }
+ expect_stdout: "PASS"
+ node_version: ">=4"
+}