diff --git a/acorn/src/statement.js b/acorn/src/statement.js index fd0cde587..a37e73106 100644 --- a/acorn/src/statement.js +++ b/acorn/src/statement.js @@ -65,10 +65,11 @@ pp.isAsyncFunction = function() { skipWhiteSpace.lastIndex = this.pos let skip = skipWhiteSpace.exec(this.input) - let next = this.pos + skip[0].length + let next = this.pos + skip[0].length, after return !lineBreak.test(this.input.slice(this.pos, next)) && this.input.slice(next, next + 8) === "function" && - (next + 8 === this.input.length || !isIdentifierChar(this.input.charAt(next + 8))) + (next + 8 === this.input.length || + !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00)) } // Parse a single statement. diff --git a/test/tests-asyncawait.js b/test/tests-asyncawait.js index 7b0f4107c..11eae83a0 100644 --- a/test/tests-asyncawait.js +++ b/test/tests-asyncawait.js @@ -3539,3 +3539,5 @@ test("async() => await (5 ** 6)", {}, {ecmaVersion: 8}) testFail("async() => await (5) ** 6", "Unexpected token (1:21)", {ecmaVersion: 8}) testFail("4 + async() => 2", "Unexpected token (1:12)", {ecmaVersion: 8, loose: false}) + +testFail("async function𝐬 f() {}", "Unexpected token (1:17)", {ecmaVersion: 8})