Skip to content

Commit d59831b

Browse files
committed
Get rid of list and map abstractions to reduce GC pressure
1 parent aa1a766 commit d59831b

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

src/compiler/checker.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5762,22 +5762,19 @@ namespace ts {
57625762
target.symbol.flags & SymbolFlags.ConstEnum) {
57635763
return Ternary.False;
57645764
}
5765-
const targetNames = arrayToMap(getEnumMembersOfEnumType(target), member => member.name);
5766-
for (const member of getEnumMembersOfEnumType(source)) {
5767-
if (!hasProperty(targetNames, member.name)) {
5768-
reportError(Diagnostics.Property_0_is_missing_in_type_1,
5769-
member.name,
5770-
typeToString(target, /*enclosingDeclaration*/ undefined, TypeFormatFlags.UseFullyQualifiedType));
5771-
return Ternary.False;
5765+
for (const property of getPropertiesOfType(getTypeOfSymbol(source.symbol))) {
5766+
if (property.flags & SymbolFlags.EnumMember) {
5767+
const targetProperty = getPropertyOfType(getTypeOfSymbol(target.symbol), property.name);
5768+
if (!targetProperty || !(targetProperty.flags & SymbolFlags.EnumMember)) {
5769+
reportError(Diagnostics.Property_0_is_missing_in_type_1,
5770+
property.name,
5771+
typeToString(target, /*enclosingDeclaration*/ undefined, TypeFormatFlags.UseFullyQualifiedType));
5772+
return Ternary.False;
5773+
}
57725774
}
57735775
}
57745776
return Ternary.True;
57755777
}
5776-
5777-
function getEnumMembersOfEnumType(type: Type) {
5778-
return filter(resolveStructuredTypeMembers(getTypeOfSymbol(type.symbol)).properties,
5779-
property => !!(property.flags & SymbolFlags.EnumMember));
5780-
}
57815778
}
57825779

57835780
// Return true if the given type is part of a deeply nested chain of generic instantiations. We consider this to be the case

0 commit comments

Comments
 (0)