@@ -1530,28 +1530,25 @@ module ts {
15301530 }
15311531
15321532 function parseSignature ( kind : SyntaxKind , returnToken : SyntaxKind , returnTokenRequired : boolean ) : ParsedSignature {
1533+ var signature = < ParsedSignature > { } ;
1534+ fillSignature ( kind , returnToken , returnTokenRequired , signature ) ;
1535+ return signature ;
1536+ }
1537+
1538+ function fillSignature ( kind : SyntaxKind , returnToken : SyntaxKind , returnTokenRequired : boolean , signature : ParsedSignature ) : void {
15331539 if ( kind === SyntaxKind . ConstructSignature ) {
15341540 parseExpected ( SyntaxKind . NewKeyword ) ;
15351541 }
1536- var typeParameters = parseTypeParameters ( ) ;
1537- var parameters = parseParameterList ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken ) ;
1538-
1539- var type : TypeNode ;
1542+ signature . typeParameters = parseTypeParameters ( ) ;
1543+ signature . parameters = parseParameterList ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken ) ;
15401544
15411545 if ( returnTokenRequired ) {
15421546 parseExpected ( returnToken ) ;
1543- type = parseType ( ) ;
1547+ signature . type = parseType ( ) ;
15441548 }
1545- else if ( parseOptional ( returnToken ) )
1546- {
1547- type = parseType ( ) ;
1549+ else if ( parseOptional ( returnToken ) ) {
1550+ signature . type = parseType ( ) ;
15481551 }
1549-
1550- return {
1551- typeParameters,
1552- parameters,
1553- type : type
1554- } ;
15551552 }
15561553
15571554 // Because we use this for index signatures as well, we sometimes use
@@ -2966,32 +2963,26 @@ module ts {
29662963
29672964 function parseFunctionDeclaration ( pos ?: number , flags ?: NodeFlags ) : FunctionLikeDeclaration {
29682965 var node = < FunctionLikeDeclaration > createNode ( SyntaxKind . FunctionDeclaration , pos ) ;
2969- if ( flags ) node . flags = flags ;
2966+ if ( flags ) {
2967+ node . flags = flags ;
2968+ }
29702969 parseExpected ( SyntaxKind . FunctionKeyword ) ;
29712970 node . name = parseIdentifier ( ) ;
2972- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
2973- node . typeParameters = sig . typeParameters ;
2974- node . parameters = sig . parameters ;
2975- node . type = sig . type ;
2971+ fillSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false , node ) ;
29762972 node . body = parseFunctionBlockOrSemicolon ( ) ;
29772973 return finishNode ( node ) ;
29782974 }
29792975
29802976 function parseConstructorDeclaration ( pos : number , modifiers : ModifiersArray ) : ConstructorDeclaration {
29812977 var node = < ConstructorDeclaration > createNode ( SyntaxKind . Constructor , pos ) ;
29822978 setModifiers ( node , modifiers ) ;
2983-
29842979 parseExpected ( SyntaxKind . ConstructorKeyword ) ;
2985- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
2986- node . typeParameters = sig . typeParameters ;
2987- node . parameters = sig . parameters ;
2988- node . type = sig . type ;
2980+ fillSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false , node ) ;
29892981 node . body = parseFunctionBlockOrSemicolon ( ) ;
2990-
29912982 return finishNode ( node ) ;
29922983 }
29932984
2994- function parsePropertyMemberDeclaration ( pos : number , modifiers : ModifiersArray ) : Declaration {
2985+ function parsePropertyMemberDeclaration ( fullStart : number , modifiers : ModifiersArray ) : Declaration {
29952986 var name = parsePropertyName ( ) ;
29962987 var flags = modifiers ? modifiers . flags : 0 ;
29972988 if ( parseOptional ( SyntaxKind . QuestionToken ) ) {
@@ -3001,47 +2992,35 @@ module ts {
30012992 }
30022993
30032994 if ( token === SyntaxKind . OpenParenToken || token === SyntaxKind . LessThanToken ) {
3004- var method = < MethodDeclaration > createNode ( SyntaxKind . Method , pos ) ;
2995+ var method = < MethodDeclaration > createNode ( SyntaxKind . Method , fullStart ) ;
30052996 setModifiers ( method , modifiers ) ;
3006-
30072997 if ( flags ) {
30082998 method . flags = flags ;
30092999 }
30103000 method . name = name ;
3011- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
3012- method . typeParameters = sig . typeParameters ;
3013- method . parameters = sig . parameters ;
3014- method . type = sig . type ;
3001+ fillSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false , method ) ;
30153002 method . body = parseFunctionBlockOrSemicolon ( ) ;
3016-
30173003 return finishNode ( method ) ;
30183004 }
30193005 else {
3020- var property = < PropertyDeclaration > createNode ( SyntaxKind . Property , pos ) ;
3006+ var property = < PropertyDeclaration > createNode ( SyntaxKind . Property , fullStart ) ;
30213007 setModifiers ( property , modifiers ) ;
3022-
30233008 if ( flags ) {
30243009 property . flags = flags ;
30253010 }
30263011 property . name = name ;
30273012 property . type = parseTypeAnnotation ( ) ;
3028-
30293013 property . initializer = parseInitializer ( /*inParameter*/ false ) ;
30303014 parseSemicolon ( ) ;
3031-
30323015 return finishNode ( property ) ;
30333016 }
30343017 }
30353018
3036- function parseMemberAccessorDeclaration ( kind : SyntaxKind , pos : number , modifiers : ModifiersArray ) : MethodDeclaration {
3037- var node = < MethodDeclaration > createNode ( kind , pos ) ;
3019+ function parseMemberAccessorDeclaration ( kind : SyntaxKind , fullStart : number , modifiers : ModifiersArray ) : MethodDeclaration {
3020+ var node = < MethodDeclaration > createNode ( kind , fullStart ) ;
30383021 setModifiers ( node , modifiers ) ;
3039-
30403022 node . name = parsePropertyName ( ) ;
3041- var sig = parseSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false ) ;
3042- node . typeParameters = sig . typeParameters ;
3043- node . parameters = sig . parameters ;
3044- node . type = sig . type ;
3023+ fillSignature ( SyntaxKind . CallSignature , SyntaxKind . ColonToken , /* returnTokenRequired */ false , node ) ;
30453024 node . body = parseFunctionBlockOrSemicolon ( ) ;
30463025 return finishNode ( node ) ;
30473026 }
@@ -3101,15 +3080,17 @@ module ts {
31013080 var modifiers : ModifiersArray ;
31023081 while ( true ) {
31033082 var modifierStart = scanner . getTokenPos ( ) ;
3104- var modifierToken = token ;
3083+ var modifierKind = token ;
31053084
3106- if ( ! parseAnyContextualModifier ( ) ) break ;
3085+ if ( ! parseAnyContextualModifier ( ) ) {
3086+ break ;
3087+ }
31073088
31083089 if ( ! modifiers ) {
31093090 modifiers = < ModifiersArray > [ ] ;
31103091 }
3111- flags |= modifierToFlag ( modifierToken ) ;
3112- modifiers . push ( finishNode ( createNode ( modifierToken , modifierStart ) ) ) ;
3092+ flags |= modifierToFlag ( modifierKind ) ;
3093+ modifiers . push ( finishNode ( createNode ( modifierKind , modifierStart ) ) ) ;
31133094 }
31143095 if ( modifiers ) {
31153096 modifiers . flags = flags ;
@@ -3118,22 +3099,22 @@ module ts {
31183099 }
31193100
31203101 function parseClassMemberDeclaration ( ) : Declaration {
3121- var pos = getNodePos ( ) ;
3102+ var fullStart = getNodePos ( ) ;
31223103 var modifiers = parseModifiers ( ModifierContext . ClassMembers ) ;
31233104 if ( parseContextualModifier ( SyntaxKind . GetKeyword ) ) {
3124- return parseMemberAccessorDeclaration ( SyntaxKind . GetAccessor , pos , modifiers ) ;
3105+ return parseMemberAccessorDeclaration ( SyntaxKind . GetAccessor , fullStart , modifiers ) ;
31253106 }
31263107 if ( parseContextualModifier ( SyntaxKind . SetKeyword ) ) {
3127- return parseMemberAccessorDeclaration ( SyntaxKind . SetAccessor , pos , modifiers ) ;
3108+ return parseMemberAccessorDeclaration ( SyntaxKind . SetAccessor , fullStart , modifiers ) ;
31283109 }
31293110 if ( token === SyntaxKind . ConstructorKeyword ) {
3130- return parseConstructorDeclaration ( pos , modifiers ) ;
3111+ return parseConstructorDeclaration ( fullStart , modifiers ) ;
31313112 }
31323113 if ( token >= SyntaxKind . Identifier || token === SyntaxKind . StringLiteral || token === SyntaxKind . NumericLiteral ) {
3133- return parsePropertyMemberDeclaration ( pos , modifiers ) ;
3114+ return parsePropertyMemberDeclaration ( fullStart , modifiers ) ;
31343115 }
31353116 if ( token === SyntaxKind . OpenBracketToken ) {
3136- return parseIndexSignatureMember ( modifiers , pos ) ;
3117+ return parseIndexSignatureMember ( modifiers , fullStart ) ;
31373118 }
31383119
31393120 // 'isClassMemberStart' should have hinted not to attempt parsing.
0 commit comments