fix corner case in `merge_vars` (#4295)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 18 Nov 2020 01:32:53 +0000 (01:32 +0000)
committerGitHub <noreply@github.com>
Wed, 18 Nov 2020 01:32:53 +0000 (09:32 +0800)
fixes #4294

lib/compress.js
test/compress/destructured.js
test/reduce.js

index c1da6e7..e05b6f2 100644 (file)
@@ -4750,6 +4750,8 @@ merge(Compressor.prototype, {
                         var ldef = node.variables.get(ref.name);
                         if (ldef && (ldef === def || def.undeclared || node.parent_scope.find_variable(ref) === def)) {
                             references[ldef.id] = false;
+                        } else {
+                            mark(ref, true, false);
                         }
                         return true;
                     });
index 7eaad22..4ef2886 100644 (file)
@@ -1470,3 +1470,35 @@ issue_4288: {
     expect_stdout: "undefined"
     node_version: ">=6"
 }
+
+issue_4294: {
+    options = {
+        merge_vars: true,
+    }
+    input: {
+        A = "PASS";
+        (function() {
+            var a = function({
+                [a]: {},
+            }) {}({
+                [a]: 0,
+            });
+            var b = A;
+            console.log(b);
+        })();
+    }
+    expect: {
+        A = "PASS";
+        (function() {
+            var a = function({
+                [a]: {},
+            }) {}({
+                [a]: 0,
+            });
+            var b = A;
+            console.log(b);
+        })();
+    }
+    expect_stdout: "PASS"
+    node_version: ">=6"
+}
index f126573..2b1b42e 100644 (file)
@@ -115,7 +115,7 @@ module.exports = function reduce_test(testcase, minify_options, reduce_options)
 
             // ignore lvalues
             if (parent instanceof U.AST_Assign && parent.left === node) return;
-            if (parent instanceof U.AST_Destructured) return;
+            if (parent instanceof U.AST_DestructuredArray) return;
             if (parent instanceof U.AST_DestructuredKeyVal && parent.value === node) return;
             if (parent instanceof U.AST_Unary && parent.expression === node) switch (parent.operator) {
               case "++":