fix corner case in `reduce_vars` (#3923)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sat, 23 May 2020 23:38:40 +0000 (00:38 +0100)
committerGitHub <noreply@github.com>
Sat, 23 May 2020 23:38:40 +0000 (07:38 +0800)
fixes #3922

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

index a03b14e..644746e 100644 (file)
@@ -738,8 +738,7 @@ merge(Compressor.prototype, {
                         var value = iife.args[i];
                         d.fixed = function() {
                             var j = fn.argnames.indexOf(arg);
-                            if (j < 0) return value;
-                            return iife.args[j] || make_node(AST_Undefined, iife);
+                            return (j < 0 ? value : iife.args[j]) || make_node(AST_Undefined, iife);
                         };
                         tw.loop_ids[d.id] = tw.in_loop;
                         mark(tw, d, true);
index 08accc4..94852d4 100644 (file)
@@ -7095,3 +7095,30 @@ issue_3894: {
     }
     expect_stdout: "PASS"
 }
+
+issue_3922: {
+    options = {
+        evaluate: true,
+        keep_fargs: "strict",
+        pure_getters: "strict",
+        reduce_vars: true,
+        side_effects: true,
+        unused: true,
+    }
+    input: {
+        (function(a) {
+            var b;
+            b && b[c];
+            a |= this;
+            console.log("PASS");
+            var c = a.undefined;
+        })();
+    }
+    expect: {
+        (function() {
+            0;
+            console.log("PASS");
+        })();
+    }
+    expect_stdout: "PASS"
+}