Skip to content

Commit 275dbc7

Browse files
author
Andy Hanson
committed
Forbid await await
1 parent bc5c7b6 commit 275dbc7

File tree

4 files changed

+39
-1
lines changed

4 files changed

+39
-1
lines changed

src/compiler/parser.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3337,7 +3337,10 @@ namespace ts {
33373337
function parseAwaitExpression() {
33383338
const node = <AwaitExpression>createNode(SyntaxKind.AwaitExpression);
33393339
nextToken();
3340-
node.expression = parseSimpleUnaryExpression();
3340+
node.expression = token === SyntaxKind.AwaitKeyword
3341+
// Forbid `await await`
3342+
? <UnaryExpression>createMissingNode(SyntaxKind.Identifier, /*reportAtCurrentPosition*/ false, Diagnostics.Expression_expected)
3343+
: parseSimpleUnaryExpression();
33413344
return finishNode(node);
33423345
}
33433346

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
tests/cases/compiler/awaitAwait.ts(2,11): error TS1109: Expression expected.
2+
3+
4+
==== tests/cases/compiler/awaitAwait.ts (1 errors) ====
5+
async function f() {
6+
await await 0;
7+
~~~~~
8+
!!! error TS1109: Expression expected.
9+
}
10+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [awaitAwait.ts]
2+
async function f() {
3+
await await 0;
4+
}
5+
6+
7+
//// [awaitAwait.js]
8+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9+
return new (P || (P = Promise))(function (resolve, reject) {
10+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11+
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
12+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
13+
step((generator = generator.apply(thisArg, _arguments)).next());
14+
});
15+
};
16+
function f() {
17+
return __awaiter(this, void 0, void 0, function* () {
18+
yield ;
19+
yield 0;
20+
});
21+
}

tests/cases/compiler/awaitAwait.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// @target: es6
2+
async function f() {
3+
await await 0;
4+
}

0 commit comments

Comments
 (0)