fix corner case in merge_vars (#4258)

fixes #4257
This commit is contained in:
Alex Lam S.L
2020-11-01 17:01:00 +00:00
committed by GitHub
parent 68091dbf69
commit e7643248a3
2 changed files with 43 additions and 2 deletions

View File

@@ -4502,7 +4502,7 @@ merge(Compressor.prototype, {
segment.loop = true; segment.loop = true;
var save = segment; var save = segment;
node.body.walk(tw); node.body.walk(tw);
if (segment.loop == "c") segment = save; if (segment.inserted === node) segment = save;
node.condition.walk(tw); node.condition.walk(tw);
pop(); pop();
return true; return true;
@@ -4543,7 +4543,9 @@ merge(Compressor.prototype, {
if (node instanceof AST_LabeledStatement) { if (node instanceof AST_LabeledStatement) {
push(); push();
segment.block = node; segment.block = node;
var save = segment;
node.body.walk(tw); node.body.walk(tw);
if (segment.inserted === node) segment = save;
pop(); pop();
return true; return true;
} }
@@ -4580,7 +4582,9 @@ merge(Compressor.prototype, {
node.body.forEach(function(branch) { node.body.forEach(function(branch) {
push(); push();
segment.block = node; segment.block = node;
var save = segment;
walk_body(branch, tw); walk_body(branch, tw);
if (segment.inserted === node) segment = save;
pop(); pop();
}); });
return true; return true;
@@ -4746,7 +4750,7 @@ merge(Compressor.prototype, {
stack.push(segment); stack.push(segment);
pop(); pop();
} }
segment.loop = "c"; segment.inserted = segment.block;
push(); push();
while (stack.length) { while (stack.length) {
var seg = stack.pop(); var seg = stack.pop();

View File

@@ -3146,3 +3146,40 @@ issue_4255: {
} }
expect_stdout: "0" expect_stdout: "0"
} }
issue_4257: {
options = {
merge_vars: true,
toplevel: true,
}
input: {
var a = 0;
for (var i = 0; i < 2; i++)
switch (--a) {
case 0:
var b = 0;
break;
case 0:
default:
var c = 1 + (0 | (b && A));
console.log(c);
}
}
expect: {
var a = 0;
for (var i = 0; i < 2; i++)
switch (--a) {
case 0:
var b = 0;
break;
case 0:
default:
var c = 1 + (0 | (b && A));
console.log(c);
}
}
expect_stdout: [
"1",
"1",
]
}