fix dead_code on nested try (#2599)

fixes #2597
This commit is contained in:
Alex Lam S.L
2017-12-15 19:41:28 +08:00
committed by GitHub
parent 092d9affb8
commit 7d6907cb99
2 changed files with 45 additions and 7 deletions

View File

@@ -4751,11 +4751,7 @@ merge(Compressor.prototype, {
node = parent;
parent = compressor.parent(level++);
if (parent instanceof AST_Exit) {
var try_node = find_try(level);
if (try_node) {
if (try_node.bfinally) break;
if (parent instanceof AST_Throw && try_node.bcatch) break;
}
if (in_try(level, parent instanceof AST_Throw)) break;
if (self.operator == "=") return self.right;
return make_node(AST_Binary, self, {
operator: self.operator.slice(0, -1),
@@ -4787,11 +4783,14 @@ merge(Compressor.prototype, {
}
return self;
function find_try(level) {
function in_try(level, no_catch) {
var scope = self.left.definition().scope;
var parent;
while ((parent = compressor.parent(level++)) !== scope) {
if (parent instanceof AST_Try) return parent;
if (parent instanceof AST_Try) {
if (parent.bfinally) return true;
if (no_catch && parent.bcatch) return true;
}
}
}
});

View File

@@ -789,3 +789,42 @@ throw_assignment: {
"caught -9",
]
}
issue_2597: {
options = {
dead_code: true,
}
input: {
function f(b) {
try {
try {
throw "foo";
} catch (e) {
return b = true;
}
} finally {
b && (a = "PASS");
}
}
var a = "FAIL";
f();
console.log(a);
}
expect: {
function f(b) {
try {
try {
throw "foo";
} catch (e) {
return b = true;
}
} finally {
b && (a = "PASS");
}
}
var a = "FAIL";
f();
console.log(a);
}
expect_stdout: "PASS"
}