fix corner case in `evaluate` (#4068)
authorAlex Lam S.L <alexlamsl@gmail.com>
Mon, 24 Aug 2020 06:57:26 +0000 (07:57 +0100)
committerGitHub <noreply@github.com>
Mon, 24 Aug 2020 06:57:26 +0000 (14:57 +0800)
fixes #4067

lib/compress.js
test/compress/evaluate.js

index 3291f16..acc8502 100644 (file)
@@ -3568,6 +3568,7 @@ merge(Compressor.prototype, {
                 escaped[0].walk(new TreeWalker(function(node) {
                     if (found) return true;
                     if (node === ref) return found = true;
+                    if (node instanceof AST_Scope) return true;
                 }));
                 return found;
               default:
index b5b74ac..9f97ba9 100644 (file)
@@ -2869,3 +2869,28 @@ issue_4035: {
         "true",
     ]
 }
+
+issue_4067: {
+    options = {
+        evaluate: true,
+        reduce_vars: true,
+        unsafe: true,
+    }
+    input: {
+        (function(a) {
+            (function(b) {
+                b[0] += 0;
+                console.log(+a);
+            })(a);
+        })([]);
+    }
+    expect: {
+        (function(a) {
+            (function(b) {
+                b[0] += 0;
+                console.log(+a);
+            })(a);
+        })([]);
+    }
+    expect_stdout: "NaN"
+}