Skip to content

Commit

Permalink
fix corner case in evaluate (#5775)
Browse files Browse the repository at this point in the history
fixes #5774
  • Loading branch information
alexlamsl authored Jan 7, 2023
1 parent f07dc5c commit 57dd3f6
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 14 deletions.
31 changes: 17 additions & 14 deletions lib/compress.js
Original file line number Diff line number Diff line change
Expand Up @@ -5431,22 +5431,25 @@ Compressor.prototype.compress = function(node) {
}
}
def(AST_SymbolRef, function(compressor, ignore_side_effects, cached, depth) {
var fixed = this.fixed_value();
if (!fixed) return this;
var value;
if (HOP(fixed, "_eval")) {
value = fixed._eval();
} else {
this._eval = return_this;
value = fixed._eval(compressor, ignore_side_effects, cached, depth);
this._eval = return_this;
try {
var fixed = this.fixed_value();
if (!fixed) return this;
var value;
if (HOP(fixed, "_eval")) {
value = fixed._eval();
} else {
value = fixed._eval(compressor, ignore_side_effects, cached, depth);
if (value === fixed) return this;
fixed._eval = function() {
return value;
};
cached.push(fixed);
}
return value && typeof value == "object" && !verify_escaped(this, depth) ? this : value;
} finally {
delete this._eval;
if (value === fixed) return this;
fixed._eval = function() {
return value;
};
cached.push(fixed);
}
return value && typeof value == "object" && !verify_escaped(this, depth) ? this : value;
});
var global_objs = {
Array: Array,
Expand Down
38 changes: 38 additions & 0 deletions test/compress/default-values.js
Original file line number Diff line number Diff line change
Expand Up @@ -3069,3 +3069,41 @@ issue_5651: {
expect_stdout: true
node_version: ">=6"
}

issue_5774: {
options = {
collapse_vars: true,
conditionals: true,
evaluate: true,
join_vars: true,
reduce_vars: true,
sequences: true,
unsafe: true,
}
input: {
(function() {
while (console.log("PASS")) {
if (console) {
a = void 0;
var b = void 0;
var c = void 0;
([ a = 0 ] = [ b, b ]);
var a;
}
}
})();
}
expect: {
(function() {
while (console.log("PASS")) {
var a, b, c, a;
console && (
c = b = a = void 0,
[ a = 0 ] = [ a, a ]
);
}
})();
}
expect_stdout: "PASS"
node_version: ">=6"
}

0 comments on commit 57dd3f6

Please sign in to comment.