fix corner case in `evaluate` (#3888)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 12 May 2020 09:58:37 +0000 (10:58 +0100)
committerGitHub <noreply@github.com>
Tue, 12 May 2020 09:58:37 +0000 (17:58 +0800)
fixes #3887

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

index 415f9bd..e4f7589 100644 (file)
@@ -3368,7 +3368,7 @@ merge(Compressor.prototype, {
         });
         def(AST_UnaryPostfix, function(compressor, ignore_side_effects, cached, depth) {
             var e = this.expression;
-            if (!(e instanceof AST_SymbolRef)) return this;
+            if (!e.fixed) return this;
             var refs = e.definition().references;
             if (!ignore_side_effects && refs[refs.length - 1] !== e) return this;
             var v = e._eval(compressor, ignore_side_effects, cached, depth + 1);
index 60f059a..8425abe 100644 (file)
@@ -2395,3 +2395,26 @@ issue_3882: {
         "NaN",
     ]
 }
+
+issue_3887: {
+    options = {
+        evaluate: true,
+        reduce_vars: true,
+        unused: true,
+    }
+    input: {
+        (function(b) {
+            try {
+                b-- && console.log("PASS");
+            } catch (a_2) {}
+        })(1);
+    }
+    expect: {
+        (function(b) {
+            try {
+                b-- && console.log("PASS");
+            } catch (a_2) {}
+        })(1);
+    }
+    expect_stdout: "PASS"
+}