fix dead_code on return/throw within try (#2588)

This commit is contained in:
Alex Lam S.L
2017-12-14 04:38:21 +08:00
committed by GitHub
parent 9a137e8613
commit 8266993c6e
2 changed files with 159 additions and 0 deletions

View File

@@ -4674,6 +4674,11 @@ 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 (self.operator == "=") return self.right;
return make_node(AST_Binary, self, {
operator: self.operator.slice(0, -1),
@@ -4704,6 +4709,14 @@ merge(Compressor.prototype, {
}
}
return self;
function find_try(level) {
var scope = self.left.definition().scope;
var parent;
while ((parent = compressor.parent(level++)) !== scope) {
if (parent instanceof AST_Try) return parent;
}
}
});
OPT(AST_Conditional, function(self, compressor){