Allow async as parameter in arrowfunction (#8488)

* Allow async as a parameter name in simple arrow function

* Add tests
This commit is contained in:
Yui 2016-05-05 15:33:29 -07:00
parent 85ab935a70
commit bbbb56b08c
5 changed files with 31 additions and 1 deletions

View File

@ -3002,9 +3002,14 @@ namespace ts {
}
function isUnParenthesizedAsyncArrowFunctionWorker(): Tristate {
// AsyncArrowFunctionExpression:
// 1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In]
// 2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In]
if (token === SyntaxKind.AsyncKeyword) {
nextToken();
if (scanner.hasPrecedingLineBreak()) {
// If the "async" is followed by "=>" token then it is not a begining of an async arrow-function
// but instead a simple arrow-function which will be parsed inside "parseAssignmentExpressionOrHigher"
if (scanner.hasPrecedingLineBreak() || token === SyntaxKind.EqualsGreaterThanToken) {
return Tristate.False;
}
// Check for un-parenthesized AsyncArrowFunction

View File

@ -0,0 +1,6 @@
//// [arrowFunctionWithParameterNameAsync.ts]
const x = async => async;
//// [arrowFunctionWithParameterNameAsync.js]
var x = function (async) { return async; };

View File

@ -0,0 +1,7 @@
=== tests/cases/conformance/async/es6/asyncArrowFunction/arrowFunctionWithParameterNameAsync.ts ===
const x = async => async;
>x : Symbol(x, Decl(arrowFunctionWithParameterNameAsync.ts, 1, 5))
>async : Symbol(async, Decl(arrowFunctionWithParameterNameAsync.ts, 1, 9))
>async : Symbol(async, Decl(arrowFunctionWithParameterNameAsync.ts, 1, 9))

View File

@ -0,0 +1,8 @@
=== tests/cases/conformance/async/es6/asyncArrowFunction/arrowFunctionWithParameterNameAsync.ts ===
const x = async => async;
>x : (async: any) => any
>async => async : (async: any) => any
>async : any
>async : any

View File

@ -0,0 +1,4 @@
// @target: ES5
// @noEmitHelpers: true
const x = async => async;