@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user