From 96e5bd26c3e43a52d37a8e75a36fb385ca058864 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 11 Sep 2014 15:48:24 -0700 Subject: [PATCH] Fixed bug where function type literals may omit their '=>'. --- src/compiler/parser.ts | 13 ++++++++++++- .../functionTypesLackingReturnTypes.errors.txt | 18 ++++++++++++++++++ .../functionTypesLackingReturnTypes.ts | 13 +++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/functionTypesLackingReturnTypes.errors.txt create mode 100644 tests/cases/compiler/functionTypesLackingReturnTypes.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index cfe27e7e7c3..8b44bdab60c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1274,7 +1274,18 @@ module ts { var typeParameters = parseTypeParameters(); var parameters = parseParameterList(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken); checkParameterList(parameters); - var type = parseOptional(returnToken) ? parseType() : undefined; + + var type: TypeNode; + + if (returnToken === SyntaxKind.EqualsGreaterThanToken) { + parseExpected(returnToken); + type = parseType(); + } + else if (parseOptional(returnToken)) + { + type = parseType(); + } + return { typeParameters: typeParameters, parameters: parameters, diff --git a/tests/baselines/reference/functionTypesLackingReturnTypes.errors.txt b/tests/baselines/reference/functionTypesLackingReturnTypes.errors.txt new file mode 100644 index 00000000000..289f5d11d43 --- /dev/null +++ b/tests/baselines/reference/functionTypesLackingReturnTypes.errors.txt @@ -0,0 +1,18 @@ +==== tests/cases/compiler/functionTypesLackingReturnTypes.ts (2 errors) ==== + + // Error (no '=>') + function f(x: ()) { + ~ +!!! '=>' expected. + } + + // Error (no '=>') + var g: (param); + ~ +!!! '=>' expected. + + // Okay + var h: { () } + + // Okay + var i: { new () } \ No newline at end of file diff --git a/tests/cases/compiler/functionTypesLackingReturnTypes.ts b/tests/cases/compiler/functionTypesLackingReturnTypes.ts new file mode 100644 index 00000000000..f1dac471287 --- /dev/null +++ b/tests/cases/compiler/functionTypesLackingReturnTypes.ts @@ -0,0 +1,13 @@ + +// Error (no '=>') +function f(x: ()) { +} + +// Error (no '=>') +var g: (param); + +// Okay +var h: { () } + +// Okay +var i: { new () } \ No newline at end of file