Forbid await await

This commit is contained in:
Andy Hanson
2016-07-22 14:01:59 -07:00
parent bc5c7b654a
commit 275dbc7537
4 changed files with 39 additions and 1 deletions

View File

@@ -3337,7 +3337,10 @@ namespace ts {
function parseAwaitExpression() {
const node = <AwaitExpression>createNode(SyntaxKind.AwaitExpression);
nextToken();
node.expression = parseSimpleUnaryExpression();
node.expression = token === SyntaxKind.AwaitKeyword
// Forbid `await await`
? <UnaryExpression>createMissingNode(SyntaxKind.Identifier, /*reportAtCurrentPosition*/ false, Diagnostics.Expression_expected)
: parseSimpleUnaryExpression();
return finishNode(node);
}

View File

@@ -0,0 +1,10 @@
tests/cases/compiler/awaitAwait.ts(2,11): error TS1109: Expression expected.
==== tests/cases/compiler/awaitAwait.ts (1 errors) ====
async function f() {
await await 0;
~~~~~
!!! error TS1109: Expression expected.
}

View File

@@ -0,0 +1,21 @@
//// [awaitAwait.ts]
async function f() {
await await 0;
}
//// [awaitAwait.js]
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments)).next());
});
};
function f() {
return __awaiter(this, void 0, void 0, function* () {
yield ;
yield 0;
});
}

View File

@@ -0,0 +1,4 @@
// @target: es6
async function f() {
await await 0;
}