From: Alex Lam S.L Date: Mon, 16 Nov 2020 18:06:00 +0000 (+0000) Subject: fix corner case in `unused` (#4277) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=42e34c870ad5979135ab7407ab62abce9507fc28;p=UglifyJS.git fix corner case in `unused` (#4277) fixes #4276 --- 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" +}