enhance `comparisons` & `reduce_vars` (#4841)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sat, 3 Apr 2021 14:06:05 +0000 (15:06 +0100)
committerGitHub <noreply@github.com>
Sat, 3 Apr 2021 14:06:05 +0000 (22:06 +0800)
lib/compress.js
test/compress/classes.js

index 0150ba3..5a9c8b7 100644 (file)
@@ -9674,6 +9674,7 @@ merge(Compressor.prototype, {
         if (node instanceof AST_Sequence) return is_object(node.tail_node());
         if (node instanceof AST_SymbolRef) return is_object(node.fixed_value());
         return node instanceof AST_Array
+            || node instanceof AST_Class
             || node instanceof AST_Lambda
             || node instanceof AST_New
             || node instanceof AST_Object;
index 44bb278..fe8c7e3 100644 (file)
@@ -583,6 +583,31 @@ single_use_6: {
     node_version: ">=4"
 }
 
+single_use_7: {
+    options = {
+        passes: 2,
+        reduce_vars: true,
+        toplevel: true,
+        unused: true,
+    }
+    input: {
+        "use strict";
+        class A {
+            static foo() {}
+        }
+        var a = "foo" in A;
+        console.log(a);
+    }
+    expect: {
+        "use strict";
+        console.log("foo" in class {
+            static foo() {}
+        });
+    }
+    expect_stdout: "true"
+    node_version: ">=4"
+}
+
 collapse_non_strict: {
     options = {
         collapse_vars: true,
@@ -654,6 +679,32 @@ collapse_rhs_static: {
     node_version: ">=12"
 }
 
+self_comparison: {
+    options = {
+        booleans: true,
+        comparisons: true,
+        reduce_vars: true,
+        toplevel: true,
+        unused: true,
+    }
+    input: {
+        "use strict";
+        class A {}
+        console.log(A == A, A != A);
+        console.log(A === A, A !== A);
+    }
+    expect: {
+        "use strict";
+        console.log(!0, !1);
+        console.log(!0, !1);
+    }
+    expect_stdout: [
+        "true false",
+        "true false",
+    ]
+    node_version: ">=4"
+}
+
 property_side_effects: {
     options = {
         inline: true,