@@ -12981,13 +12981,16 @@ namespace ts {
12981
12981
return result;
12982
12982
}
12983
12983
12984
- function propegateSidebandVarianceFlags(variances: VarianceFlags[]) {
12984
+ function propegateSidebandVarianceFlags(typeArguments: readonly Type[], variances: VarianceFlags[]) {
12985
12985
if (outofbandVarianceMarkerHandler) {
12986
- if (some(variances, v => !!(v & VarianceFlags.Unmeasurable))) {
12987
- outofbandVarianceMarkerHandler(/*onlyUnreliable*/ false);
12988
- }
12989
- if (some(variances, v => !!(v & VarianceFlags.Unreliable))) {
12990
- outofbandVarianceMarkerHandler(/*onlyUnreliable*/ true);
12986
+ for (let i = 0; i < variances.length; i++) {
12987
+ const v = variances[i];
12988
+ if (v & VarianceFlags.Unmeasurable) {
12989
+ instantiateType(typeArguments[i], reportUnmeasurableMarkers);
12990
+ }
12991
+ if (v & VarianceFlags.Unreliable) {
12992
+ instantiateType(typeArguments[i], reportUnreliableMarkers);
12993
+ }
12991
12994
}
12992
12995
}
12993
12996
}
@@ -13013,10 +13016,10 @@ namespace ts {
13013
13016
// We're in the middle of variance checking - integrate any unmeasurable/unreliable flags from this cached component
13014
13017
if (source.flags & (TypeFlags.Object | TypeFlags.Conditional) && source.aliasSymbol &&
13015
13018
source.aliasTypeArguments && source.aliasSymbol === target.aliasSymbol) {
13016
- propegateSidebandVarianceFlags(getAliasVariances(source.aliasSymbol));
13019
+ propegateSidebandVarianceFlags(source.aliasTypeArguments, getAliasVariances(source.aliasSymbol));
13017
13020
}
13018
- if (getObjectFlags(source) & ObjectFlags.Reference && getObjectFlags(target) & ObjectFlags.Reference && (<TypeReference>source).target === (<TypeReference>target).target) {
13019
- propegateSidebandVarianceFlags(getVariances((<TypeReference>source).target));
13021
+ if (getObjectFlags(source) & ObjectFlags.Reference && getObjectFlags(target) & ObjectFlags.Reference && (<TypeReference>source).target === (<TypeReference>target).target && length((<TypeReference>source).typeArguments) ) {
13022
+ propegateSidebandVarianceFlags((<TypeReference>source).typeArguments!, getVariances((<TypeReference>source).target));
13020
13023
}
13021
13024
}
13022
13025
return related === RelationComparisonResult.Succeeded ? Ternary.True : Ternary.False;
0 commit comments