patch variable declaractions extracted within catch (#2753)
fixes #2749
This commit is contained in:
@@ -3774,9 +3774,20 @@ merge(Compressor.prototype, {
|
||||
OPT(AST_Try, function(self, compressor){
|
||||
tighten_body(self.body, compressor);
|
||||
if (self.bcatch && self.bfinally && all(self.bfinally.body, is_empty)) self.bfinally = null;
|
||||
if (all(self.body, is_empty)) {
|
||||
if (compressor.option("dead_code") && all(self.body, is_empty)) {
|
||||
var body = [];
|
||||
if (self.bcatch) extract_declarations_from_unreachable_code(compressor, self.bcatch, body);
|
||||
if (self.bcatch) {
|
||||
extract_declarations_from_unreachable_code(compressor, self.bcatch, body);
|
||||
body.forEach(function(stat) {
|
||||
if (!(stat instanceof AST_Definitions)) return;
|
||||
stat.definitions.forEach(function(var_def) {
|
||||
var def = var_def.name.definition().redefined();
|
||||
if (!def) return;
|
||||
var_def.name = var_def.name.clone();
|
||||
var_def.name.thedef = def;
|
||||
});
|
||||
});
|
||||
}
|
||||
if (self.bfinally) body = body.concat(self.bfinally.body);
|
||||
return make_node(AST_BlockStatement, self, {
|
||||
body: body
|
||||
|
||||
@@ -2197,6 +2197,7 @@ toplevel_single_reference: {
|
||||
unused_orig: {
|
||||
options = {
|
||||
collapse_vars: true,
|
||||
dead_code: true,
|
||||
passes: 2,
|
||||
reduce_funcs: true,
|
||||
reduce_vars: true,
|
||||
|
||||
@@ -833,3 +833,32 @@ issue_2701: {
|
||||
}
|
||||
expect_stdout: "function"
|
||||
}
|
||||
|
||||
issue_2749: {
|
||||
options = {
|
||||
dead_code: true,
|
||||
inline: true,
|
||||
toplevel: true,
|
||||
unused: true,
|
||||
}
|
||||
input: {
|
||||
var a = 2, c = "PASS";
|
||||
while (a--)
|
||||
(function() {
|
||||
return b ? c = "FAIL" : b = 1;
|
||||
try {
|
||||
} catch (b) {
|
||||
var b;
|
||||
}
|
||||
})();
|
||||
console.log(c);
|
||||
}
|
||||
expect: {
|
||||
var a = 2, c = "PASS";
|
||||
while (a--)
|
||||
b = void 0, b ? c = "FAIL" : b = 1;
|
||||
var b;
|
||||
console.log(c);
|
||||
}
|
||||
expect_stdout: "PASS"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user