enhance reduce_vars (#3942)

This commit is contained in:
Alex Lam S.L
2020-06-01 13:55:23 +01:00
committed by GitHub
parent 06ba4e2ce8
commit b24eb22c6b
7 changed files with 260 additions and 192 deletions

View File

@@ -3001,8 +3001,6 @@ issue_2298: {
expect: {
!function() {
(function() {
var a = undefined;
var undefined = a++;
try {
!function(b) {
(void 0)[1] = "foo";
@@ -3836,20 +3834,19 @@ issue_2436_3: {
}(o));
}
expect: {
var o = {
a: 1,
b: 2,
};
console.log(function(c) {
o = {
({
a: 3,
b: 4,
};
});
return {
x: c.a,
y: c.b,
};
}(o));
}({
a: 1,
b: 2,
}));
}
expect_stdout: true
}
@@ -4071,16 +4068,15 @@ issue_2436_10: {
}(o).join(" "));
}
expect: {
var o = {
a: 1,
b: 2,
};
function f(n) {
o = { b: 3 };
({ b: 3 });
return n;
}
console.log([
(c = o).a,
(c = {
a: 1,
b: 2,
}).a,
f(c.b),
c.b,
].join(" "));

View File

@@ -1729,7 +1729,7 @@ chained_3: {
}
expect: {
console.log(function(a, b) {
var c = b;
var c = 2;
b++;
return c;
}(0, 2));
@@ -2557,7 +2557,7 @@ issue_3899: {
console.log(typeof a);
}
expect: {
++a;
0;
var a = function() {
return 2;
};
@@ -2565,3 +2565,63 @@ issue_3899: {
}
expect_stdout: "function"
}
cross_scope_assign_chain: {
options = {
reduce_vars: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
var a, b = 0;
(function() {
a = b;
a++;
while (b++);
})();
console.log(a ? "PASS" : "FAIL");
}
expect: {
var a, b = 0;
(function() {
a = b;
a++;
while (b++);
})();
console.log(a ? "PASS" : "FAIL");
}
expect_stdout: "PASS"
}
assign_if_assign_read: {
options = {
reduce_vars: true,
unused: true,
}
input: {
(function(a) {
var b;
do {
b = "FAIL";
if (Array.isArray(a)) {
b = a[0];
console.log(b);
}
} while (!console);
})([ "PASS" ]);
}
expect: {
(function(a) {
var b;
do {
"FAIL";
if (Array.isArray(a)) {
b = a[0];
console.log(b);
}
} while (!console);
})([ "PASS" ]);
}
expect_stdout: "PASS"
}

View File

@@ -2412,9 +2412,9 @@ issue_3887: {
expect: {
(function(b) {
try {
b-- && console.log("PASS");
1, console.log("PASS");
} catch (a_2) {}
})(1);
})();
}
expect_stdout: "PASS"
}
@@ -2478,10 +2478,10 @@ issue_3920: {
console.log(a);
}
expect: {
var a = function(b) {
return (b[b = 0] = 0) >= (b ? 0 : 1);
}("foo");
console.log(a);
(function(b) {
"foo"[0] = 0;
})();
console.log(false);
}
expect_stdout: "false"
}

View File

@@ -2336,6 +2336,7 @@ issue_3274: {
inline: true,
join_vars: true,
loops: true,
passes: 2,
reduce_vars: true,
unused: true,
}

View File

@@ -306,8 +306,6 @@ issue_2298: {
expect: {
!function() {
(function() {
var a = undefined;
var undefined = a++;
try {
!function() {
(void 0)[1] = "foo";

View File

@@ -905,7 +905,7 @@ use_before_var: {
}
expect: {
function f(){
console.log(t);
console.log(void 0);
var t = 1;
}
}
@@ -981,12 +981,12 @@ inner_var_for_1: {
expect: {
function f() {
var a = 1;
x(1, b, d);
for (var b = 2, c = 3; x(1, b, 3, d); x(1, b, 3, d)) {
x(1, void 0, d);
for (var b = 2, c = 3; x(1, 2, 3, d); x(1, 2, 3, d)) {
var d = 4, e = 5;
x(1, b, 3, d, e);
x(1, 2, 3, d, e);
}
x(1, b, 3, d, e);
x(1, 2, 3, d, e);
}
}
}
@@ -1521,9 +1521,7 @@ func_inline: {
expect: {
function f() {
console.log(1 + h());
var h = function() {
return 2;
};
var h;
}
}
}
@@ -2372,8 +2370,7 @@ delay_def: {
return;
}
function g() {
return a;
var a = 1;
return;
}
console.log(f(), g());
}
@@ -2395,7 +2392,7 @@ delay_def_lhs: {
expect: {
console.log(function() {
long_name++;
return long_name;
return NaN;
var long_name;
}());
}
@@ -2651,11 +2648,9 @@ var_assign_5: {
}
expect: {
!function() {
var a;
!function(b) {
a = 2,
console.log(a, b);
}(a);
console.log(2, void 0);
}();
}();
}
expect_stdout: "2 undefined"
@@ -4725,7 +4720,7 @@ escape_conditional: {
function bar() {}
(function() {
var thing = baz();
if (thing !== (thing = baz()))
if (thing !== baz())
console.log("FAIL");
else
console.log("PASS");
@@ -4763,7 +4758,7 @@ escape_sequence: {
function bar() {}
(function() {
var thing = baz();
if (thing !== (thing = baz()))
if (thing !== baz())
console.log("FAIL");
else
console.log("PASS");
@@ -4808,7 +4803,7 @@ escape_throw: {
function foo() {}
(function() {
var thing = baz();
if (thing !== (thing = baz()))
if (thing !== baz())
console.log("FAIL");
else
console.log("PASS");
@@ -4845,7 +4840,7 @@ escape_local_conditional: {
}
(function() {
var thing = baz();
if (thing !== (thing = baz()))
if (thing !== baz())
console.log("PASS");
else
console.log("FAIL");
@@ -4882,7 +4877,7 @@ escape_local_sequence: {
}
(function() {
var thing = baz();
if (thing !== (thing = baz()))
if (thing !== baz())
console.log("PASS");
else
console.log("FAIL");
@@ -4926,7 +4921,7 @@ escape_local_throw: {
}
(function() {
var thing = baz();
if (thing !== (thing = baz()))
if (thing !== baz())
console.log("PASS");
else
console.log("FAIL");
@@ -4980,11 +4975,7 @@ inverted_var: {
console.log(1, 2, 3, 4, 5, function c() {
c = 6;
return c;
}(), 7, function() {
c = 8;
return c;
var c = "foo";
}());
}(), 7, 8);
}
expect_stdout: true
}
@@ -5180,9 +5171,7 @@ defun_var_3: {
var a = 42, b;
}
expect: {
function a() {}
console.log(typeof a, "function");
var a = 42;
console.log("function", "function");
}
expect_stdout: "function function"
}