fix corner case in `unused` (#1718)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 28 Mar 2017 17:00:21 +0000 (01:00 +0800)
committerGitHub <noreply@github.com>
Tue, 28 Mar 2017 17:00:21 +0000 (01:00 +0800)
When fixing catch-related issue in #1715, it tries to optimise for duplicate definitions but did not take anonymous functions into account.

Remove such optimisation for now and we can cover this as a more general rule later.

lib/compress.js
test/compress/drop-unused.js

index 64c654d..3c0fc45 100644 (file)
@@ -1896,8 +1896,7 @@ merge(Compressor.prototype, {
                             if (def.value) def.value = def.value.transform(tt);
                             var sym = def.name.definition();
                             if (sym.id in in_use_ids) return true;
-                            if (sym.orig[0] instanceof AST_SymbolCatch
-                                && sym.scope.parent_scope.find_variable(def.name).orig[0] === def.name) {
+                            if (sym.orig[0] instanceof AST_SymbolCatch) {
                                 def.value = def.value && def.value.drop_side_effect_free(compressor);
                                 return true;
                             }
index aa875ec..d0b8776 100644 (file)
@@ -931,3 +931,30 @@ issue_1715_3: {
     }
     expect_stdout: "1"
 }
+
+issue_1715_4: {
+    options = {
+        unused: true,
+    }
+    input: {
+        var a = 1;
+        !function a() {
+            a++;
+            try {} catch (a) {
+                var a;
+            }
+        }();
+        console.log(a);
+    }
+    expect: {
+        var a = 1;
+        !function() {
+            a++;
+            try {} catch (a) {
+                var a;
+            }
+        }();
+        console.log(a);
+    }
+    expect_stdout: "1"
+}