fix corner case in `reduce_vars` (#3510)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 22 Oct 2019 12:36:05 +0000 (20:36 +0800)
committerGitHub <noreply@github.com>
Tue, 22 Oct 2019 12:36:05 +0000 (20:36 +0800)
fixes #3509

lib/scope.js
test/compress/reduce_vars.js

index 131235f..6e33365 100644 (file)
@@ -292,9 +292,7 @@ AST_Scope.DEFMETHOD("def_variable", function(symbol, init) {
     var def = this.variables.get(symbol.name);
     if (def) {
         def.orig.push(symbol);
-        if (def.init && (def.scope !== symbol.scope || def.init instanceof AST_Function)) {
-            def.init = init;
-        }
+        if (def.init instanceof AST_Function) def.init = init;
     } else {
         def = new SymbolDef(this, symbol, init);
         this.variables.set(symbol.name, def);
index 744cdf1..ce7c16d 100644 (file)
@@ -6752,3 +6752,31 @@ issue_3377: {
     }
     expect_stdout: "42"
 }
+
+issue_3509: {
+    options = {
+        reduce_vars: true,
+        toplevel: true,
+        unused: true,
+    }
+    input: {
+        function a() {
+            console.log("PASS");
+        }
+        try {
+        } catch (a) {
+            var a;
+        }
+        a();
+    }
+    expect: {
+        try {
+        } catch (a) {
+            var a;
+        }
+        (function() {
+            console.log("PASS");
+        })();
+    }
+    expect_stdout: "PASS"
+}