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