Skip to content

Commit a36e6ad

Browse files
Make node creation more consistent in the parser.
1 parent f559eff commit a36e6ad

File tree

1 file changed

+35
-54
lines changed

1 file changed

+35
-54
lines changed

src/compiler/parser.ts

Lines changed: 35 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)