From 57a82c97ea11512d6cd7258df8efe8376fa8369a Mon Sep 17 00:00:00 2001 From: Ryan Tsao Date: Tue, 8 Sep 2020 14:36:44 -0700 Subject: [PATCH 1/2] Add failing test --- internal/parser/parser_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/internal/parser/parser_test.go b/internal/parser/parser_test.go index 5cf564f7158..9a6175bf02e 100644 --- a/internal/parser/parser_test.go +++ b/internal/parser/parser_test.go @@ -1045,6 +1045,15 @@ func TestAsync(t *testing.T) { expectParseError(t, "async (...x,) => {}", ": error: Unexpected \",\" after rest pattern\n") expectParseError(t, "async => await 0", ": error: Expected \";\" but found \"0\"\n") + expectPrinted(t, "async () => { await foo`bar` }", "async () => {\n await foo`bar`;\n};\n") + expectPrinted(t, "async () => { await foo`bar${baz}` }", "async () => {\n await foo`bar${baz}`;\n};\n") + expectPrinted(t, "async () => { (await foo)`bar` }", "async () => {\n (await foo)`bar`;\n};\n") + expectPrinted(t, "async () => { (await foo)`bar${baz}` }", "async () => {\n (await foo)`bar${baz}`;\n};\n") + expectPrinted(t, "async () => { await a, b }", "async () => {\n await a, b;\n};\n") + expectPrinted(t, "async () => { (await a), b }", "async () => {\n await a, b;\n};\n") + expectPrinted(t, "async () => { await foo.bar }", "async () => {\n await foo.bar;\n};\n") + expectPrinted(t, "async () => { (await foo).bar }", "async () => {\n (await foo).bar;\n};\n") + expectPrinted(t, "(async x => y), z", "async (x) => y, z;\n") expectPrinted(t, "(async x => y, z)", "async (x) => y, z;\n") expectPrinted(t, "(async x => (y, z))", "async (x) => (y, z);\n") From 3a48024435b8ee228a626bfa63dfc3e6e797199c Mon Sep 17 00:00:00 2001 From: Ryan Tsao Date: Tue, 8 Sep 2020 14:36:50 -0700 Subject: [PATCH 2/2] Fix parsing of awaited tagged template expressions --- internal/parser/parser.go | 2 +- internal/printer/printer.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/parser/parser.go b/internal/parser/parser.go index d637ca6c43a..75bf909a4e0 100644 --- a/internal/parser/parser.go +++ b/internal/parser/parser.go @@ -2093,7 +2093,7 @@ func (p *parser) parsePrefix(level ast.L, errors *deferredErrors, flags exprFlag if p.fnOptsParse.arrowArgErrors != nil { p.fnOptsParse.arrowArgErrors.invalidExprAwait = nameRange } - return ast.Expr{Loc: loc, Data: &ast.EAwait{Value: p.parseExpr(ast.LPrefix)}} + return ast.Expr{Loc: loc, Data: &ast.EAwait{Value: p.parseExpr(ast.LLowest)}} } } diff --git a/internal/printer/printer.go b/internal/printer/printer.go index febd7aa0781..ac68c55db1c 100644 --- a/internal/printer/printer.go +++ b/internal/printer/printer.go @@ -1796,7 +1796,7 @@ func (p *printer) printExpr(expr ast.Expr, level ast.L, flags int) { p.printSpaceBeforeIdentifier() p.print("await") p.printSpace() - p.printExpr(e.Value, ast.LPrefix, 0) + p.printExpr(e.Value, ast.LLowest, 0) if wrap { p.print(")")