From 30dbf9c48e2047d34bc8e75adac80c6b9a52ef33 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 6 Dec 2015 15:51:51 -0800 Subject: [PATCH] Addressing CR feedback --- src/compiler/checker.ts | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index aac78ea9611..ede1afb757e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4158,23 +4158,23 @@ namespace ts { return false; } - function getConstraintOfTypeParameter(type: TypeParameter): Type { - if (!type.constraint) { - if (type.target) { - const targetConstraint = getConstraintOfTypeParameter(type.target); - type.constraint = targetConstraint ? instantiateType(targetConstraint, type.mapper) : noConstraintType; + function getConstraintOfTypeParameter(typeParameter: TypeParameter): Type { + if (!typeParameter.constraint) { + if (typeParameter.target) { + const targetConstraint = getConstraintOfTypeParameter(typeParameter.target); + typeParameter.constraint = targetConstraint ? instantiateType(targetConstraint, typeParameter.mapper) : noConstraintType; } else { - const constraintDeclaration = getConstraintDeclaration(type); + const constraintDeclaration = getConstraintDeclaration(typeParameter); let constraint = getTypeFromTypeNode(constraintDeclaration); - if (hasConstraintReferenceTo(constraint, type)) { - error(constraintDeclaration, Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(type)); + if (hasConstraintReferenceTo(constraint, typeParameter)) { + error(constraintDeclaration, Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(typeParameter)); constraint = unknownType; } - type.constraint = constraint; + typeParameter.constraint = constraint; } } - return type.constraint === noConstraintType ? undefined : type.constraint; + return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint; } function getParentSymbolOfTypeParameter(typeParameter: TypeParameter): Symbol { @@ -4721,8 +4721,9 @@ namespace ts { function getInferenceMapper(context: InferenceContext): TypeMapper { if (!context.mapper) { const mapper: TypeMapper = t => { - for (let i = 0; i < context.typeParameters.length; i++) { - if (t === context.typeParameters[i]) { + const typeParameters = context.typeParameters; + for (let i = 0; i < typeParameters.length; i++) { + if (t === typeParameters[i]) { context.inferences[i].isFixed = true; return getInferredType(context, i); }