@@ -1349,24 +1349,16 @@ function initSearch(rawSearchIndex) {
13491349 continue ;
13501350 }
13511351 if ( fnType . id < 0 && queryElem . id < 0 ) {
1352- if ( mgens === null ) {
1353- mgens = new Map ( ) ;
1352+ if ( mgens && mgens . has ( fnType . id ) &&
1353+ mgens . get ( fnType . id ) !== queryElem . id ) {
1354+ continue ;
13541355 }
1355- const alreadyAssigned = mgens . has ( fnType . id ) ;
1356- if ( alreadyAssigned ) {
1357- if ( mgens . get ( fnType . id ) !== queryElem . id ) {
1358- continue ;
1359- }
1360- } else {
1361- mgens . set ( fnType . id , queryElem . id ) ;
1362- }
1363- if ( ! solutionCb || solutionCb ( mgens ) ) {
1356+ const mgensScratch = new Map ( mgens ) ;
1357+ mgensScratch . set ( fnType . id , queryElem . id ) ;
1358+ if ( ! solutionCb || solutionCb ( mgensScratch ) ) {
13641359 return true ;
13651360 }
1366- if ( ! alreadyAssigned ) {
1367- mgens . delete ( fnType . id ) ;
1368- }
1369- } else if ( ! solutionCb || solutionCb ( mgens ) ) {
1361+ } else if ( ! solutionCb || solutionCb ( mgens ? new Map ( mgens ) : null ) ) {
13701362 // unifyFunctionTypeIsMatchCandidate already checks that ids match
13711363 return true ;
13721364 }
@@ -1376,34 +1368,26 @@ function initSearch(rawSearchIndex) {
13761368 continue ;
13771369 }
13781370 if ( fnType . id < 0 ) {
1379- if ( mgens === null ) {
1380- mgens = new Map ( ) ;
1381- }
1382- const alreadyAssigned = mgens . has ( fnType . id ) ;
1383- if ( alreadyAssigned ) {
1384- if ( mgens . get ( fnType . id ) !== 0 ) {
1385- continue ;
1386- }
1387- } else {
1388- mgens . set ( fnType . id , 0 ) ;
1371+ if ( mgens && mgens . has ( fnType . id ) &&
1372+ mgens . get ( fnType . id ) !== 0 ) {
1373+ continue ;
13891374 }
1375+ const mgensScratch = new Map ( mgens ) ;
1376+ mgensScratch . set ( fnType . id , 0 ) ;
13901377 if ( unifyFunctionTypes (
13911378 whereClause [ ( - fnType . id ) - 1 ] ,
13921379 queryElems ,
13931380 whereClause ,
1394- mgens ,
1381+ mgensScratch ,
13951382 solutionCb
13961383 ) ) {
13971384 return true ;
13981385 }
1399- if ( ! alreadyAssigned ) {
1400- mgens . delete ( fnType . id ) ;
1401- }
14021386 } else if ( unifyFunctionTypes (
14031387 fnType . generics ,
14041388 queryElems ,
14051389 whereClause ,
1406- mgens ,
1390+ mgens ? new Map ( mgens ) : null ,
14071391 solutionCb
14081392 ) ) {
14091393 return true ;
0 commit comments