fix corner case in merge_vars (#4238)

fixes #4237
This commit is contained in:
Alex Lam S.L
2020-10-24 03:19:43 +01:00
committed by GitHub
parent 9e40abeded
commit 8e86d05c32
2 changed files with 118 additions and 8 deletions

View File

@@ -4468,6 +4468,35 @@ merge(Compressor.prototype, {
});
return true;
}
if (node instanceof AST_Continue) {
var target = tw.loopcontrol_target(node);
if (!(target instanceof AST_Do)) return true;
var stack = [];
while (!HOP(segment, "block") || segment.block !== target) {
stack.push(segment);
pop();
}
segment.loop = "c";
push();
while (stack.length) {
var seg = stack.pop();
push();
if (HOP(seg, "block")) segment.block = seg.block;
if (HOP(seg, "loop")) segment.loop = seg.loop;
}
return true;
}
if (node instanceof AST_Do) {
push();
segment.block = node;
segment.loop = true;
var save = segment;
node.body.walk(tw);
if (segment.loop == "c") segment = save;
node.condition.walk(tw);
pop();
return true;
}
if (node instanceof AST_For) {
if (node.init) node.init.walk(tw);
push();
@@ -4501,14 +4530,6 @@ merge(Compressor.prototype, {
}
return true;
}
if (node instanceof AST_IterationStatement) {
push();
segment.block = node;
segment.loop = true;
descend();
pop();
return true;
}
if (node instanceof AST_LabeledStatement) {
push();
segment.block = node;
@@ -4601,6 +4622,14 @@ merge(Compressor.prototype, {
}
return true;
}
if (node instanceof AST_While) {
push();
segment.block = node;
segment.loop = true;
descend();
pop();
return true;
}
});
tw.directives = Object.create(compressor.directives);
self.walk(tw);