Change the memberTypes of an EnumType to a (possibly sparse, but probably not ) array.

This commit is contained in:
Andy Hanson 2016-10-05 10:57:16 -07:00
parent 2622331c9c
commit 499ca7969c
2 changed files with 5 additions and 5 deletions

View File

@ -3868,15 +3868,15 @@ namespace ts {
enumType.symbol = symbol;
if (enumHasLiteralMembers(symbol)) {
const memberTypeList: Type[] = [];
const memberTypes = new NumberMap<number, EnumLiteralType>();
const memberTypes: { [enumMemberValue: number]: EnumLiteralType } = [];
for (const declaration of enumType.symbol.declarations) {
if (declaration.kind === SyntaxKind.EnumDeclaration) {
computeEnumMemberValues(<EnumDeclaration>declaration);
for (const member of (<EnumDeclaration>declaration).members) {
const memberSymbol = getSymbolOfNode(member);
const value = getEnumMemberValue(member);
if (!memberTypes.get(value)) {
memberTypeList.push(setAndReturn(memberTypes, value, createEnumLiteralType(memberSymbol, enumType, "" + value)));
if (!memberTypes[value]) {
memberTypeList.push(memberTypes[value] = createEnumLiteralType(memberSymbol, enumType, "" + value));
}
}
}
@ -3897,7 +3897,7 @@ namespace ts {
if (!links.declaredType) {
const enumType = <EnumType>getDeclaredTypeOfEnum(getParentOfSymbol(symbol));
links.declaredType = enumType.flags & TypeFlags.Union ?
enumType.memberTypes.get(getEnumMemberValue(<EnumDeclaration>symbol.valueDeclaration)) :
enumType.memberTypes[getEnumMemberValue(<EnumDeclaration>symbol.valueDeclaration)] :
enumType;
}
return links.declaredType;

View File

@ -2483,7 +2483,7 @@ namespace ts {
// Enum types (TypeFlags.Enum)
export interface EnumType extends Type {
memberTypes: Map<number, EnumLiteralType>;
memberTypes: { [enumMemberValue: number]: EnumLiteralType };
}
// Enum types (TypeFlags.EnumLiteral)