fix corner case in unused (#4277)

fixes #4276
This commit is contained in:
Alex Lam S.L
2020-11-16 18:06:00 +00:00
committed by GitHub
parent e390e7e124
commit 42e34c870a
2 changed files with 68 additions and 5 deletions

View File

@@ -5032,7 +5032,7 @@ merge(Compressor.prototype, {
} }
} }
var old_def, var_defs = var_defs_by_id.get(sym.id); 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) { if (var_defs.length > 1) {
AST_Node.info("Dropping declaration of variable {name} [{file}:{line},{col}]", template(def.name)); AST_Node.info("Dropping declaration of variable {name} [{file}:{line},{col}]", template(def.name));
remove(var_defs, def); remove(var_defs, def);
@@ -5071,13 +5071,18 @@ merge(Compressor.prototype, {
duplicated++; duplicated++;
} }
if (side_effects.length > 0) { if (side_effects.length > 0) {
if (tail.length > 0) { if (tail.length == 0) {
side_effects.push(def.value);
def.value = make_sequence(def.value, side_effects);
} else {
body.push(make_node(AST_SimpleStatement, node, { body.push(make_node(AST_SimpleStatement, node, {
body: make_sequence(node, side_effects) 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 = []; side_effects = [];
} }

View File

@@ -1006,3 +1006,61 @@ issue_4274_2: {
expect_stdout: "PASS" expect_stdout: "PASS"
node_version: ">=4" 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"
}