Skip to content

Commit 9810ddf

Browse files
committed
Include fresh type parameters in type parameter mapper function
1 parent 30dbf9c commit 9810ddf

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/compiler/checker.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4744,25 +4744,25 @@ namespace ts {
47444744
return t => instantiateType(mapper1(t), mapper2);
47454745
}
47464746

4747-
function instantiateTypeParameter(typeParameter: TypeParameter, mapper: TypeMapper): TypeParameter {
4747+
function cloneTypeParameter(typeParameter: TypeParameter): TypeParameter {
47484748
const result = <TypeParameter>createType(TypeFlags.TypeParameter);
47494749
result.symbol = typeParameter.symbol;
4750-
if (typeParameter.constraint) {
4751-
result.constraint = instantiateType(typeParameter.constraint, mapper);
4752-
}
4753-
else {
4754-
result.target = typeParameter;
4755-
result.mapper = mapper;
4756-
}
4750+
result.target = typeParameter;
47574751
return result;
47584752
}
47594753

47604754
function instantiateSignature(signature: Signature, mapper: TypeMapper, eraseTypeParameters?: boolean): Signature {
47614755
let freshTypeParameters: TypeParameter[];
47624756
let freshTypePredicate: TypePredicate;
47634757
if (signature.typeParameters && !eraseTypeParameters) {
4764-
freshTypeParameters = instantiateList(signature.typeParameters, mapper, instantiateTypeParameter);
4758+
// First create a fresh set of type parameters, then include a mapping from the old to the
4759+
// new type parameters in the mapper function. Finally store this mapper in the new type
4760+
// parameters such that we can use it when instantiating constraints.
4761+
freshTypeParameters = map(signature.typeParameters, cloneTypeParameter);
47654762
mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper);
4763+
for (const tp of freshTypeParameters) {
4764+
tp.mapper = mapper;
4765+
}
47664766
}
47674767
if (signature.typePredicate) {
47684768
freshTypePredicate = {

0 commit comments

Comments
 (0)