@@ -306,7 +306,7 @@ export class Resolver extends DiagnosticEmitter {
306306 typeParameterNodes ,
307307 typeArgumentNodes ,
308308 ctxElement ,
309- ctxTypes = uniqueMap ( ctxTypes ) , // inherit
309+ ctxTypes = uniqueMap ( ctxTypes ) , // update
310310 node ,
311311 reportMode
312312 ) ;
@@ -644,7 +644,7 @@ export class Resolver extends DiagnosticEmitter {
644644 typeArgumentNodes : TypeNode [ ] | null ,
645645 /** Contextual element. */
646646 ctxElement : Element ,
647- /** Contextual types, i.e. `T`. */
647+ /** Contextual types, i.e. `T`. Updated in place with the new set of contextual types. */
648648 ctxTypes : Map < string , Type > = uniqueMap < string , Type > ( ) ,
649649 /** Alternative report node in case of empty type arguments. */
650650 alternativeReportNode : Node | null = null ,
@@ -675,18 +675,20 @@ export class Resolver extends DiagnosticEmitter {
675675 return null ;
676676 }
677677 var typeArguments = new Array < Type > ( maxParameterCount ) ;
678+ var oldCtxTypes = uniqueMap < string , Type > ( ctxTypes ) ;
679+ ctxTypes . clear ( ) ;
678680 for ( let i = 0 ; i < maxParameterCount ; ++ i ) {
679681 let type = i < argumentCount
680682 ? this . resolveType ( // reports
681683 typeArgumentNodes ! [ i ] ,
682684 ctxElement ,
683- ctxTypes ,
685+ oldCtxTypes , // update
684686 reportMode
685687 )
686688 : this . resolveType ( // reports
687689 assert ( typeParameters [ i ] . defaultType ) ,
688690 ctxElement ,
689- ctxTypes ,
691+ uniqueMap < string , Type > ( ctxTypes ) , // don't update
690692 reportMode
691693 ) ;
692694 if ( ! type ) return null ;
@@ -2796,7 +2798,7 @@ export class Resolver extends DiagnosticEmitter {
27962798 assert ( prototype . typeParameterNodes ) ,
27972799 typeArgumentNodes ,
27982800 ctxElement ,
2799- ctxTypes ,
2801+ ctxTypes , // update
28002802 reportNode ,
28012803 reportMode
28022804 ) ;
@@ -3272,7 +3274,7 @@ export class Resolver extends DiagnosticEmitter {
32723274 assert ( prototype . typeParameterNodes ) , // must be present if generic
32733275 typeArgumentNodes ,
32743276 ctxElement ,
3275- ctxTypes ,
3277+ ctxTypes , // update
32763278 reportNode ,
32773279 reportMode
32783280 ) ;
0 commit comments