fix corner case in merge_vars (#5771)

fixes #5770
This commit is contained in:
Alex Lam S.L
2023-01-04 07:17:04 +02:00
committed by GitHub
parent c9117041fa
commit 358faaacaa
3 changed files with 86 additions and 11 deletions

View File

@@ -6648,36 +6648,50 @@ Compressor.prototype.compress = function(node) {
function walk_cond(condition, consequent, alternative) {
var save = segment;
var segments = [ save, save ];
var segments = scan_branches(condition, consequent, alternative);
if (consequent) {
segment = segments[0];
pop();
if (segment !== save) return;
}
if (alternative) {
segment = segments[1];
pop();
if (segment !== save) return;
}
segment = save;
}
function scan_branches(condition, consequent, alternative) {
var segments = [ segment, segment ];
if (condition instanceof AST_Binary) switch (condition.operator) {
case "&&":
segments[0] = walk_cond(condition.left, condition.right)[0];
segments[0] = scan_branches(condition.left, condition.right)[0];
break;
case "||":
case "??":
segments[1] = walk_cond(condition.left, null, condition.right)[1];
segments[1] = scan_branches(condition.left, null, condition.right)[1];
break;
default:
condition.walk(tw);
break;
} else if (condition instanceof AST_Conditional) {
walk_cond(condition.condition, condition.consequent, condition.alternative);
scan_branches(condition.condition, condition.consequent, condition.alternative);
} else {
condition.walk(tw);
}
segment = segments[0];
if (consequent) {
segment = segments[0];
push();
consequent.walk(tw);
segments[0] = segment;
}
segments[0] = segment;
segment = segments[1];
if (alternative) {
segment = segments[1];
push();
alternative.walk(tw);
segments[1] = segment;
}
segments[1] = segment;
segment = save;
return segments;
}
});