improve merge_vars usability

closes #5144
closes #5211
This commit is contained in:
alexlamsl 2021-12-12 22:45:15 +08:00
parent 07f35ea2c9
commit ba71bcc245
10 changed files with 219 additions and 215 deletions

View File

@ -6059,13 +6059,17 @@ Compressor.prototype.compress = function(node) {
var orig = [], refs = []; var orig = [], refs = [];
tail_refs.forEach(function(sym) { tail_refs.forEach(function(sym) {
sym.thedef = def; sym.thedef = def;
sym.name = def.name;
if (sym instanceof AST_SymbolRef) { if (sym instanceof AST_SymbolRef) {
refs.push(sym); refs.push(sym);
} else { } else {
orig.push(sym); 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.orig = orig.concat(def.orig);
def.references = refs.concat(def.references); def.references = refs.concat(def.references);
def.fixed = tail.definition.fixed && def.fixed; def.fixed = tail.definition.fixed && def.fixed;

View File

@ -1262,10 +1262,10 @@ issue_4454_2: {
f("PASS"); f("PASS");
} }
expect: { expect: {
function f(b) { function f(a) {
(async function(c = console.log(b)) {})(); (async function(c = console.log(a)) {})();
var b = 42..toString(); var a = 42..toString();
console.log(b); console.log(a);
} }
f("PASS"); f("PASS");
} }
@ -1965,10 +1965,10 @@ issue_5032_normal: {
console.log(value); console.log(value);
return value; return value;
} }
async function f(c) { async function f(a) {
var b = log(c), c = b; var b = log(a), a = b;
log(b); log(b);
log(c); log(a);
} }
f("PASS"); f("PASS");
} }

View File

@ -1844,13 +1844,13 @@ issue_4294: {
expect: { expect: {
A = "PASS"; A = "PASS";
(function() { (function() {
var b = function({ var a = function({
[b]: {}, [a]: {},
}) {}({ }) {}({
[b]: 0, [a]: 0,
}); });
var b = A; var a = A;
console.log(b); console.log(a);
})(); })();
} }
expect_stdout: "PASS" expect_stdout: "PASS"

View File

@ -1163,13 +1163,13 @@ issue_5182: {
log(o.p(42)); log(o.p(42));
} }
expect: { expect: {
var o_p = console; var o = console;
log = o_p.log; log = o.log;
o_p = function(a) { o = function(a) {
console.log(a ? "PASS" : "FAIL"); console.log(a ? "PASS" : "FAIL");
return a; return a;
}; };
log(o_p(42)); log(o(42));
} }
expect_stdout: [ expect_stdout: [
"PASS", "PASS",

View File

@ -3109,9 +3109,9 @@ issue_5081_call: {
})); }));
} }
expect: { expect: {
function f(b) { function f(a) {
// IE5-10: TypeError: Function expected // IE5-10: TypeError: Function expected
return b(b = "A") + (b += "SS"); return a(a = "A") + (a += "SS");
} }
console.log(f(function() { console.log(f(function() {
return "P"; return "P";
@ -3161,8 +3161,8 @@ issue_5081_property_access: {
console.log(f({ A: "P" })); console.log(f({ A: "P" }));
} }
expect: { expect: {
function f(b) { function f(a) {
return b[b = "A"] + (b += "SS"); return a[a = "A"] + (a += "SS");
} }
// IE9-11: undefinedASS // IE9-11: undefinedASS
console.log(f({ A: "P" })); console.log(f({ A: "P" }));

View File

@ -19,11 +19,11 @@ merge: {
expect: { expect: {
var a = "foo"; var a = "foo";
console.log(a); console.log(a);
function f(c) { function f(b) {
var c; var b;
console.log(c); console.log(b);
c = "bar"; b = "bar";
console.log(c); console.log(b);
} }
f("baz"); f("baz");
var d = "moo"; var d = "moo";
@ -56,17 +56,17 @@ merge_toplevel: {
console.log(d); console.log(d);
} }
expect: { expect: {
var d = "foo"; var a = "foo";
console.log(d); console.log(a);
function f(c) { function f(b) {
var c; var b;
console.log(c); console.log(b);
c = "bar"; b = "bar";
console.log(c); console.log(b);
} }
f("baz"); f("baz");
var d = "moo"; var a = "moo";
console.log(d); console.log(a);
} }
expect_stdout: [ expect_stdout: [
"foo", "foo",
@ -94,16 +94,16 @@ segment: {
console.log(d); console.log(d);
} }
expect: { expect: {
var d = "foo"; var a = "foo";
console.log(d); console.log(a);
for (var c, i = 0; i < 1; i++) { for (var b, i = 0; i < 1; i++) {
var c = "bar"; var b = "bar";
console.log(c); console.log(b);
c = "baz"; b = "baz";
console.log(c); console.log(b);
} }
var d = "moo"; var a = "moo";
console.log(d); console.log(a);
} }
expect_stdout: [ expect_stdout: [
"foo", "foo",
@ -344,9 +344,9 @@ issue_4107: {
} }
expect: { expect: {
(function() { (function() {
(function(a) { (function(c) {
a = console || a; c = console || c;
console.log(typeof a); console.log(typeof c);
})(); })();
})(); })();
console.log(typeof a); console.log(typeof a);
@ -538,12 +538,12 @@ cross_branch_1_1: {
expect: { expect: {
var a; var a;
function f() { function f() {
var y, y; var x, x;
if (a) if (a)
y = "foo"; x = "foo";
console.log(y); console.log(x);
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
a = 0; a = 0;
f(); f();
@ -581,13 +581,13 @@ cross_branch_1_2: {
expect: { expect: {
var a; var a;
function f() { function f() {
var y, y; var x, x;
if (a) { if (a) {
y = "foo"; x = "foo";
console.log(y); console.log(x);
} }
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
a = 0; a = 0;
f(); f();
@ -624,13 +624,13 @@ cross_branch_1_3: {
expect: { expect: {
var a; var a;
function f() { function f() {
var y, y; var x, x;
if (a) { if (a) {
y = "foo"; x = "foo";
console.log(y); console.log(x);
y = "bar"; x = "bar";
} }
console.log(y); console.log(x);
} }
a = 0; a = 0;
f(); f();
@ -666,12 +666,12 @@ cross_branch_1_4: {
expect: { expect: {
var a; var a;
function f() { function f() {
var y, y; var x, x;
y = "foo"; x = "foo";
if (a) if (a)
console.log(y); console.log(x);
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
a = 0; a = 0;
f(); f();
@ -751,12 +751,12 @@ cross_branch_1_6: {
expect: { expect: {
var a; var a;
function f() { function f() {
var y, y; var x, x;
y = "foo"; x = "foo";
if (a) { if (a) {
console.log(y); console.log(x);
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
} }
a = 0; a = 0;
@ -835,12 +835,12 @@ cross_branch_1_8: {
expect: { expect: {
var a; var a;
function f() { function f() {
var y, y; var x, x;
y = "foo"; x = "foo";
console.log(y); console.log(x);
if (a) { if (a) {
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
} }
a = 0; a = 0;
@ -877,12 +877,12 @@ cross_branch_1_9: {
expect: { expect: {
var a; var a;
function f() { function f() {
var y, y; var x, x;
y = "foo"; x = "foo";
console.log(y); console.log(x);
y = "bar"; x = "bar";
if (a) if (a)
console.log(y); console.log(x);
} }
a = 0; a = 0;
f(); f();
@ -924,14 +924,14 @@ cross_branch_2a_1: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) { if (a) {
if (b) if (b)
y = "foo"; x = "foo";
console.log(y); console.log(x);
} }
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
a = 0, b = 0; a = 0, b = 0;
f(); f();
@ -980,14 +980,14 @@ cross_branch_2a_2: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) { if (a) {
y = "foo"; x = "foo";
if (b) if (b)
console.log(y); console.log(x);
} }
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
a = 0, b = 0; a = 0, b = 0;
f(); f();
@ -1035,14 +1035,14 @@ cross_branch_2a_3: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) { if (a) {
if (b) if (b)
y = "foo"; x = "foo";
console.log(y); console.log(x);
y = "bar"; x = "bar";
} }
console.log(y); console.log(x);
} }
a = 0, b = 0; a = 0, b = 0;
f(); f();
@ -1092,15 +1092,15 @@ cross_branch_2a_4: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) { if (a) {
if (b) { if (b) {
y = "foo"; x = "foo";
console.log(y); console.log(x);
} }
y = "bar"; x = "bar";
} }
console.log(y); console.log(x);
} }
a = 0, b = 0; a = 0, b = 0;
f(); f();
@ -1148,14 +1148,14 @@ cross_branch_2a_5: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) { if (a) {
y = "foo"; x = "foo";
if (b) if (b)
console.log(y); console.log(x);
y = "bar"; x = "bar";
} }
console.log(y); console.log(x);
} }
a = 0, b = 0; a = 0, b = 0;
f(); f();
@ -1427,13 +1427,13 @@ cross_branch_2a_10: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
y = "foo"; x = "foo";
if (a) { if (a) {
if (b) if (b)
console.log(y); console.log(x);
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
} }
a = 0, b = 0; a = 0, b = 0;
@ -1590,13 +1590,13 @@ cross_branch_2a_13: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
y = "foo"; x = "foo";
if (a) { if (a) {
console.log(y); console.log(x);
if (b) { if (b) {
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
} }
} }
@ -1644,13 +1644,13 @@ cross_branch_2a_14: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
y = "foo"; x = "foo";
if (a) { if (a) {
console.log(y); console.log(x);
y = "bar"; x = "bar";
if (b) if (b)
console.log(y); console.log(x);
} }
} }
a = 0, b = 0; a = 0, b = 0;
@ -1753,13 +1753,13 @@ cross_branch_2a_16: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
y = "foo"; x = "foo";
console.log(y); console.log(x);
if (a) { if (a) {
y = "bar"; x = "bar";
if (b) if (b)
console.log(y); console.log(x);
} }
} }
a = 0, b = 0; a = 0, b = 0;
@ -1807,13 +1807,13 @@ cross_branch_2b_1: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) if (a)
y = "foo"; x = "foo";
if (b) if (b)
console.log(y); console.log(x);
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
a = 0, b = 0; a = 0, b = 0;
f(); f();
@ -1918,13 +1918,13 @@ cross_branch_2b_3: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) if (a)
y = "foo"; x = "foo";
if (b) { if (b) {
console.log(y); console.log(x);
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
} }
a = 0, b = 0; a = 0, b = 0;
@ -2028,13 +2028,13 @@ cross_branch_2b_5: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) if (a)
y = "foo"; x = "foo";
console.log(y); console.log(x);
if (b) { if (b) {
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
} }
a = 0, b = 0; a = 0, b = 0;
@ -2141,14 +2141,14 @@ cross_branch_2b_7: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) { if (a) {
y = "foo"; x = "foo";
console.log(y); console.log(x);
} }
if (b) { if (b) {
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
} }
a = 0, b = 0; a = 0, b = 0;
@ -2195,13 +2195,13 @@ cross_branch_2b_8: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) if (a)
y = "foo"; x = "foo";
console.log(y); console.log(x);
y = "bar"; x = "bar";
if (b) if (b)
console.log(y); console.log(x);
} }
a = 0, b = 0; a = 0, b = 0;
f(); f();
@ -2250,14 +2250,14 @@ cross_branch_2b_9: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) { if (a) {
y = "foo"; x = "foo";
console.log(y); console.log(x);
} }
y = "bar"; x = "bar";
if (b) if (b)
console.log(y); console.log(x);
} }
a = 0, b = 0; a = 0, b = 0;
f(); f();
@ -2304,14 +2304,14 @@ cross_branch_2b_10: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
if (a) { if (a) {
y = "foo"; x = "foo";
console.log(y); console.log(x);
y = "bar"; x = "bar";
} }
if (b) if (b)
console.log(y); console.log(x);
} }
a = 0, b = 0; a = 0, b = 0;
f(); f();
@ -2412,13 +2412,13 @@ cross_branch_2b_12: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
y = "foo"; x = "foo";
if (a) if (a)
console.log(y); console.log(x);
if (b) { if (b) {
y = "bar"; x = "bar";
console.log(y); console.log(x);
} }
} }
a = 0, b = 0; a = 0, b = 0;
@ -2465,13 +2465,13 @@ cross_branch_2b_13: {
expect: { expect: {
var a, b; var a, b;
function f() { function f() {
var y, y; var x, x;
y = "foo"; x = "foo";
if (a) if (a)
console.log(y); console.log(x);
y = "bar"; x = "bar";
if (b) if (b)
console.log(y); console.log(x);
} }
a = 0, b = 0; a = 0, b = 0;
f(); f();
@ -2620,11 +2620,11 @@ issue_4126_1: {
try { try {
console.log("PASS"); console.log("PASS");
} catch (e) { } catch (e) {
var c = a; var b = a;
} finally { } finally {
var c = c; var b = b;
} }
console.log(c); console.log(b);
} }
f("FAIL"); f("FAIL");
} }
@ -2816,11 +2816,11 @@ conditional_write: {
console.log(b); console.log(b);
} }
expect: { expect: {
var b = "FAIL", b; var a = "FAIL", a;
if (console) if (console)
b = "PASS"; a = "PASS";
b = [b, 42].join(); a = [a, 42].join();
console.log(b); console.log(a);
} }
expect_stdout: "PASS,42" expect_stdout: "PASS,42"
} }
@ -2994,13 +2994,13 @@ issue_4168_use_strict: {
expect: { expect: {
"use strict"; "use strict";
var o = { var o = {
f: function(d, e, f) { f: function(a, b, c) {
var d = d.d; var a = a.d;
var e = e.e; var b = b.e;
var f = f.f; var c = c.f;
this.g(arguments); this.g(arguments);
if (d) if (a)
console.log(e, f); console.log(b, c);
}, },
g: function(args) { g: function(args) {
console.log(args[0], args[1], args[2]); console.log(args[0], args[1], args[2]);
@ -3228,10 +3228,10 @@ issue_4653: {
f(a++ + (b = b), b |= console.log(a)); f(a++ + (b = b), b |= console.log(a));
} }
expect: { expect: {
var b = 1; var a = 1;
(function(c, d) { (function(c, d) {
c || console.log(d); c || console.log(d);
})(+b + (b = void 0), b |= console.log(2)); })(+a + (a = void 0), a |= console.log(2));
} }
expect_stdout: [ expect_stdout: [
"2", "2",

View File

@ -455,11 +455,11 @@ issue_5091: {
console.log(f("FAIL 1") || "PASS"); console.log(f("FAIL 1") || "PASS");
} }
expect: { expect: {
function f(b) { function f(a) {
var b = b.p; var a = a.p;
var c; var c;
b?.[c = "FAIL 2"]; a?.[c = "FAIL 2"];
return b || c; return a || c;
} }
console.log(f("FAIL 1") || "PASS"); console.log(f("FAIL 1") || "PASS");
} }

View File

@ -436,9 +436,9 @@ merge_funarg: {
})(); })();
} }
expect: { expect: {
(function(...b) { (function(...a) {
var b = b.length; var a = a.length;
console.log(b); console.log(a);
})(); })();
} }
expect_stdout: "0" expect_stdout: "0"
@ -456,9 +456,9 @@ merge_funarg_destructured_array: {
})([]); })([]);
} }
expect: { expect: {
(function([ ...b ]) { (function([ ...a ]) {
var b = b.length; var a = a.length;
console.log(b); console.log(a);
})([]); })([]);
} }
expect_stdout: "0" expect_stdout: "0"
@ -476,9 +476,9 @@ merge_funarg_destructured_object: {
})([ "PASS" ]); })([ "PASS" ]);
} }
expect: { expect: {
(function({ ...b }) { (function({ ...a }) {
var b = b[0]; var a = a[0];
console.log(b); console.log(a);
})([ "PASS" ]); })([ "PASS" ]);
} }
expect_stdout: "PASS" expect_stdout: "PASS"

View File

@ -13,10 +13,10 @@ reduce_merge_const: {
console.log(b); console.log(b);
} }
expect: { expect: {
var b = console; var a = console;
console.log(typeof b); console.log(typeof a);
b = typeof b; a = typeof a;
console.log(b); console.log(a);
} }
expect_stdout: [ expect_stdout: [
"object", "object",
@ -41,10 +41,10 @@ reduce_merge_let: {
} }
expect: { expect: {
"use strict"; "use strict";
var b = console; var a = console;
console.log(typeof b); console.log(typeof a);
b = typeof b; a = typeof a;
console.log(b); console.log(a);
} }
expect_stdout: [ expect_stdout: [
"object", "object",

View File

@ -864,10 +864,10 @@ issue_4454_2: {
f("PASS"); f("PASS");
} }
expect: { expect: {
function f(b) { function f(a) {
(function*(c = console.log(b)) {})(); (function*(c = console.log(a)) {})();
var b = 42..toString(); var a = 42..toString();
console.log(b); console.log(a);
} }
f("PASS"); f("PASS");
} }
@ -1177,10 +1177,10 @@ issue_5032_normal: {
console.log(value); console.log(value);
return value; return value;
} }
function *f(c) { function *f(a) {
var b = log(c), c = b; var b = log(a), a = b;
log(b); log(b);
log(c); log(a);
} }
f("PASS").next(); f("PASS").next();
} }