@@ -1267,7 +1267,7 @@ module ts {
1267
1267
return finishNode ( node ) ;
1268
1268
}
1269
1269
1270
- function parseSignature ( kind : SyntaxKind , returnToken : SyntaxKind ) : ParsedSignature {
1270
+ function parseSignature ( kind : SyntaxKind , returnToken : SyntaxKind , returnTokenRequired : boolean ) : ParsedSignature {
1271
1271
if ( kind === SyntaxKind . ConstructSignature ) {
1272
1272
parseExpected ( SyntaxKind . NewKeyword ) ;
1273
1273
}
@@ -1277,7 +1277,7 @@ module ts {
1277
1277
1278
1278
var type : TypeNode ;
1279
1279
1280
- if ( returnToken === SyntaxKind . EqualsGreaterThanToken ) {
1280
+ if ( returnTokenRequired ) {
1281
1281
parseExpected ( returnToken ) ;
1282
1282
type = parseType ( ) ;
1283
1283
}
@@ -1349,7 +1349,7 @@ module ts {
1349
1349
1350
1350
function parseSignatureMember ( kind : SyntaxKind , returnToken : SyntaxKind ) : SignatureDeclaration {
1351
1351
var node = < SignatureDeclaration > createNode ( kind ) ;
1352
- var sig = parseSignature ( kind , returnToken ) ;
1352
10000
+ var sig = parseSignature ( kind , returnToken , /* returnTokenRequired */ false ) ;
1353
1353
node . typeParameters = sig . typeParameters ;
1354
1354
node . parameters = sig . parameters ;
1355
1355
node . type = sig . type ;
@@ -1422,7 +1422,7 @@ module ts {
1422
1422
}
1423
1423
if ( token === SyntaxKind . OpenParenToken || token === SyntaxKind . LessThanToken ) {
1424
1424
node . kind = SyntaxKind . Method ;
1425
- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken ) ;
1425
+ var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
1426
1426
( < MethodDeclaration > node ) . typeParameters = sig . typeParameters ;
1427
1427
( < MethodDeclaration > node ) . parameters = sig . parameters ;
1428
1428
( < MethodDeclaration > node ) . type = sig . type ;
@@ -1483,7 +1483,7 @@ module ts {
1483
1483
function parseFunctionType ( signatureKind : SyntaxKind ) : TypeLiteralNode {
1484
1484
var node = < TypeLiteralNode > createNode ( SyntaxKind . TypeLiteral ) ;
1485
1485
var member = < SignatureDeclaration > createNode ( signatureKind ) ;
1486
- var sig = parseSignature ( signatureKind , SyntaxKind . EqualsGreaterThanToken ) ;
1486
+ var sig = parseSignature ( signatureKind , SyntaxKind . EqualsGreaterThanToken , /* returnTokenRequired */ true ) ;
1487
1487
member . typeParameters = sig . typeParameters ;
1488
1488
member . parameters = sig . parameters ;
1489
1489
member . type = sig . type ;
@@ -1739,7 +1739,7 @@ module ts {
1739
1739
var pos = getNodePos ( ) ;
1740
1740
1741
1741
if ( triState === Tristate . True ) {
1742
- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken ) ;
1742
+ var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
1743
1743
1744
1744
// If we have an arrow, then try to parse the body.
1745
1745
// Even if not, try to parse if we have an opening brace, just in case we're in an error state.
@@ -1842,7 +1842,7 @@ module ts {
1842
1842
1843
1843
function tryParseSignatureIfArrowOrBraceFollows ( ) : ParsedSignature {
1844
1844
return tryParse ( ( ) => {
1845
- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken ) ;
1845
+ var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
1846
1846
1847
1847
// Parsing a signature isn't enough.
1848
1848
// Parenthesized arrow signatures often look like other valid expressions.
@@ -2184,7 +2184,7 @@ module ts {
2184
2184
var node = < PropertyDeclaration > createNode ( SyntaxKind . PropertyAssignment ) ;
2185
2185
node . name = parsePropertyName ( ) ;
2186
2186
if ( token === SyntaxKind . OpenParenToken || token === SyntaxKind . LessThanToken ) {
2187
- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken ) ;
2187
+ var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
2188
2188
var body = parseBody ( /* ignoreMissingOpenBrace */ false ) ;
2189
2189
// do not propagate property name as name for function expression
2190
2190
// for scenarios like
@@ -2284,7 +2284,7 @@ module ts {
2284
2284
var pos = getNodePos ( ) ;
2285
2285
parseExpected ( SyntaxKind . FunctionKeyword ) ;
2286
2286
var name = isIdentifier ( ) ? parseIdentifier ( ) : undefined ;
2287
- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken ) ;
2287
+ var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
2288
2288
var body = parseBody ( /* ignoreMissingOpenBrace */ false ) ;
2289
2289
if ( name && isInStrictMode && isEvalOrArgumentsIdentifier ( name ) ) {
2290
2290
// It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the
@@ -2899,7 +2899,7 @@ module ts {
2899
2899
if ( flags ) node . flags = flags ;
2900
2900
parseExpected ( SyntaxKind . FunctionKeyword ) ;
2901
2901
node . name = parseIdentifier ( ) ;
2902
- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken ) ;
2902
+ var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
2903
2903
node . typeParameters = sig . typeParameters ;
2904
2904
node . parameters = sig . parameters ;
2905
2905
node . type = sig . type ;
@@ -2916,7 +2916,7 @@ module ts {
2916
2916
var node = < ConstructorDeclaration > createNode ( SyntaxKind . Constructor , pos ) ;
2917
2917
node . flags = flags ;
2918
2918
parseExpected ( SyntaxKind . ConstructorKeyword ) ;
2919
- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken ) ;
2919
+ var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
2920
2920
node . typeParameters = sig . typeParameters ;
2921
2921
node . parameters = sig . parameters ;
2922
2922
node . type = sig . type ;
@@ -2943,7 +2943,7 @@ module ts {
2943
2943
var method = < MethodDeclaration > createNode ( SyntaxKind . Method , pos ) ;
2944
2944
method . flags = flags ;
2945
2945
method . name = name ;
2946
- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken ) ;
2946
+ var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
2947
2947
method . typeParameters = sig . typeParameters ;
2948
2948
method . parameters = sig . parameters ;
2949
2949
method . type = sig . type ;
@@ -3016,7 +3016,7 @@ module ts {
3016
3016
var node = < MethodDeclaration > createNode ( kind , pos ) ;
3017
3017
node . flags = flags ;
3018
3018
node . name = parsePropertyName ( ) ;
3019
- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken ) ;
3019
+ var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
3020
3020
node . typeParameters = sig . typeParameters ;
3021
3021
node . parameters = sig . parameters ;
3022
3022
node . type = sig . type ;
0 commit comments