fix corner case in `collapse_vars` (#5278)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sat, 8 Jan 2022 01:46:21 +0000 (01:46 +0000)
committerGitHub <noreply@github.com>
Sat, 8 Jan 2022 01:46:21 +0000 (09:46 +0800)
fixes #5277

lib/compress.js
test/compress/collapse_vars.js

index 01b1845..24d0d04 100644 (file)
@@ -1982,7 +1982,7 @@ Compressor.prototype.compress = function(node) {
                         abort = true;
                         folded = make_node(AST_Binary, candidate, {
                             operator: compound,
-                            left: lhs.fixed ? lhs.fixed.to_binary() : lhs,
+                            left: lhs.fixed && lhs.definition().fixed ? lhs.fixed.to_binary() : lhs,
                             right: rvalue,
                         });
                     }
@@ -2040,7 +2040,7 @@ Compressor.prototype.compress = function(node) {
                     });
                     if (candidate instanceof AST_UnaryPostfix) return make_node(AST_UnaryPrefix, candidate, {
                         operator: candidate.operator,
-                        expression: lhs.fixed ? lhs.fixed.to_prefix() : lhs,
+                        expression: lhs.fixed && lhs.definition().fixed ? lhs.fixed.to_prefix() : lhs,
                     });
                     if (candidate instanceof AST_VarDef) {
                         var def = candidate.name.definition();
index 40ba3bb..2c54727 100644 (file)
@@ -9790,3 +9790,23 @@ issue_5276: {
     }
     expect_stdout: "PASS"
 }
+
+issue_5277: {
+    options = {
+        collapse_vars: true,
+        reduce_vars: true,
+        unused: true,
+    }
+    input: {
+        console.log(function() {
+            var a = function() {
+                a += null;
+                a -= 42;
+            };
+        }());
+    }
+    expect: {
+        console.log(function() {}());
+    }
+    expect_stdout: "undefined"
+}