fix corner case in collapse_vars (#5026)

fixes #5025
This commit is contained in:
Alex Lam S.L
2021-06-22 22:03:11 +01:00
committed by GitHub
parent 95090dbf24
commit 8b05677c15
4 changed files with 34 additions and 9 deletions

View File

@@ -1818,10 +1818,7 @@ merge(Compressor.prototype, {
return node;
}
if (is_lhs(node, parent)) {
if (value_def && !hit_rhs) {
assign_used = true;
if (node.definition().last_ref === node) replaced++;
}
if (value_def && !hit_rhs) assign_used = true;
return node;
} else if (value_def) {
if (stop_if_hit && assign_pos == 0) assign_pos = remaining - replaced;
@@ -2024,7 +2021,7 @@ merge(Compressor.prototype, {
statements[i].transform(scanner);
}
if (value_def) {
if (!replaced || remaining > replaced) {
if (!replaced || remaining > replaced + assign_used) {
candidates.push(hit_stack);
force_single = true;
continue;

View File

@@ -4658,7 +4658,6 @@ replace_all_var_scope: {
rename = true
options = {
collapse_vars: true,
reduce_vars: true,
unused: true,
}
mangle = {}
@@ -4677,7 +4676,7 @@ replace_all_var_scope: {
(function(c, o) {
switch (~a) {
case (b += a):
case +o:
case o++:
}
})(--b, a);
console.log(a, b);

View File

@@ -6228,3 +6228,33 @@ recursive_collapse: {
}
expect_stdout: "PASS"
}
issue_5025: {
options = {
collapse_vars: true,
inline: true,
reduce_vars: true,
unused: true,
}
input: {
function f(a) {
function g() {
b = 42;
}
g(b = a);
var b = this;
console.log(typeof b);
}
f();
}
expect: {
function f(a) {
b = a,
void (b = 42);
var b = this;
console.log(typeof b);
}
f();
}
expect_stdout: "object"
}

View File

@@ -1151,7 +1151,6 @@ replace_all_var_scope: {
options = {
collapse_vars: true,
keep_fargs: false,
reduce_vars: true,
unused: true,
}
mangle = {}
@@ -1170,7 +1169,7 @@ replace_all_var_scope: {
(function(c) {
switch (~a) {
case (b += a):
case +c:
case c++:
}
})((--b, a));
console.log(a, b);