fix corner case in merge_vars (#4760)

fixes #4759
This commit is contained in:
Alex Lam S.L
2021-03-10 15:44:49 +00:00
committed by GitHub
parent 58362d5ec7
commit b4944a31a4
2 changed files with 59 additions and 10 deletions

View File

@@ -5271,7 +5271,7 @@ merge(Compressor.prototype, {
var NO_MERGE = makePredicate("arguments await yield");
AST_Scope.DEFMETHOD("merge_variables", function(compressor) {
if (!compressor.option("merge_vars")) return;
var self = this, segment = {}, root;
var in_try, root, segment = {}, self = this;
var first = [], last = [], index = 0;
var declarations = new Dictionary();
var references = Object.create(null);
@@ -5476,10 +5476,11 @@ merge(Compressor.prototype, {
return true;
}
if (node instanceof AST_Try) {
push();
segment.block = node;
var save_try = in_try;
in_try = node;
var save = segment;
walk_body(node, tw);
pop();
segment = save;
if (node.bcatch) {
if (node.bcatch.argname) node.bcatch.argname.mark_symbol(function(node) {
if (node instanceof AST_SymbolCatch) {
@@ -5488,11 +5489,16 @@ merge(Compressor.prototype, {
if (def = def.redefined()) references[def.id] = false;
}
}, tw);
push();
if (node.bfinally) segment.block = node.bcatch;
walk_body(node.bcatch, tw);
pop();
if (node.bfinally || (in_try = save_try)) {
walk_body(node.bcatch, tw);
} else {
push();
walk_body(node.bcatch, tw);
pop();
}
}
in_try = save_try;
segment = save;
if (node.bfinally) node.bfinally.walk(tw);
return true;
}
@@ -5599,6 +5605,7 @@ merge(Compressor.prototype, {
}
function mark(sym, read) {
if (in_try) push();
var def = sym.definition(), ldef;
if (def.id in references) {
var refs = references[def.id];