From ba71bcc245c7594c42530074f953be3797f54b85 Mon Sep 17 00:00:00 2001 From: alexlamsl Date: Sun, 12 Dec 2021 22:45:15 +0800 Subject: [PATCH] improve `merge_vars` usability closes #5144 closes #5211 --- lib/compress.js | 6 +- test/compress/awaits.js | 14 +- test/compress/destructured.js | 10 +- test/compress/hoist_props.js | 8 +- test/compress/ie.js | 8 +- test/compress/merge_vars.js | 332 +++++++++++++++---------------- test/compress/optional-chains.js | 8 +- test/compress/rests.js | 18 +- test/compress/varify.js | 16 +- test/compress/yields.js | 14 +- 10 files changed, 219 insertions(+), 215 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index b5c67c2d..4ff0b1d0 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -6059,13 +6059,17 @@ Compressor.prototype.compress = function(node) { var orig = [], refs = []; tail_refs.forEach(function(sym) { sym.thedef = def; - sym.name = def.name; if (sym instanceof AST_SymbolRef) { refs.push(sym); } else { orig.push(sym); } }); + var name = tail.definition.name; + def.forEach(function(sym) { + sym.name = name; + }); + def.name = name; def.orig = orig.concat(def.orig); def.references = refs.concat(def.references); def.fixed = tail.definition.fixed && def.fixed; diff --git a/test/compress/awaits.js b/test/compress/awaits.js index 34479d48..36af41fd 100644 --- a/test/compress/awaits.js +++ b/test/compress/awaits.js @@ -1262,10 +1262,10 @@ issue_4454_2: { f("PASS"); } expect: { - function f(b) { - (async function(c = console.log(b)) {})(); - var b = 42..toString(); - console.log(b); + function f(a) { + (async function(c = console.log(a)) {})(); + var a = 42..toString(); + console.log(a); } f("PASS"); } @@ -1965,10 +1965,10 @@ issue_5032_normal: { console.log(value); return value; } - async function f(c) { - var b = log(c), c = b; + async function f(a) { + var b = log(a), a = b; log(b); - log(c); + log(a); } f("PASS"); } diff --git a/test/compress/destructured.js b/test/compress/destructured.js index 5acc7f69..81386e37 100644 --- a/test/compress/destructured.js +++ b/test/compress/destructured.js @@ -1844,13 +1844,13 @@ issue_4294: { expect: { A = "PASS"; (function() { - var b = function({ - [b]: {}, + var a = function({ + [a]: {}, }) {}({ - [b]: 0, + [a]: 0, }); - var b = A; - console.log(b); + var a = A; + console.log(a); })(); } expect_stdout: "PASS" diff --git a/test/compress/hoist_props.js b/test/compress/hoist_props.js index ab9a16f3..31c8439a 100644 --- a/test/compress/hoist_props.js +++ b/test/compress/hoist_props.js @@ -1163,13 +1163,13 @@ issue_5182: { log(o.p(42)); } expect: { - var o_p = console; - log = o_p.log; - o_p = function(a) { + var o = console; + log = o.log; + o = function(a) { console.log(a ? "PASS" : "FAIL"); return a; }; - log(o_p(42)); + log(o(42)); } expect_stdout: [ "PASS", diff --git a/test/compress/ie.js b/test/compress/ie.js index c275c88b..c4a78aeb 100644 --- a/test/compress/ie.js +++ b/test/compress/ie.js @@ -3109,9 +3109,9 @@ issue_5081_call: { })); } expect: { - function f(b) { + function f(a) { // IE5-10: TypeError: Function expected - return b(b = "A") + (b += "SS"); + return a(a = "A") + (a += "SS"); } console.log(f(function() { return "P"; @@ -3161,8 +3161,8 @@ issue_5081_property_access: { console.log(f({ A: "P" })); } expect: { - function f(b) { - return b[b = "A"] + (b += "SS"); + function f(a) { + return a[a = "A"] + (a += "SS"); } // IE9-11: undefinedASS console.log(f({ A: "P" })); diff --git a/test/compress/merge_vars.js b/test/compress/merge_vars.js index 9f89efe5..2fdb185d 100644 --- a/test/compress/merge_vars.js +++ b/test/compress/merge_vars.js @@ -19,11 +19,11 @@ merge: { expect: { var a = "foo"; console.log(a); - function f(c) { - var c; - console.log(c); - c = "bar"; - console.log(c); + function f(b) { + var b; + console.log(b); + b = "bar"; + console.log(b); } f("baz"); var d = "moo"; @@ -56,17 +56,17 @@ merge_toplevel: { console.log(d); } expect: { - var d = "foo"; - console.log(d); - function f(c) { - var c; - console.log(c); - c = "bar"; - console.log(c); + var a = "foo"; + console.log(a); + function f(b) { + var b; + console.log(b); + b = "bar"; + console.log(b); } f("baz"); - var d = "moo"; - console.log(d); + var a = "moo"; + console.log(a); } expect_stdout: [ "foo", @@ -94,16 +94,16 @@ segment: { console.log(d); } expect: { - var d = "foo"; - console.log(d); - for (var c, i = 0; i < 1; i++) { - var c = "bar"; - console.log(c); - c = "baz"; - console.log(c); + var a = "foo"; + console.log(a); + for (var b, i = 0; i < 1; i++) { + var b = "bar"; + console.log(b); + b = "baz"; + console.log(b); } - var d = "moo"; - console.log(d); + var a = "moo"; + console.log(a); } expect_stdout: [ "foo", @@ -344,9 +344,9 @@ issue_4107: { } expect: { (function() { - (function(a) { - a = console || a; - console.log(typeof a); + (function(c) { + c = console || c; + console.log(typeof c); })(); })(); console.log(typeof a); @@ -538,12 +538,12 @@ cross_branch_1_1: { expect: { var a; function f() { - var y, y; + var x, x; if (a) - y = "foo"; - console.log(y); - y = "bar"; - console.log(y); + x = "foo"; + console.log(x); + x = "bar"; + console.log(x); } a = 0; f(); @@ -581,13 +581,13 @@ cross_branch_1_2: { expect: { var a; function f() { - var y, y; + var x, x; if (a) { - y = "foo"; - console.log(y); + x = "foo"; + console.log(x); } - y = "bar"; - console.log(y); + x = "bar"; + console.log(x); } a = 0; f(); @@ -624,13 +624,13 @@ cross_branch_1_3: { expect: { var a; function f() { - var y, y; + var x, x; if (a) { - y = "foo"; - console.log(y); - y = "bar"; + x = "foo"; + console.log(x); + x = "bar"; } - console.log(y); + console.log(x); } a = 0; f(); @@ -666,12 +666,12 @@ cross_branch_1_4: { expect: { var a; function f() { - var y, y; - y = "foo"; + var x, x; + x = "foo"; if (a) - console.log(y); - y = "bar"; - console.log(y); + console.log(x); + x = "bar"; + console.log(x); } a = 0; f(); @@ -751,12 +751,12 @@ cross_branch_1_6: { expect: { var a; function f() { - var y, y; - y = "foo"; + var x, x; + x = "foo"; if (a) { - console.log(y); - y = "bar"; - console.log(y); + console.log(x); + x = "bar"; + console.log(x); } } a = 0; @@ -835,12 +835,12 @@ cross_branch_1_8: { expect: { var a; function f() { - var y, y; - y = "foo"; - console.log(y); + var x, x; + x = "foo"; + console.log(x); if (a) { - y = "bar"; - console.log(y); + x = "bar"; + console.log(x); } } a = 0; @@ -877,12 +877,12 @@ cross_branch_1_9: { expect: { var a; function f() { - var y, y; - y = "foo"; - console.log(y); - y = "bar"; + var x, x; + x = "foo"; + console.log(x); + x = "bar"; if (a) - console.log(y); + console.log(x); } a = 0; f(); @@ -924,14 +924,14 @@ cross_branch_2a_1: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) { if (b) - y = "foo"; - console.log(y); + x = "foo"; + console.log(x); } - y = "bar"; - console.log(y); + x = "bar"; + console.log(x); } a = 0, b = 0; f(); @@ -980,14 +980,14 @@ cross_branch_2a_2: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) { - y = "foo"; + x = "foo"; if (b) - console.log(y); + console.log(x); } - y = "bar"; - console.log(y); + x = "bar"; + console.log(x); } a = 0, b = 0; f(); @@ -1035,14 +1035,14 @@ cross_branch_2a_3: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) { if (b) - y = "foo"; - console.log(y); - y = "bar"; + x = "foo"; + console.log(x); + x = "bar"; } - console.log(y); + console.log(x); } a = 0, b = 0; f(); @@ -1092,15 +1092,15 @@ cross_branch_2a_4: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) { if (b) { - y = "foo"; - console.log(y); + x = "foo"; + console.log(x); } - y = "bar"; + x = "bar"; } - console.log(y); + console.log(x); } a = 0, b = 0; f(); @@ -1148,14 +1148,14 @@ cross_branch_2a_5: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) { - y = "foo"; + x = "foo"; if (b) - console.log(y); - y = "bar"; + console.log(x); + x = "bar"; } - console.log(y); + console.log(x); } a = 0, b = 0; f(); @@ -1427,13 +1427,13 @@ cross_branch_2a_10: { expect: { var a, b; function f() { - var y, y; - y = "foo"; + var x, x; + x = "foo"; if (a) { if (b) - console.log(y); - y = "bar"; - console.log(y); + console.log(x); + x = "bar"; + console.log(x); } } a = 0, b = 0; @@ -1590,13 +1590,13 @@ cross_branch_2a_13: { expect: { var a, b; function f() { - var y, y; - y = "foo"; + var x, x; + x = "foo"; if (a) { - console.log(y); + console.log(x); if (b) { - y = "bar"; - console.log(y); + x = "bar"; + console.log(x); } } } @@ -1644,13 +1644,13 @@ cross_branch_2a_14: { expect: { var a, b; function f() { - var y, y; - y = "foo"; + var x, x; + x = "foo"; if (a) { - console.log(y); - y = "bar"; + console.log(x); + x = "bar"; if (b) - console.log(y); + console.log(x); } } a = 0, b = 0; @@ -1753,13 +1753,13 @@ cross_branch_2a_16: { expect: { var a, b; function f() { - var y, y; - y = "foo"; - console.log(y); + var x, x; + x = "foo"; + console.log(x); if (a) { - y = "bar"; + x = "bar"; if (b) - console.log(y); + console.log(x); } } a = 0, b = 0; @@ -1807,13 +1807,13 @@ cross_branch_2b_1: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) - y = "foo"; + x = "foo"; if (b) - console.log(y); - y = "bar"; - console.log(y); + console.log(x); + x = "bar"; + console.log(x); } a = 0, b = 0; f(); @@ -1918,13 +1918,13 @@ cross_branch_2b_3: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) - y = "foo"; + x = "foo"; if (b) { - console.log(y); - y = "bar"; - console.log(y); + console.log(x); + x = "bar"; + console.log(x); } } a = 0, b = 0; @@ -2028,13 +2028,13 @@ cross_branch_2b_5: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) - y = "foo"; - console.log(y); + x = "foo"; + console.log(x); if (b) { - y = "bar"; - console.log(y); + x = "bar"; + console.log(x); } } a = 0, b = 0; @@ -2141,14 +2141,14 @@ cross_branch_2b_7: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) { - y = "foo"; - console.log(y); + x = "foo"; + console.log(x); } if (b) { - y = "bar"; - console.log(y); + x = "bar"; + console.log(x); } } a = 0, b = 0; @@ -2195,13 +2195,13 @@ cross_branch_2b_8: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) - y = "foo"; - console.log(y); - y = "bar"; + x = "foo"; + console.log(x); + x = "bar"; if (b) - console.log(y); + console.log(x); } a = 0, b = 0; f(); @@ -2250,14 +2250,14 @@ cross_branch_2b_9: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) { - y = "foo"; - console.log(y); + x = "foo"; + console.log(x); } - y = "bar"; + x = "bar"; if (b) - console.log(y); + console.log(x); } a = 0, b = 0; f(); @@ -2304,14 +2304,14 @@ cross_branch_2b_10: { expect: { var a, b; function f() { - var y, y; + var x, x; if (a) { - y = "foo"; - console.log(y); - y = "bar"; + x = "foo"; + console.log(x); + x = "bar"; } if (b) - console.log(y); + console.log(x); } a = 0, b = 0; f(); @@ -2412,13 +2412,13 @@ cross_branch_2b_12: { expect: { var a, b; function f() { - var y, y; - y = "foo"; + var x, x; + x = "foo"; if (a) - console.log(y); + console.log(x); if (b) { - y = "bar"; - console.log(y); + x = "bar"; + console.log(x); } } a = 0, b = 0; @@ -2465,13 +2465,13 @@ cross_branch_2b_13: { expect: { var a, b; function f() { - var y, y; - y = "foo"; + var x, x; + x = "foo"; if (a) - console.log(y); - y = "bar"; + console.log(x); + x = "bar"; if (b) - console.log(y); + console.log(x); } a = 0, b = 0; f(); @@ -2620,11 +2620,11 @@ issue_4126_1: { try { console.log("PASS"); } catch (e) { - var c = a; + var b = a; } finally { - var c = c; + var b = b; } - console.log(c); + console.log(b); } f("FAIL"); } @@ -2816,11 +2816,11 @@ conditional_write: { console.log(b); } expect: { - var b = "FAIL", b; + var a = "FAIL", a; if (console) - b = "PASS"; - b = [b, 42].join(); - console.log(b); + a = "PASS"; + a = [a, 42].join(); + console.log(a); } expect_stdout: "PASS,42" } @@ -2994,13 +2994,13 @@ issue_4168_use_strict: { expect: { "use strict"; var o = { - f: function(d, e, f) { - var d = d.d; - var e = e.e; - var f = f.f; + f: function(a, b, c) { + var a = a.d; + var b = b.e; + var c = c.f; this.g(arguments); - if (d) - console.log(e, f); + if (a) + console.log(b, c); }, g: function(args) { console.log(args[0], args[1], args[2]); @@ -3228,10 +3228,10 @@ issue_4653: { f(a++ + (b = b), b |= console.log(a)); } expect: { - var b = 1; + var a = 1; (function(c, d) { c || console.log(d); - })(+b + (b = void 0), b |= console.log(2)); + })(+a + (a = void 0), a |= console.log(2)); } expect_stdout: [ "2", diff --git a/test/compress/optional-chains.js b/test/compress/optional-chains.js index 8d16fdac..2cea8648 100644 --- a/test/compress/optional-chains.js +++ b/test/compress/optional-chains.js @@ -455,11 +455,11 @@ issue_5091: { console.log(f("FAIL 1") || "PASS"); } expect: { - function f(b) { - var b = b.p; + function f(a) { + var a = a.p; var c; - b?.[c = "FAIL 2"]; - return b || c; + a?.[c = "FAIL 2"]; + return a || c; } console.log(f("FAIL 1") || "PASS"); } diff --git a/test/compress/rests.js b/test/compress/rests.js index f377f637..8f032c67 100644 --- a/test/compress/rests.js +++ b/test/compress/rests.js @@ -436,9 +436,9 @@ merge_funarg: { })(); } expect: { - (function(...b) { - var b = b.length; - console.log(b); + (function(...a) { + var a = a.length; + console.log(a); })(); } expect_stdout: "0" @@ -456,9 +456,9 @@ merge_funarg_destructured_array: { })([]); } expect: { - (function([ ...b ]) { - var b = b.length; - console.log(b); + (function([ ...a ]) { + var a = a.length; + console.log(a); })([]); } expect_stdout: "0" @@ -476,9 +476,9 @@ merge_funarg_destructured_object: { })([ "PASS" ]); } expect: { - (function({ ...b }) { - var b = b[0]; - console.log(b); + (function({ ...a }) { + var a = a[0]; + console.log(a); })([ "PASS" ]); } expect_stdout: "PASS" diff --git a/test/compress/varify.js b/test/compress/varify.js index 4a90a955..0bc9ada2 100644 --- a/test/compress/varify.js +++ b/test/compress/varify.js @@ -13,10 +13,10 @@ reduce_merge_const: { console.log(b); } expect: { - var b = console; - console.log(typeof b); - b = typeof b; - console.log(b); + var a = console; + console.log(typeof a); + a = typeof a; + console.log(a); } expect_stdout: [ "object", @@ -41,10 +41,10 @@ reduce_merge_let: { } expect: { "use strict"; - var b = console; - console.log(typeof b); - b = typeof b; - console.log(b); + var a = console; + console.log(typeof a); + a = typeof a; + console.log(a); } expect_stdout: [ "object", diff --git a/test/compress/yields.js b/test/compress/yields.js index f0ffded3..7e28905e 100644 --- a/test/compress/yields.js +++ b/test/compress/yields.js @@ -864,10 +864,10 @@ issue_4454_2: { f("PASS"); } expect: { - function f(b) { - (function*(c = console.log(b)) {})(); - var b = 42..toString(); - console.log(b); + function f(a) { + (function*(c = console.log(a)) {})(); + var a = 42..toString(); + console.log(a); } f("PASS"); } @@ -1177,10 +1177,10 @@ issue_5032_normal: { console.log(value); return value; } - function *f(c) { - var b = log(c), c = b; + function *f(a) { + var b = log(a), a = b; log(b); - log(c); + log(a); } f("PASS").next(); }