Skip to content

Commit

Permalink
fix corner case in reduce_vars (#5731)
Browse files Browse the repository at this point in the history
fixes #5730
  • Loading branch information
alexlamsl authored Nov 3, 2022
1 parent 2b1c321 commit e37a148
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 4 deletions.
10 changes: 6 additions & 4 deletions lib/compress.js
Original file line number Diff line number Diff line change
Expand Up @@ -1441,11 +1441,13 @@ Compressor.prototype.compress = function(node) {
break;
}
if (!ref.fixed) ref.fixed = d.fixed === 0 ? fixed : d.fixed;
var parent;
if (value instanceof AST_Lambda
&& !((parent = tw.parent()) instanceof AST_Call && parent.expression === ref)) {
mark_fn_def(tw, d, value);
if (!value && fixed) value = fixed instanceof AST_Node ? fixed : fixed();
if (!(value instanceof AST_Lambda)) return;
if (d.fixed) {
var parent = tw.parent();
if (parent instanceof AST_Call && parent.expression === ref) return;
}
mark_fn_def(tw, d, value);
});
def(AST_Template, function(tw, descend) {
var node = this;
Expand Down
86 changes: 86 additions & 0 deletions test/compress/reduce_vars.js
Original file line number Diff line number Diff line change
Expand Up @@ -8062,3 +8062,89 @@ issue_5716_5: {
}
expect_stdout: "42"
}

issue_5730_1: {
options = {
evaluate: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var a = "PASS";
L: {
var f = function() {
console.log(a);
};
}
f();
a++;
}
expect: {
var a = "PASS";
var f = function() {
console.log(a);
};
f();
a++;
}
expect_stdout: "PASS"
}

issue_5730_2: {
options = {
evaluate: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var a = "PASS";
try {
var f = function() {
console.log(a);
};
} finally {}
f();
a++;
}
expect: {
var a = "PASS";
try {
var f = function() {
console.log(a);
};
} finally {}
f();
a++;
}
expect_stdout: "PASS"
}

issue_5730_3: {
options = {
evaluate: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var f, a = "PASS";
L: {
f = function() {
console.log(a);
};
}
f();
a++;
}
expect: {
var f, a = "PASS";
f = function() {
console.log(a);
};
f();
a++;
}
expect_stdout: "PASS"
}

0 comments on commit e37a148

Please sign in to comment.