@@ -306,7 +306,7 @@ export class Resolver extends DiagnosticEmitter {
306
306
typeParameterNodes ,
307
307
typeArgumentNodes ,
308
308
ctxElement ,
309
- ctxTypes = uniqueMap ( ctxTypes ) , // inherit
309
+ ctxTypes = uniqueMap ( ctxTypes ) , // update
310
310
node ,
311
311
reportMode
312
312
) ;
@@ -644,7 +644,7 @@ export class Resolver extends DiagnosticEmitter {
644
644
typeArgumentNodes : TypeNode [ ] | null ,
645
645
/** Contextual element. */
646
646
ctxElement : Element ,
647
- /** Contextual types, i.e. `T`. */
647
+ /** Contextual types, i.e. `T`. Updated in place with the new set of contextual types. */
648
648
ctxTypes : Map < string , Type > = uniqueMap < string , Type > ( ) ,
649
649
/** Alternative report node in case of empty type arguments. */
650
650
alternativeReportNode : Node | null = null ,
@@ -675,18 +675,20 @@ export class Resolver extends DiagnosticEmitter {
675
675
return null ;
676
676
}
677
677
var typeArguments = new Array < Type > ( maxParameterCount ) ;
678
+ var oldCtxTypes = uniqueMap < string , Type > ( ctxTypes ) ;
679
+ ctxTypes . clear ( ) ;
678
680
for ( let i = 0 ; i < maxParameterCount ; ++ i ) {
679
681
let type = i < argumentCount
680
682
? this . resolveType ( // reports
681
683
typeArgumentNodes ! [ i ] ,
682
684
ctxElement ,
683
- ctxTypes ,
685
+ oldCtxTypes , // update
684
686
reportMode
685
687
)
686
688
: this . resolveType ( // reports
687
689
assert ( typeParameters [ i ] . defaultType ) ,
688
690
ctxElement ,
689
- ctxTypes ,
691
+ uniqueMap < string , Type > ( ctxTypes ) , // don't update
690
692
reportMode
691
693
) ;
692
694
if ( ! type ) return null ;
@@ -2796,7 +2798,7 @@ export class Resolver extends DiagnosticEmitter {
2796
2798
assert ( prototype . typeParameterNodes ) ,
2797
2799
typeArgumentNodes ,
2798
2800
ctxElement ,
2799
- ctxTypes ,
2801
+ ctxTypes , // update
2800
2802
reportNode ,
2801
2803
reportMode
2802
2804
) ;
@@ -3272,7 +3274,7 @@ export class Resolver extends DiagnosticEmitter {
3272
3274
assert ( prototype . typeParameterNodes ) , // must be present if generic
3273
3275
typeArgumentNodes ,
3274
3276
ctxElement ,
3275
- ctxTypes ,
3277
+ ctxTypes , // update
3276
3278
reportNode ,
3277
3279
reportMode
3278
3280
) ;
0 commit comments