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