Skip to content

Commit

Permalink
fix corner case in collapse_vars (#5026)
Browse files Browse the repository at this point in the history
fixes #5025
  • Loading branch information
alexlamsl committed Jun 22, 2021
1 parent 95090db commit 8b05677
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 9 deletions.
7 changes: 2 additions & 5 deletions lib/compress.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
3 changes: 1 addition & 2 deletions test/compress/collapse_vars.js
Original file line number Diff line number Diff line change
Expand Up @@ -4658,7 +4658,6 @@ replace_all_var_scope: {
rename = true
options = {
collapse_vars: true,
reduce_vars: true,
unused: true,
}
mangle = {}
Expand All @@ -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);
Expand Down
30 changes: 30 additions & 0 deletions test/compress/functions.js
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
3 changes: 1 addition & 2 deletions test/compress/keep_fargs.js
Original file line number Diff line number Diff line change
Expand Up @@ -1151,7 +1151,6 @@ replace_all_var_scope: {
options = {
collapse_vars: true,
keep_fargs: false,
reduce_vars: true,
unused: true,
}
mangle = {}
Expand All @@ -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);
Expand Down

0 comments on commit 8b05677

Please sign in to comment.