fix corner case in `reduce_vars` (#3378)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 24 Apr 2019 06:01:01 +0000 (14:01 +0800)
committerGitHub <noreply@github.com>
Wed, 24 Apr 2019 06:01:01 +0000 (14:01 +0800)
fixes #3377

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

index 3fb835f..9430c15 100644 (file)
@@ -744,7 +744,7 @@ merge(Compressor.prototype, {
                 d.fixed = false;
             } else if (d.fixed) {
                 value = this.fixed_value();
-                if (value instanceof AST_Lambda && recursive_ref(tw, d)) {
+                if (recursive_ref(tw, d)) {
                     d.recursive_refs++;
                 } else if (value && ref_once(tw, compressor, d)) {
                     d.single_use = value instanceof AST_Lambda && !value.pinned()
@@ -2603,9 +2603,9 @@ merge(Compressor.prototype, {
     }
 
     function convert_to_predicate(obj) {
-        for (var key in obj) {
+        Object.keys(obj).forEach(function(key) {
             obj[key] = makePredicate(obj[key]);
-        }
+        });
     }
 
     var object_fns = [
index 169ae5a..7ad8ab9 100644 (file)
@@ -6737,3 +6737,21 @@ drop_side_effect_free: {
     }
     expect_stdout: "123"
 }
+
+issue_3377: {
+    options = {
+        reduce_vars: true,
+        unused: true,
+    }
+    input: {
+        console.log(function f() {
+            return f[0], (f = 42);
+        }());
+    }
+    expect: {
+        console.log(function f() {
+            return f[0], (f = 42);
+        }());
+    }
+    expect_stdout: "42"
+}