fix corner case in switch (#1765)
This commit is contained in:
@@ -2557,7 +2557,7 @@ merge(Compressor.prototype, {
|
||||
if (!default_branch) {
|
||||
default_branch = branch;
|
||||
} else {
|
||||
eliminate_branch(branch);
|
||||
eliminate_branch(branch, body[body.length - 1]);
|
||||
}
|
||||
} else if (value !== self.expression) {
|
||||
var exp = branch.expression.evaluate(compressor);
|
||||
@@ -2570,7 +2570,7 @@ merge(Compressor.prototype, {
|
||||
default_branch = null;
|
||||
}
|
||||
} else if (exp !== branch.expression) {
|
||||
eliminate_branch(branch);
|
||||
eliminate_branch(branch, body[body.length - 1]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -2583,7 +2583,7 @@ merge(Compressor.prototype, {
|
||||
}
|
||||
body.push(branch);
|
||||
}
|
||||
while (i < len) eliminate_branch(self.body[i++]);
|
||||
while (i < len) eliminate_branch(self.body[i++], body[body.length - 1]);
|
||||
if (body.length > 0) {
|
||||
body[0].body = decl.concat(body[0].body);
|
||||
}
|
||||
@@ -2626,7 +2626,6 @@ merge(Compressor.prototype, {
|
||||
return self;
|
||||
|
||||
function eliminate_branch(branch, prev) {
|
||||
if (!prev) prev = body[body.length - 1];
|
||||
if (prev && !aborts(prev)) {
|
||||
prev.body = prev.body.concat(branch.body);
|
||||
} else {
|
||||
|
||||
@@ -24,3 +24,31 @@ case_1: {
|
||||
}
|
||||
expect_stdout: "0 2"
|
||||
}
|
||||
|
||||
case_2: {
|
||||
options = {
|
||||
dead_code: true,
|
||||
evaluate: true,
|
||||
switches: true,
|
||||
}
|
||||
input: {
|
||||
var a = 0, b = 1;
|
||||
switch (0) {
|
||||
default:
|
||||
b = 2;
|
||||
case a:
|
||||
a = 3;
|
||||
case 0:
|
||||
}
|
||||
console.log(a, b);
|
||||
}
|
||||
expect: {
|
||||
var a = 0, b = 1;
|
||||
switch (0) {
|
||||
case a:
|
||||
a = 3;
|
||||
}
|
||||
console.log(a, b);
|
||||
}
|
||||
expect_stdout: "3 1"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user