Skip to content

Commit d762b80

Browse files
committed
Replace stack with resolvingApparentMappedType
1 parent db1c873 commit d762b80

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/compiler/checker.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2047,6 +2047,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
20472047
var noConstraintType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
20482048
var circularConstraintType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
20492049
var resolvingDefaultType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
2050+
var resolvingApparentMappedType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
20502051

20512052
var markerSuperType = createTypeParameter();
20522053
var markerSubType = createTypeParameter();
@@ -2126,7 +2127,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
21262127
var amalgamatedDuplicates: Map<string, DuplicateInfoForFiles> | undefined;
21272128
var reverseMappedCache = new Map<string, Type | undefined>();
21282129
var homomorphicMappedTypeInferenceStack: string[] = [];
2129-
var homomorphicMappedTypeApparentTypeStack: Type[] = [];
21302130
var ambientModulesCache: Symbol[] | undefined;
21312131
/**
21322132
* List of every ambient module with a "*" wildcard.
@@ -14438,13 +14438,17 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1443814438
}
1443914439

1444014440
function getApparentTypeOfMappedType(type: MappedType) {
14441-
return type.resolvedApparentType || (type.resolvedApparentType = getResolvedApparentTypeOfMappedType(type));
14441+
if (type.resolvedApparentType) {
14442+
if (type.resolvedApparentType === resolvingApparentMappedType) {
14443+
return type.resolvedApparentType = type;
14444+
}
14445+
return type.resolvedApparentType;
14446+
}
14447+
type.resolvedApparentType = resolvingApparentMappedType;
14448+
return type.resolvedApparentType = getResolvedApparentTypeOfMappedType(type);
1444214449
}
1444314450

1444414451
function getResolvedApparentTypeOfMappedType(type: MappedType) {
14445-
if (contains(homomorphicMappedTypeApparentTypeStack, type)) {
14446-
return type;
14447-
}
1444814452
const mappedType = type.target as MappedType || type;
1444914453
const typeVariable = getHomomorphicTypeVariable(mappedType);
1445014454
if (typeVariable && !mappedType.declaration.nameType) {
@@ -14455,9 +14459,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1445514459
else {
1445614460
const modifiersConstraint = getConstraintOfType(getModifiersTypeFromMappedType(type));
1445714461
if (modifiersConstraint) {
14458-
homomorphicMappedTypeApparentTypeStack.push(type);
1445914462
constraint = getApparentType(modifiersConstraint);
14460-
homomorphicMappedTypeApparentTypeStack.pop();
1446114463
}
1446214464
}
1446314465
if (constraint && everyType(constraint, isArrayOrTupleType)) {

0 commit comments

Comments
 (0)