From: Alex Lam S.L Date: Wed, 2 Sep 2020 17:41:10 +0000 (+0100) Subject: enhance `join_vars` (#4089) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=375ebe316d8ff1a421c1cafc95d64e3377f7737b;p=UglifyJS.git enhance `join_vars` (#4089) --- diff --git a/lib/compress.js b/lib/compress.js index 6761c246..9aa70ef9 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2644,6 +2644,14 @@ merge(Compressor.prototype, { defs = stat.init; } } else if (stat instanceof AST_ForIn) { + if (defs && defs.TYPE == stat.init.TYPE) { + defs.definitions = defs.definitions.concat(stat.init.definitions); + var name = stat.init.definitions[0].name; + var ref = make_node(AST_SymbolRef, name, name); + name.definition().references.push(ref); + stat.init = ref; + CHANGED = true; + } stat.object = join_assigns_expr(stat.object); } else if (stat instanceof AST_If) { stat.condition = join_assigns_expr(stat.condition); diff --git a/test/compress/join_vars.js b/test/compress/join_vars.js index 9f0b35b7..c2c8e1e4 100644 --- a/test/compress/join_vars.js +++ b/test/compress/join_vars.js @@ -277,8 +277,8 @@ join_object_assignments_forin: { } expect: { console.log(function() { - var o = { a: "PASS" }; - for (var a in o) + var o = { a: "PASS" }, a; + for (a in o) return o[a]; }()); } diff --git a/test/input/reduce/label.js b/test/input/reduce/label.js index aee57a40..5b0f0593 100644 --- a/test/input/reduce/label.js +++ b/test/input/reduce/label.js @@ -1,9 +1,3 @@ -var o = this; - -for (var k in o) L17060: { - a++; +UNUSED: { + console.log(0 - .1 - .1 - .1); } - -var a; - -console.log(k); diff --git a/test/input/reduce/label.reduced.js b/test/input/reduce/label.reduced.js index a1e79507..ba4b56c9 100644 --- a/test/input/reduce/label.reduced.js +++ b/test/input/reduce/label.reduced.js @@ -1,15 +1,12 @@ // (beautified) -var o = this; - -for (var k in o) {} - -var a; - -console.log(k); -// output: a +console.log(0 - 1 - .1 - .1); +// output: -1.2000000000000002 // -// minify: k +// minify: -1.2 // // options: { +// "compress": { +// "unsafe_math": true +// }, // "mangle": false // } \ No newline at end of file diff --git a/test/mocha/reduce.js b/test/mocha/reduce.js index c1864735..7e2d4601 100644 --- a/test/mocha/reduce.js +++ b/test/mocha/reduce.js @@ -24,6 +24,9 @@ describe("test/reduce.js", function() { }); it("Should eliminate unreferenced labels", function() { var result = reduce_test(read("test/input/reduce/label.js"), { + compress: { + unsafe_math: true, + }, mangle: false, }, { verbose: false,