Skip to content

Commit 5426526

Browse files
Merge pull request #2815 from Microsoft/getTypeFromTypeNode
Make StringLiterals and HeritageClauses into TypeNodes.
2 parents f11ee8c + c2e178e commit 5426526

File tree

4 files changed

+51
-47
lines changed

4 files changed

+51
-47
lines changed

src/compiler/checker.ts

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,7 @@ module ts {
598598
if (moduleSymbol.flags & SymbolFlags.Variable) {
599599
let typeAnnotation = (<VariableDeclaration>moduleSymbol.valueDeclaration).type;
600600
if (typeAnnotation) {
601-
return getPropertyOfType(getTypeFromTypeNodeOrHeritageClauseElement(typeAnnotation), name);
601+
return getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name);
602602
}
603603
}
604604
}
@@ -647,7 +647,7 @@ module ts {
647647
if (symbol.flags & SymbolFlags.Variable) {
648648
var typeAnnotation = (<VariableDeclaration>symbol.valueDeclaration).type;
649649
if (typeAnnotation) {
650-
return resolveSymbol(getPropertyOfType(getTypeFromTypeNodeOrHeritageClauseElement(typeAnnotation), name));
650+
return resolveSymbol(getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name));
651651
}
652652
}
653653
}
@@ -2128,7 +2128,7 @@ module ts {
21282128
}
21292129
// Use type from type annotation if one is present
21302130
if (declaration.type) {
2131-
return getTypeFromTypeNodeOrHeritageClauseElement(declaration.type);
2131+
return getTypeFromTypeNode(declaration.type);
21322132
}
21332133
if (declaration.kind === SyntaxKind.Parameter) {
21342134
let func = <FunctionLikeDeclaration>declaration.parent;
@@ -2290,18 +2290,18 @@ module ts {
22902290
return links.type;
22912291
}
22922292

2293-
function getSetAccessorTypeAnnotationNode(accessor: AccessorDeclaration): TypeNode | LiteralExpression {
2293+
function getSetAccessorTypeAnnotationNode(accessor: AccessorDeclaration): TypeNode {
22942294
return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type;
22952295
}
22962296

22972297
function getAnnotatedAccessorType(accessor: AccessorDeclaration): Type {
22982298
if (accessor) {
22992299
if (accessor.kind === SyntaxKind.GetAccessor) {
2300-
return accessor.type && getTypeFromTypeNodeOrHeritageClauseElement(accessor.type);
2300+
return accessor.type && getTypeFromTypeNode(accessor.type);
23012301
}
23022302
else {
23032303
let setterTypeAnnotation = getSetAccessorTypeAnnotationNode(accessor);
2304-
return setterTypeAnnotation && getTypeFromTypeNodeOrHeritageClauseElement(setterTypeAnnotation);
2304+
return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation);
23052305
}
23062306
}
23072307
return undefined;
@@ -2542,7 +2542,7 @@ module ts {
25422542
if (!links.declaredType) {
25432543
links.declaredType = resolvingType;
25442544
let declaration = <TypeAliasDeclaration>getDeclarationOfKind(symbol, SyntaxKind.TypeAliasDeclaration);
2545-
let type = getTypeFromTypeNodeOrHeritageClauseElement(declaration.type);
2545+
let type = getTypeFromTypeNode(declaration.type);
25462546
if (links.declaredType === resolvingType) {
25472547
links.declaredType = type;
25482548
}
@@ -3084,7 +3084,7 @@ module ts {
30843084
returnType = classType;
30853085
}
30863086
else if (declaration.type) {
3087-
returnType = getTypeFromTypeNodeOrHeritageClauseElement(declaration.type);
3087+
returnType = getTypeFromTypeNode(declaration.type);
30883088
}
30893089
else {
30903090
// TypeScript 1.0 spec (April 2014):
@@ -3242,7 +3242,7 @@ module ts {
32423242
function getIndexTypeOfSymbol(symbol: Symbol, kind: IndexKind): Type {
32433243
let declaration = getIndexDeclarationOfSymbol(symbol, kind);
32443244
return declaration
3245-
? declaration.type ? getTypeFromTypeNodeOrHeritageClauseElement(declaration.type) : anyType
3245+
? declaration.type ? getTypeFromTypeNode(declaration.type) : anyType
32463246
: undefined;
32473247
}
32483248

@@ -3253,7 +3253,7 @@ module ts {
32533253
type.constraint = targetConstraint ? instantiateType(targetConstraint, type.mapper) : noConstraintType;
32543254
}
32553255
else {
3256-
type.constraint = getTypeFromTypeNodeOrHeritageClauseElement((<TypeParameterDeclaration>getDeclarationOfKind(type.symbol, SyntaxKind.TypeParameter)).constraint);
3256+
type.constraint = getTypeFromTypeNode((<TypeParameterDeclaration>getDeclarationOfKind(type.symbol, SyntaxKind.TypeParameter)).constraint);
32573257
}
32583258
}
32593259
return type.constraint === noConstraintType ? undefined : type.constraint;
@@ -3384,7 +3384,7 @@ module ts {
33843384
if (type.flags & (TypeFlags.Class | TypeFlags.Interface) && type.flags & TypeFlags.Reference) {
33853385
let typeParameters = (<InterfaceType>type).typeParameters;
33863386
if (node.typeArguments && node.typeArguments.length === typeParameters.length) {
3387-
type = createTypeReference(<GenericType>type, map(node.typeArguments, getTypeFromTypeNodeOrHeritageClauseElement));
3387+
type = createTypeReference(<GenericType>type, map(node.typeArguments, getTypeFromTypeNode));
33883388
}
33893389
else {
33903390
error(node, Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, /*enclosingDeclaration*/ undefined, TypeFormatFlags.WriteArrayAsGenericType), typeParameters.length);
@@ -3482,7 +3482,7 @@ module ts {
34823482
function getTypeFromArrayTypeNode(node: ArrayTypeNode): Type {
34833483
let links = getNodeLinks(node);
34843484
if (!links.resolvedType) {
3485-
links.resolvedType = createArrayType(getTypeFromTypeNodeOrHeritageClauseElement(node.elementType));
3485+
links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType));
34863486
}
34873487
return links.resolvedType;
34883488
}
@@ -3500,7 +3500,7 @@ module ts {
35003500
function getTypeFromTupleTypeNode(node: TupleTypeNode): Type {
35013501
let links = getNodeLinks(node);
35023502
if (!links.resolvedType) {
3503-
links.resolvedType = createTupleType(map(node.elementTypes, getTypeFromTypeNodeOrHeritageClauseElement));
3503+
links.resolvedType = createTupleType(map(node.elementTypes, getTypeFromTypeNode));
35043504
}
35053505
return links.resolvedType;
35063506
}
@@ -3609,7 +3609,7 @@ module ts {
36093609
function getTypeFromUnionTypeNode(node: UnionTypeNode): Type {
36103610
let links = getNodeLinks(node);
36113611
if (!links.resolvedType) {
3612-
links.resolvedType = getUnionType(map(node.types, getTypeFromTypeNodeOrHeritageClauseElement), /*noSubtypeReduction*/ true);
3612+
links.resolvedType = getUnionType(map(node.types, getTypeFromTypeNode), /*noSubtypeReduction*/ true);
36133613
}
36143614
return links.resolvedType;
36153615
}
@@ -3623,7 +3623,7 @@ module ts {
36233623
return links.resolvedType;
36243624
}
36253625

3626-
function getStringLiteralType(node: LiteralExpression): StringLiteralType {
3626+
function getStringLiteralType(node: StringLiteral): StringLiteralType {
36273627
if (hasProperty(stringLiteralTypes, node.text)) {
36283628
return stringLiteralTypes[node.text];
36293629
}
@@ -3633,15 +3633,15 @@ module ts {
36333633
return type;
36343634
}
36353635

3636-
function getTypeFromStringLiteral(node: LiteralExpression): Type {
3636+
function getTypeFromStringLiteral(node: StringLiteral): Type {
36373637
let links = getNodeLinks(node);
36383638
if (!links.resolvedType) {
36393639
links.resolvedType = getStringLiteralType(node);
36403640
}
36413641
return links.resolvedType;
36423642
}
36433643

3644-
function getTypeFromTypeNodeOrHeritageClauseElement(node: TypeNode | LiteralExpression | HeritageClauseElement): Type {
3644+
function getTypeFromTypeNode(node: TypeNode): Type {
36453645
switch (node.kind) {
36463646
case SyntaxKind.AnyKeyword:
36473647
return anyType;
@@ -3656,7 +3656,7 @@ module ts {
36563656
case SyntaxKind.VoidKeyword:
36573657
return voidType;
36583658
case SyntaxKind.StringLiteral:
3659-
return getTypeFromStringLiteral(<LiteralExpression>node);
3659+
return getTypeFromStringLiteral(<StringLiteral>node);
36603660
case SyntaxKind.TypeReference:
36613661
return getTypeFromTypeReference(<TypeReferenceNode>node);
36623662
case SyntaxKind.HeritageClauseElement:
@@ -3670,7 +3670,7 @@ module ts {
36703670
case SyntaxKind.UnionType:
36713671
return getTypeFromUnionTypeNode(<UnionTypeNode>node);
36723672
case SyntaxKind.ParenthesizedType:
3673-
return getTypeFromTypeNodeOrHeritageClauseElement((<ParenthesizedTypeNode>node).type);
3673+
return getTypeFromTypeNode((<ParenthesizedTypeNode>node).type);
36743674
case SyntaxKind.FunctionType:
36753675
case SyntaxKind.ConstructorType:
36763676
case SyntaxKind.TypeLiteral:
@@ -5681,7 +5681,7 @@ module ts {
56815681
let declaration = <VariableLikeDeclaration>node.parent;
56825682
if (node === declaration.initializer) {
56835683
if (declaration.type) {
5684-
return getTypeFromTypeNodeOrHeritageClauseElement(declaration.type);
5684+
return getTypeFromTypeNode(declaration.type);
56855685
}
56865686
if (declaration.kind === SyntaxKind.Parameter) {
56875687
let type = getContextuallyTypedParameterType(<ParameterDeclaration>declaration);
@@ -5884,7 +5884,7 @@ module ts {
58845884
case SyntaxKind.NewExpression:
58855885
return getContextualTypeForArgument(<CallExpression>parent, node);
58865886
case SyntaxKind.TypeAssertionExpression:
5887-
return getTypeFromTypeNodeOrHeritageClauseElement((<TypeAssertion>parent).type);
5887+
return getTypeFromTypeNode((<TypeAssertion>parent).type);
58885888
case SyntaxKind.BinaryExpression:
58895889
return getContextualTypeForBinaryOperand(node);
58905890
case SyntaxKind.PropertyAssignment:
@@ -6706,7 +6706,7 @@ module ts {
67066706
let typeArgumentsAreAssignable = true;
67076707
for (let i = 0; i < typeParameters.length; i++) {
67086708
let typeArgNode = typeArguments[i];
6709-
let typeArgument = getTypeFromTypeNodeOrHeritageClauseElement(typeArgNode);
6709+
let typeArgument = getTypeFromTypeNode(typeArgNode);
67106710
// Do not push on this array! It has a preallocated length
67116711
typeArgumentResultTypes[i] = typeArgument;
67126712
if (typeArgumentsAreAssignable /* so far */) {
@@ -6728,9 +6728,12 @@ module ts {
67286728
let paramType = getTypeAtPosition(signature, i);
67296729
// A tagged template expression provides a special first argument, and string literals get string literal types
67306730
// unless we're reporting errors
6731-
let argType = i === 0 && node.kind === SyntaxKind.TaggedTemplateExpression ? globalTemplateStringsArrayType :
6732-
arg.kind === SyntaxKind.StringLiteral && !reportErrors ? getStringLiteralType(<LiteralExpression>arg) :
6733-
checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined);
6731+
let argType = i === 0 && node.kind === SyntaxKind.TaggedTemplateExpression
6732+
? globalTemplateStringsArrayType
6733+
: arg.kind === SyntaxKind.StringLiteral && !reportErrors
6734+
? getStringLiteralType(<StringLiteral>arg)
6735+
: checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined);
6736+
67346737
// Use argument expression as error location when reporting errors
67356738
if (!checkTypeRelatedTo(argType, paramType, relation, reportErrors ? arg : undefined,
67366739
Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1)) {
@@ -7188,7 +7191,7 @@ module ts {
71887191

71897192
function checkTypeAssertion(node: TypeAssertion): Type {
71907193
let exprType = checkExpression(node.expression);
7191-
let targetType = getTypeFromTypeNodeOrHeritageClauseElement(node.type);
7194+
let targetType = getTypeFromTypeNode(node.type);
71927195
if (produceDiagnostics && targetType !== unknownType) {
71937196
let widenedType = getWidenedType(exprType);
71947197
if (!(isTypeAssignableTo(targetType, widenedType))) {
@@ -7362,7 +7365,7 @@ module ts {
73627365
function checkFunctionExpressionOrObjectLiteralMethodBody(node: FunctionExpression | MethodDeclaration) {
73637366
Debug.assert(node.kind !== SyntaxKind.MethodDeclaration || isObjectLiteralMethod(node));
73647367
if (node.type && !node.asteriskToken) {
7365-
checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNodeOrHeritageClauseElement(node.type));
7368+
checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type));
73667369
}
73677370

73687371
if (node.body) {
@@ -7372,7 +7375,7 @@ module ts {
73727375
else {
73737376
let exprType = checkExpression(<Expression>node.body);
73747377
if (node.type) {
7375-
checkTypeAssignableTo(exprType, getTypeFromTypeNodeOrHeritageClauseElement(node.type), node.body, /*headMessage*/ undefined);
7378+
checkTypeAssignableTo(exprType, getTypeFromTypeNode(node.type), node.body, /*headMessage*/ undefined);
73767379
}
73777380
checkFunctionExpressionBodies(node.body);
73787381
}
@@ -8801,12 +8804,12 @@ module ts {
88018804
}
88028805

88038806
/** Checks a type reference node as an expression. */
8804-
function checkTypeNodeAsExpression(node: TypeNode | LiteralExpression) {
8807+
function checkTypeNodeAsExpression(node: TypeNode) {
88058808
// When we are emitting type metadata for decorators, we need to try to check the type
88068809
// as if it were an expression so that we can emit the type in a value position when we
88078810
// serialize the type metadata.
88088811
if (node && node.kind === SyntaxKind.TypeReference) {
8809-
let type = getTypeFromTypeNodeOrHeritageClauseElement(node);
8812+
let type = getTypeFromTypeNode(node);
88108813
let shouldCheckIfUnknownType = type === unknownType && compilerOptions.separateCompilation;
88118814
if (!type || (!shouldCheckIfUnknownType && type.flags & (TypeFlags.Intrinsic | TypeFlags.NumberLike | TypeFlags.StringLike))) {
88128815
return;
@@ -8826,7 +8829,8 @@ module ts {
88268829
case SyntaxKind.PropertyDeclaration:
88278830
checkTypeNodeAsExpression((<PropertyDeclaration>node).type);
88288831
break;
8829-
case SyntaxKind.Parameter: checkTypeNodeAsExpression((<ParameterDeclaration>node).type);
8832+
case SyntaxKind.Parameter:
8833+
checkTypeNodeAsExpression((<ParameterDeclaration>node).type);
88308834
break;
88318835
case SyntaxKind.MethodDeclaration:
88328836
checkTypeNodeAsExpression((<MethodDeclaration>node).type);
@@ -8942,7 +8946,7 @@ module ts {
89428946

89438947
checkSourceElement(node.body);
89448948
if (node.type && !isAccessor(node.kind) && !node.asteriskToken) {
8945-
checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNodeOrHeritageClauseElement(node.type));
8949+
checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type));
89468950
}
89478951

89488952
// Report an implicit any error if there is no body, no explicit return type, and node is not a private method
@@ -10106,7 +10110,7 @@ module ts {
1010610110
if (!tp1.constraint || !tp2.constraint) {
1010710111
return false;
1010810112
}
10109-
if (!isTypeIdenticalTo(getTypeFromTypeNodeOrHeritageClauseElement(tp1.constraint), getTypeFromTypeNodeOrHeritageClauseElement(tp2.constraint))) {
10113+
if (!isTypeIdenticalTo(getTypeFromTypeNode(tp1.constraint), getTypeFromTypeNode(tp2.constraint))) {
1011010114
return false;
1011110115
}
1011210116
}
@@ -11137,7 +11141,7 @@ module ts {
1113711141
return node.parent && node.parent.kind === SyntaxKind.HeritageClauseElement;
1113811142
}
1113911143

11140-
function isTypeNodeOrHeritageClauseElement(node: Node): boolean {
11144+
function isTypeNode(node: Node): boolean {
1114111145
if (SyntaxKind.FirstTypeNode <= node.kind && node.kind <= SyntaxKind.LastTypeNode) {
1114211146
return true;
1114311147
}
@@ -11386,8 +11390,8 @@ module ts {
1138611390
return unknownType;
1138711391
}
1138811392

11389-
if (isTypeNodeOrHeritageClauseElement(node)) {
11390-
return getTypeFromTypeNodeOrHeritageClauseElement(<TypeNode | HeritageClauseElement>node);
11393+
if (isTypeNode(node)) {
11394+
return getTypeFromTypeNode(<TypeNode>node);
1139111395
}
1139211396

1139311397
if (isExpression(node)) {

src/compiler/declarationEmitter.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ module ts {
258258
handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning));
259259
}
260260

261-
function writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, type: TypeNode | StringLiteralExpression, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic) {
261+
function writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, type: TypeNode, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic) {
262262
writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
263263
write(": ");
264264
if (type) {
@@ -314,12 +314,12 @@ module ts {
314314
}
315315
}
316316

317-
function emitTypeWithNewGetSymbolAccessibilityDiagnostic(type: TypeNode | EntityName | HeritageClauseElement, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic) {
317+
function emitTypeWithNewGetSymbolAccessibilityDiagnostic(type: TypeNode | EntityName, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic) {
318318
writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
319319
emitType(type);
320320
}
321321

322-
function emitType(type: TypeNode | StringLiteralExpression | Identifier | QualifiedName | HeritageClauseElement) {
322+
function emitType(type: TypeNode | Identifier | QualifiedName) {
323323
switch (type.kind) {
324324
case SyntaxKind.AnyKeyword:
325325
case SyntaxKind.StringKeyword:
@@ -1126,7 +1126,7 @@ module ts {
11261126
writeLine();
11271127
}
11281128

1129-
function getTypeAnnotationFromAccessor(accessor: AccessorDeclaration): TypeNode | StringLiteralExpression {
1129+
function getTypeAnnotationFromAccessor(accessor: AccessorDeclaration): TypeNode {
11301130
if (accessor) {
11311131
return accessor.kind === SyntaxKind.GetAccessor
11321132
? accessor.type // Getter - return type

src/compiler/parser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1803,7 +1803,7 @@ module ts {
18031803
function parseParameterType(): TypeNode {
18041804
if (parseOptional(SyntaxKind.ColonToken)) {
18051805
return token === SyntaxKind.StringLiteral
1806-
? <StringLiteralTypeNode>parseLiteralNode(/*internName:*/ true)
1806+
? <StringLiteral>parseLiteralNode(/*internName:*/ true)
18071807
: parseType();
18081808
}
18091809

0 commit comments

Comments
 (0)