@@ -2473,7 +2473,7 @@ module ts {
24732473 let declaration = <ClassDeclaration>getDeclarationOfKind(type.symbol, SyntaxKind.ClassDeclaration);
24742474 let baseTypeNode = getClassExtendsHeritageClauseElement(declaration);
24752475 if (baseTypeNode) {
2476- let baseType = getTypeFromHeritageClauseElement (baseTypeNode);
2476+ let baseType = getTypeFromExpressionWithTypeArguments (baseTypeNode);
24772477 if (baseType !== unknownType) {
24782478 if (getTargetType(baseType).flags & TypeFlags.Class) {
24792479 if (type !== baseType && !hasBaseType(<InterfaceType>baseType, type)) {
@@ -2495,7 +2495,7 @@ module ts {
24952495 for (let declaration of type.symbol.declarations) {
24962496 if (declaration.kind === SyntaxKind.InterfaceDeclaration && getInterfaceBaseTypeNodes(<InterfaceDeclaration>declaration)) {
24972497 for (let node of getInterfaceBaseTypeNodes(<InterfaceDeclaration>declaration)) {
2498- let baseType = getTypeFromHeritageClauseElement (node);
2498+ let baseType = getTypeFromExpressionWithTypeArguments (node);
24992499
25002500 if (baseType !== unknownType) {
25012501 if (getTargetType(baseType).flags & (TypeFlags.Class | TypeFlags.Interface)) {
@@ -3310,7 +3310,7 @@ module ts {
33103310 return type;
33113311 }
33123312
3313- function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode: TypeReferenceNode | HeritageClauseElement , typeParameterSymbol: Symbol): boolean {
3313+ function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode: TypeReferenceNode | ExpressionWithTypeArguments , typeParameterSymbol: Symbol): boolean {
33143314 let links = getNodeLinks(typeReferenceNode);
33153315 if (links.isIllegalTypeReferenceInConstraint !== undefined) {
33163316 return links.isIllegalTypeReferenceInConstraint;
@@ -3360,24 +3360,24 @@ module ts {
33603360 }
33613361
33623362 function getTypeFromTypeReference(node: TypeReferenceNode): Type {
3363- return getTypeFromTypeReferenceOrHeritageClauseElement (node);
3363+ return getTypeFromTypeReferenceOrExpressionWithTypeArguments (node);
33643364 }
33653365
3366- function getTypeFromHeritageClauseElement (node: HeritageClauseElement ): Type {
3367- return getTypeFromTypeReferenceOrHeritageClauseElement (node);
3366+ function getTypeFromExpressionWithTypeArguments (node: ExpressionWithTypeArguments ): Type {
3367+ return getTypeFromTypeReferenceOrExpressionWithTypeArguments (node);
33683368 }
33693369
3370- function getTypeFromTypeReferenceOrHeritageClauseElement (node: TypeReferenceNode | HeritageClauseElement ): Type {
3370+ function getTypeFromTypeReferenceOrExpressionWithTypeArguments (node: TypeReferenceNode | ExpressionWithTypeArguments ): Type {
33713371 let links = getNodeLinks(node);
33723372 if (!links.resolvedType) {
33733373 let type: Type;
33743374
33753375 // We don't currently support heritage clauses with complex expressions in them.
33763376 // For these cases, we just set the type to be the unknownType.
3377- if (node.kind !== SyntaxKind.HeritageClauseElement || isSupportedHeritageClauseElement(<HeritageClauseElement >node)) {
3377+ if (node.kind !== SyntaxKind.ExpressionWithTypeArguments || isSupportedExpressionWithTypeArguments(<ExpressionWithTypeArguments >node)) {
33783378 let typeNameOrExpression = node.kind === SyntaxKind.TypeReference
33793379 ? (<TypeReferenceNode>node).typeName
3380- : (<HeritageClauseElement >node).expression;
3380+ : (<ExpressionWithTypeArguments >node).expression;
33813381
33823382 let symbol = resolveEntityName(typeNameOrExpression, SymbolFlags.Type);
33833383 if (symbol) {
@@ -3668,8 +3668,8 @@ module ts {
36683668 return getTypeFromStringLiteral(<StringLiteral>node);
36693669 case SyntaxKind.TypeReference:
36703670 return getTypeFromTypeReference(<TypeReferenceNode>node);
3671- case SyntaxKind.HeritageClauseElement :
3672- return getTypeFromHeritageClauseElement(<HeritageClauseElement >node);
3671+ case SyntaxKind.ExpressionWithTypeArguments :
3672+ return getTypeFromExpressionWithTypeArguments(<ExpressionWithTypeArguments >node);
36733673 case SyntaxKind.TypeQuery:
36743674 return getTypeFromTypeQueryNode(<TypeQueryNode>node);
36753675 case SyntaxKind.ArrayType:
@@ -8380,20 +8380,20 @@ module ts {
83808380
83818381 function checkTypeReferenceNode(node: TypeReferenceNode) {
83828382 checkGrammarTypeReferenceInStrictMode(node.typeName);
8383- return checkTypeReferenceOrHeritageClauseElement (node);
8383+ return checkTypeReferenceOrExpressionWithTypeArguments (node);
83848384 }
83858385
8386- function checkHeritageClauseElement (node: HeritageClauseElement ) {
8387- checkGrammarHeritageClauseElementInStrictMode (<PropertyAccessExpression>node.expression);
8386+ function checkExpressionWithTypeArguments (node: ExpressionWithTypeArguments ) {
8387+ checkGrammarExpressionWithTypeArgumentsInStrictMode (<PropertyAccessExpression>node.expression);
83888388
8389- return checkTypeReferenceOrHeritageClauseElement (node);
8389+ return checkTypeReferenceOrExpressionWithTypeArguments (node);
83908390 }
83918391
8392- function checkTypeReferenceOrHeritageClauseElement (node: TypeReferenceNode | HeritageClauseElement ) {
8392+ function checkTypeReferenceOrExpressionWithTypeArguments (node: TypeReferenceNode | ExpressionWithTypeArguments ) {
83938393 // Grammar checking
83948394 checkGrammarTypeArguments(node, node.typeArguments);
83958395
8396- let type = getTypeFromTypeReferenceOrHeritageClauseElement (node);
8396+ let type = getTypeFromTypeReferenceOrExpressionWithTypeArguments (node);
83978397 if (type !== unknownType && node.typeArguments) {
83988398 // Do type argument local checks only if referenced type is successfully resolved
83998399 let len = node.typeArguments.length;
@@ -9959,12 +9959,12 @@ module ts {
99599959 let staticType = <ObjectType>getTypeOfSymbol(symbol);
99609960 let baseTypeNode = getClassExtendsHeritageClauseElement(node);
99619961 if (baseTypeNode) {
9962- if (!isSupportedHeritageClauseElement (baseTypeNode)) {
9962+ if (!isSupportedExpressionWithTypeArguments (baseTypeNode)) {
99639963 error(baseTypeNode.expression, Diagnostics.Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses);
99649964 }
99659965
99669966 emitExtends = emitExtends || !isInAmbientContext(node);
9967- checkHeritageClauseElement (baseTypeNode);
9967+ checkExpressionWithTypeArguments (baseTypeNode);
99689968 }
99699969 let baseTypes = getBaseTypes(type);
99709970 if (baseTypes.length) {
@@ -9991,13 +9991,13 @@ module ts {
99919991 let implementedTypeNodes = getClassImplementsHeritageClauseElements(node);
99929992 if (implementedTypeNodes) {
99939993 forEach(implementedTypeNodes, typeRefNode => {
9994- if (!isSupportedHeritageClauseElement (typeRefNode)) {
9994+ if (!isSupportedExpressionWithTypeArguments (typeRefNode)) {
99959995 error(typeRefNode.expression, Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments);
99969996 }
99979997
9998- checkHeritageClauseElement (typeRefNode);
9998+ checkExpressionWithTypeArguments (typeRefNode);
99999999 if (produceDiagnostics) {
10000- let t = getTypeFromHeritageClauseElement (typeRefNode);
10000+ let t = getTypeFromExpressionWithTypeArguments (typeRefNode);
1000110001 if (t !== unknownType) {
1000210002 let declaredType = (t.flags & TypeFlags.Reference) ? (<TypeReference>t).target : t;
1000310003 if (declaredType.flags & (TypeFlags.Class | TypeFlags.Interface)) {
@@ -10192,11 +10192,11 @@ module ts {
1019210192 }
1019310193 }
1019410194 forEach(getInterfaceBaseTypeNodes(node), heritageElement => {
10195- if (!isSupportedHeritageClauseElement (heritageElement)) {
10195+ if (!isSupportedExpressionWithTypeArguments (heritageElement)) {
1019610196 error(heritageElement.expression, Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments);
1019710197 }
1019810198
10199- checkHeritageClauseElement (heritageElement);
10199+ checkExpressionWithTypeArguments (heritageElement);
1020010200 });
1020110201 forEach(node.members, checkSourceElement);
1020210202
@@ -11154,7 +11154,7 @@ module ts {
1115411154 node = node.parent;
1115511155 }
1115611156
11157- return node.parent && node.parent.kind === SyntaxKind.HeritageClauseElement ;
11157+ return node.parent && node.parent.kind === SyntaxKind.ExpressionWithTypeArguments ;
1115811158 }
1115911159
1116011160 function isTypeNode(node: Node): boolean {
@@ -11174,7 +11174,7 @@ module ts {
1117411174 case SyntaxKind.StringLiteral:
1117511175 // Specialized signatures can have string literals as their parameters' type names
1117611176 return node.parent.kind === SyntaxKind.Parameter;
11177- case SyntaxKind.HeritageClauseElement :
11177+ case SyntaxKind.ExpressionWithTypeArguments :
1117811178 return true;
1117911179
1118011180 // Identifiers and qualified names may be type nodes, depending on their context. Climb
@@ -11208,7 +11208,7 @@ module ts {
1120811208 return true;
1120911209 }
1121011210 switch (parent.kind) {
11211- case SyntaxKind.HeritageClauseElement :
11211+ case SyntaxKind.ExpressionWithTypeArguments :
1121211212 return true;
1121311213 case SyntaxKind.TypeParameter:
1121411214 return node === (<TypeParameterDeclaration>parent).constraint;
@@ -11286,7 +11286,7 @@ module ts {
1128611286 }
1128711287
1128811288 if (isHeritageClauseElementIdentifier(<EntityName>entityName)) {
11289- let meaning = entityName.parent.kind === SyntaxKind.HeritageClauseElement ? SymbolFlags.Type : SymbolFlags.Namespace;
11289+ let meaning = entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments ? SymbolFlags.Type : SymbolFlags.Namespace;
1129011290 meaning |= SymbolFlags.Alias;
1129111291 return resolveEntityName(<EntityName>entityName, meaning);
1129211292 }
@@ -12117,7 +12117,7 @@ module ts {
1211712117 // public // error at public
1211812118 // public.private.package // error at public
1211912119 // B.private.B // no error
12120- function checkGrammarHeritageClauseElementInStrictMode (expression: Expression) {
12120+ function checkGrammarExpressionWithTypeArgumentsInStrictMode (expression: Expression) {
1212112121 // Example:
1212212122 // class C extends public // error at public
1212312123 if (expression && expression.kind === SyntaxKind.Identifier) {
@@ -12128,7 +12128,7 @@ module ts {
1212812128 // in PropertyAccessExpression. According to grammar production of MemberExpression,
1212912129 // the left component expression is a PrimaryExpression (i.e. Identifier) while the other
1213012130 // component after dots can be IdentifierName.
12131- checkGrammarHeritageClauseElementInStrictMode ((<PropertyAccessExpression>expression).expression);
12131+ checkGrammarExpressionWithTypeArgumentsInStrictMode ((<PropertyAccessExpression>expression).expression);
1213212132 }
1213312133
1213412134 }
0 commit comments