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
}
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"
+}