diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2020-09-02 18:41:10 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-03 01:41:10 +0800 |
commit | 375ebe316d8ff1a421c1cafc95d64e3377f7737b (patch) | |
tree | baa24cfb6cb1b5f6fef5765bda97eeca71a31389 | |
parent | 2500930234304c89d6b9a87cb95fe07d1a8bc6c5 (diff) | |
download | tracifyjs-375ebe316d8ff1a421c1cafc95d64e3377f7737b.tar.gz tracifyjs-375ebe316d8ff1a421c1cafc95d64e3377f7737b.zip |
enhance `join_vars` (#4089)
-rw-r--r-- | lib/compress.js | 8 | ||||
-rw-r--r-- | test/compress/join_vars.js | 4 | ||||
-rw-r--r-- | test/input/reduce/label.js | 10 | ||||
-rw-r--r-- | test/input/reduce/label.reduced.js | 15 | ||||
-rw-r--r-- | test/mocha/reduce.js | 3 |
5 files changed, 21 insertions, 19 deletions
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, |