From 07a5a57336c1c3e21e9b137864d892986fc5fdf2 Mon Sep 17 00:00:00 2001 From: kzc Date: Thu, 29 Jun 2017 21:14:24 -0400 Subject: [PATCH] fix `await` parens for property access and calls (#2181) fixes #2179 --- lib/output.js | 6 ++++++ test/compress/async.js | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/lib/output.js b/lib/output.js index 06ff762f..25ce22ea 100644 --- a/lib/output.js +++ b/lib/output.js @@ -673,6 +673,12 @@ function OutputStream(options) { && this.operator !== "--"; }); + PARENS(AST_Await, function(output){ + var p = output.parent(); + return p instanceof AST_PropAccess && p.expression === this + || p instanceof AST_Call && p.expression === this; + }); + PARENS(AST_Sequence, function(output){ var p = output.parent(); return p instanceof AST_Call // (foo, bar)() or foo(1, (2, 3), 4) diff --git a/test/compress/async.js b/test/compress/async.js index 7ffc1454..2c5d680c 100644 --- a/test/compress/async.js +++ b/test/compress/async.js @@ -6,6 +6,22 @@ await_precedence: { expect_exact: "async function f1(){await x+y}async function f2(){await(x+y)}" } +await_precedence_prop: { + input: { + async function f1(){ return (await foo()).bar; } + async function f2(){ return (await foo().bar); } + } + expect_exact: "async function f1(){return(await foo()).bar}async function f2(){return await foo().bar}" +} + +await_precedence_call: { + input: { + async function f3(){ return (await foo())(); } + async function f4(){ return await (foo()()); } + } + expect_exact: "async function f3(){return(await foo())()}async function f4(){return await foo()()}" +} + async_function_declaration: { options = { side_effects: true,