enhance `arrows` (#4403)
authorAlex Lam S.L <alexlamsl@gmail.com>
Fri, 18 Dec 2020 06:55:20 +0000 (06:55 +0000)
committerGitHub <noreply@github.com>
Fri, 18 Dec 2020 06:55:20 +0000 (14:55 +0800)
lib/compress.js
test/compress/arrows.js

index ab5ad06..a3842be 100644 (file)
@@ -4670,22 +4670,19 @@ merge(Compressor.prototype, {
 
     OPT(AST_Arrow, function(self, compressor) {
         if (!compressor.option("arrows")) return self;
-        if (self.value) {
-            var value = self.value;
-            if (is_undefined(value, compressor)) {
-                self.value = null;
-            } else if (value instanceof AST_UnaryPrefix && value.operator == "void") {
-                self.body.push(make_node(AST_SimpleStatement, value, {
-                    body: value.expression
-                }));
-                self.value = null;
-            }
-        } else if (self.body.length == 1) {
-            var stat = self.body[0];
-            if (stat instanceof AST_Return && stat.value) {
-                self.body.pop();
+        var body = tighten_body(self.value ? [ self.first_statement() ] : self.body, compressor);
+        switch (body.length) {
+          case 1:
+            var stat = body[0];
+            if (stat instanceof AST_Return) {
+                self.body.length = 0;
                 self.value = stat.value;
+                break;
             }
+          default:
+            self.body = body;
+            self.value = null;
+            break;
         }
         return self;
     });
index c91cd27..0088392 100644 (file)
@@ -320,6 +320,8 @@ inline_this: {
 trim_body: {
     options = {
         arrows: true,
+        if_return: true,
+        side_effects: true,
     }
     input: {
         var f = a => {
@@ -337,6 +339,25 @@ trim_body: {
     node_version: ">=4"
 }
 
+collapse_value: {
+    options = {
+        arrows: true,
+        collapse_vars: true,
+        keep_fargs: "strict",
+        unused: true,
+    }
+    input: {
+        var a = 42;
+        console.log((b => Math.floor(b))(a));
+    }
+    expect: {
+        var a = 42;
+        console.log((() => Math.floor(a))());
+    }
+    expect_stdout: "42"
+    node_version: ">=4"
+}
+
 reduce_iife_1: {
     options = {
         evaluate: true,