From 078e2cc761c0e4ff9d86963aea43efa34b7bbc59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Fri, 20 Mar 2020 15:42:18 -0400 Subject: [PATCH] fix: check potentialArrowAt in maybeAsyncArrow Co-Authored-By: Vedant Roy --- acorn/src/expression.js | 3 ++- test/tests-asyncawait.js | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/acorn/src/expression.js b/acorn/src/expression.js index 3342335c6..a50ea7531 100644 --- a/acorn/src/expression.js +++ b/acorn/src/expression.js @@ -262,7 +262,8 @@ pp.parseExprSubscripts = function(refDestructuringErrors) { pp.parseSubscripts = function(base, startPos, startLoc, noCalls) { let maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" && - this.lastTokEnd === base.end && !this.canInsertSemicolon() && this.input.slice(base.start, base.end) === "async" + this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && + this.potentialArrowAt === base.start while (true) { let element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow) if (element === base || element.type === "ArrowFunctionExpression") return element diff --git a/test/tests-asyncawait.js b/test/tests-asyncawait.js index aebc6dc73..f5d84794b 100644 --- a/test/tests-asyncawait.js +++ b/test/tests-asyncawait.js @@ -3525,3 +3525,5 @@ test("({ async delete() {} })", {}, {ecmaVersion: 8}) testFail("abc: async function a() {}", "Unexpected token (1:5)", {ecmaVersion: 8}) test("(async() => { await 4 ** 2 })()", {}, {ecmaVersion: 8}) + +testFail("4 + async() => 2", "Unexpected token (1:12)", {ecmaVersion: 8, loose: false})