fix corner case in switch (#1765)
This commit is contained in:
@@ -2557,7 +2557,7 @@ merge(Compressor.prototype, {
|
|||||||
if (!default_branch) {
|
if (!default_branch) {
|
||||||
default_branch = branch;
|
default_branch = branch;
|
||||||
} else {
|
} else {
|
||||||
eliminate_branch(branch);
|
eliminate_branch(branch, body[body.length - 1]);
|
||||||
}
|
}
|
||||||
} else if (value !== self.expression) {
|
} else if (value !== self.expression) {
|
||||||
var exp = branch.expression.evaluate(compressor);
|
var exp = branch.expression.evaluate(compressor);
|
||||||
@@ -2570,7 +2570,7 @@ merge(Compressor.prototype, {
|
|||||||
default_branch = null;
|
default_branch = null;
|
||||||
}
|
}
|
||||||
} else if (exp !== branch.expression) {
|
} else if (exp !== branch.expression) {
|
||||||
eliminate_branch(branch);
|
eliminate_branch(branch, body[body.length - 1]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2583,7 +2583,7 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
body.push(branch);
|
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) {
|
if (body.length > 0) {
|
||||||
body[0].body = decl.concat(body[0].body);
|
body[0].body = decl.concat(body[0].body);
|
||||||
}
|
}
|
||||||
@@ -2626,7 +2626,6 @@ merge(Compressor.prototype, {
|
|||||||
return self;
|
return self;
|
||||||
|
|
||||||
function eliminate_branch(branch, prev) {
|
function eliminate_branch(branch, prev) {
|
||||||
if (!prev) prev = body[body.length - 1];
|
|
||||||
if (prev && !aborts(prev)) {
|
if (prev && !aborts(prev)) {
|
||||||
prev.body = prev.body.concat(branch.body);
|
prev.body = prev.body.concat(branch.body);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -24,3 +24,31 @@ case_1: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "0 2"
|
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