fix corner case with parentheses around `await` (#4344)
authorAlex Lam S.L <alexlamsl@gmail.com>
Mon, 7 Dec 2020 20:29:54 +0000 (20:29 +0000)
committerGitHub <noreply@github.com>
Mon, 7 Dec 2020 20:29:54 +0000 (04:29 +0800)
lib/output.js
test/compress/async.js

index bf24386..a6d0d0d 100644 (file)
@@ -810,6 +810,16 @@ function OutputStream(options) {
         return needs_parens_assign_cond(this, output);
     });
 
+    PARENS(AST_Await, function(output) {
+        var p = output.parent();
+        // new (await foo)
+        // (await foo)(bar)
+        if (p instanceof AST_Call) return p.expression === this;
+        // (await foo).prop
+        // (await foo)["prop"]
+        if (p instanceof AST_PropAccess) return p.expression === this;
+    });
+
     /* -----[ PRINTERS ]----- */
 
     DEFPRINT(AST_Directive, function(output) {
index cab1f92..ca60403 100644 (file)
@@ -306,3 +306,25 @@ issue_4340: {
     expect_stdout: "PASS"
     node_version: ">=8"
 }
+
+call_expression: {
+    input: {
+        console.log(typeof async function(log) {
+            (await log)("FAIL");
+        }(console.log).then);
+    }
+    expect_exact: 'console.log(typeof async function(log){(await log)("FAIL")}(console.log).then);'
+    expect_stdout: "function"
+    node_version: ">=8"
+}
+
+property_access_expression: {
+    input: {
+        console.log(typeof async function(con) {
+            (await con).log("FAIL");
+        }(console).then);
+    }
+    expect_exact: 'console.log(typeof async function(con){(await con).log("FAIL")}(console).then);'
+    expect_stdout: "function"
+    node_version: ">=8"
+}