aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js15
-rw-r--r--test/compress/collapse_vars.js1
-rw-r--r--test/compress/dead-code.js29
3 files changed, 43 insertions, 2 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 70163656..406a331c 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -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
diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js
index 0bad06a4..12b49230 100644
--- a/test/compress/collapse_vars.js
+++ b/test/compress/collapse_vars.js
@@ -2197,6 +2197,7 @@ toplevel_single_reference: {
unused_orig: {
options = {
collapse_vars: true,
+ dead_code: true,
passes: 2,
reduce_funcs: true,
reduce_vars: true,
diff --git a/test/compress/dead-code.js b/test/compress/dead-code.js
index 490cff7a..afc8c568 100644
--- a/test/compress/dead-code.js
+++ b/test/compress/dead-code.js
@@ -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"
+}