@@ -4062,7 +4062,8 @@ namespace ts {
40624062 const memberSymbol = getSymbolOfNode(member);
40634063 const value = getEnumMemberValue(member);
40644064 if (!memberTypes.has(value)) {
4065- const memberType = set(memberTypes, value, createEnumLiteralType(memberSymbol, enumType, "" + value));
4065+ const memberType = createEnumLiteralType(memberSymbol, enumType, "" + value);
4066+ memberTypes.set(value, memberType);
40664067 memberTypeList.push(memberType);
40674068 }
40684069 }
@@ -5192,7 +5193,11 @@ namespace ts {
51925193 function getSignatureInstantiation(signature: Signature, typeArguments: Type[]): Signature {
51935194 const instantiations = signature.instantiations || (signature.instantiations = createMap<Signature>());
51945195 const id = getTypeListId(typeArguments);
5195- return instantiations.get(id) || set(instantiations, id, createSignatureInstantiation(signature, typeArguments));
5196+ let instantiation = instantiations.get(id);
5197+ if (!instantiation) {
5198+ instantiations.set(id, instantiation = createSignatureInstantiation(signature, typeArguments));
5199+ }
5200+ return instantiation;
51965201 }
51975202
51985203 function createSignatureInstantiation(signature: Signature, typeArguments: Type[]): Signature {
@@ -5348,7 +5353,8 @@ namespace ts {
53485353 const id = getTypeListId(typeArguments);
53495354 let type = target.instantiations.get(id);
53505355 if (!type) {
5351- type = set(target.instantiations, id, <TypeReference>createObjectType(ObjectFlags.Reference, target.symbol));
5356+ type = <TypeReference>createObjectType(ObjectFlags.Reference, target.symbol);
5357+ target.instantiations.set(id, type);
53525358 type.flags |= typeArguments ? getPropagatingFlagsOfTypes(typeArguments, /*excludeKinds*/ 0) : 0;
53535359 type.target = target;
53545360 type.typeArguments = typeArguments;
@@ -5395,7 +5401,11 @@ namespace ts {
53955401 const links = getSymbolLinks(symbol);
53965402 const typeParameters = links.typeParameters;
53975403 const id = getTypeListId(typeArguments);
5398- return links.instantiations.get(id) || set(links.instantiations, id, instantiateTypeNoAlias(type, createTypeMapper(typeParameters, typeArguments)));
5404+ let instantiation = links.instantiations.get(id);
5405+ if (!instantiation) {
5406+ links.instantiations.set(id, instantiation = instantiateTypeNoAlias(type, createTypeMapper(typeParameters, typeArguments)));
5407+ }
5408+ return instantiation;
53995409 }
54005410
54015411 // Get type from reference to type alias. When a type alias is generic, the declared type of the type alias may include
@@ -5844,7 +5854,8 @@ namespace ts {
58445854 let type = unionTypes.get(id);
58455855 if (!type) {
58465856 const propagatedFlags = getPropagatingFlagsOfTypes(types, /*excludeKinds*/ TypeFlags.Nullable);
5847- type = set(unionTypes, id, <UnionType>createType(TypeFlags.Union | propagatedFlags));
5857+ type = <UnionType>createType(TypeFlags.Union | propagatedFlags);
5858+ unionTypes.set(id, type);
58485859 type.types = types;
58495860 type.aliasSymbol = aliasSymbol;
58505861 type.aliasTypeArguments = aliasTypeArguments;
@@ -5918,7 +5929,8 @@ namespace ts {
59185929 let type = intersectionTypes.get(id);
59195930 if (!type) {
59205931 const propagatedFlags = getPropagatingFlagsOfTypes(typeSet, /*excludeKinds*/ TypeFlags.Nullable);
5921- type = set(intersectionTypes, id, <IntersectionType>createType(TypeFlags.Intersection | propagatedFlags));
5932+ type = <IntersectionType>createType(TypeFlags.Intersection | propagatedFlags);
5933+ intersectionTypes.set(id, type);
59225934 type.types = typeSet;
59235935 type.aliasSymbol = aliasSymbol;
59245936 type.aliasTypeArguments = aliasTypeArguments;
@@ -6100,7 +6112,11 @@ namespace ts {
61006112 }
61016113 // Otherwise we defer the operation by creating an indexed access type.
61026114 const id = objectType.id + "," + indexType.id;
6103- return indexedAccessTypes.get(id) || set(indexedAccessTypes, id, createIndexedAccessType(objectType, indexType));
6115+ let type = indexedAccessTypes.get(id);
6116+ if (!type) {
6117+ indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType));
6118+ }
6119+ return type;
61046120 }
61056121 // In the following we resolve T[K] to the type of the property in T selected by K.
61066122 const apparentObjectType = getApparentType(objectType);
@@ -6268,7 +6284,11 @@ namespace ts {
62686284
62696285 function getLiteralTypeForText(flags: TypeFlags, text: string) {
62706286 const map = flags & TypeFlags.StringLiteral ? stringLiteralTypes : numericLiteralTypes;
6271- return map.get(text) || set(map, text, createLiteralType(flags, text));
6287+ let type = map.get(text);
6288+ if (!type) {
6289+ map.set(text, type = createLiteralType(flags, text));
6290+ }
6291+ return type;
62726292 }
62736293
62746294 function getTypeFromLiteralTypeNode(node: LiteralTypeNode): Type {
@@ -7060,7 +7080,8 @@ namespace ts {
70607080 if (source.symbol.name !== target.symbol.name ||
70617081 !(source.symbol.flags & SymbolFlags.RegularEnum) || !(target.symbol.flags & SymbolFlags.RegularEnum) ||
70627082 (source.flags & TypeFlags.Union) !== (target.flags & TypeFlags.Union)) {
7063- return set(enumRelation, id, false);
7083+ enumRelation.set(id, false);
7084+ return false;
70647085 }
70657086 const targetEnumType = getTypeOfSymbol(target.symbol);
70667087 for (const property of getPropertiesOfType(getTypeOfSymbol(source.symbol))) {
@@ -7071,11 +7092,13 @@ namespace ts {
70717092 errorReporter(Diagnostics.Property_0_is_missing_in_type_1, property.name,
70727093 typeToString(target, /*enclosingDeclaration*/ undefined, TypeFormatFlags.UseFullyQualifiedType));
70737094 }
7074- return set(enumRelation, id, false);
7095+ enumRelation.set(id, false);
7096+ return false;
70757097 }
70767098 }
70777099 }
7078- return set(enumRelation, id, true);
7100+ enumRelation.set(id, true);
7101+ return true;
70797102 }
70807103
70817104 function isSimpleTypeRelatedTo(source: Type, target: Type, relation: Map<RelationComparisonResult>, errorReporter?: ErrorReporter) {
@@ -9815,7 +9838,8 @@ namespace ts {
98159838 if (isIncomplete(firstAntecedentType)) {
98169839 return createFlowType(result, /*incomplete*/ true);
98179840 }
9818- return set(cache, key, result);
9841+ cache.set(key, result);
9842+ return result;
98199843 }
98209844
98219845 function isMatchingReferenceDiscriminant(expr: Expression) {
@@ -11771,9 +11795,9 @@ namespace ts {
1177111795 }
1177211796
1177311797 function getJsxType(name: string) {
11774- const jsxType = jsxTypes.get(name);
11798+ let jsxType = jsxTypes.get(name);
1177511799 if (jsxType === undefined) {
11776- return set(jsxTypes, name, getExportedTypeFromNamespace(JsxNames.JSX, name) || unknownType);
11800+ jsxTypes. set(name, jsxType = getExportedTypeFromNamespace(JsxNames.JSX, name) || unknownType);
1177711801 }
1177811802 return jsxType;
1177911803 }
0 commit comments