@@ -427,13 +427,13 @@ mod generalize {
427
427
use chalk_ir:: {
428
428
fold:: { Fold , Folder } ,
429
429
interner:: Interner ,
430
- Binders , Lifetime , LifetimeData , ParameterKind , Ty , TyData ,
430
+ Binders , BoundVar , DebruijnIndex , Lifetime , LifetimeData , ParameterKind , Ty , TyData ,
431
431
} ;
432
432
use std:: collections:: HashMap ;
433
433
434
434
pub struct Generalize < ' i , I : Interner > {
435
435
binders : Vec < ParameterKind < ( ) > > ,
436
- mapping : HashMap < usize , usize > ,
436
+ mapping : HashMap < BoundVar , usize > ,
437
437
interner : & ' i I ,
438
438
}
439
439
@@ -444,7 +444,9 @@ mod generalize {
444
444
mapping : HashMap :: new ( ) ,
445
445
interner,
446
446
} ;
447
- let value = value. fold_with ( & mut generalize, 0 ) . unwrap ( ) ;
447
+ let value = value
448
+ . fold_with ( & mut generalize, DebruijnIndex :: INNERMOST )
449
+ . unwrap ( ) ;
448
450
Binders {
449
451
binders : generalize. binders ,
450
452
value,
@@ -457,28 +459,34 @@ mod generalize {
457
459
self
458
460
}
459
461
460
- fn fold_free_var_ty ( & mut self , depth : usize , binders : usize ) -> Fallible < Ty < I > > {
462
+ fn fold_free_var_ty (
463
+ & mut self ,
464
+ bound_var : BoundVar ,
465
+ outer_binder : DebruijnIndex ,
466
+ ) -> Fallible < Ty < I > > {
461
467
let binder_vec = & mut self . binders ;
462
- let new_index = self . mapping . entry ( depth ) . or_insert_with ( || {
468
+ let new_index = self . mapping . entry ( bound_var ) . or_insert_with ( || {
463
469
let i = binder_vec. len ( ) ;
464
470
binder_vec. push ( ParameterKind :: Ty ( ( ) ) ) ;
465
471
i
466
472
} ) ;
467
- Ok ( TyData :: BoundVar ( * new_index + binders) . intern ( self . interner ( ) ) )
473
+ let new_var = BoundVar :: new ( outer_binder, * new_index) ;
474
+ Ok ( TyData :: BoundVar ( new_var) . intern ( self . interner ( ) ) )
468
475
}
469
476
470
477
fn fold_free_var_lifetime (
471
478
& mut self ,
472
- depth : usize ,
473
- binders : usize ,
479
+ bound_var : BoundVar ,
480
+ outer_binder : DebruijnIndex ,
474
481
) -> Fallible < Lifetime < I > > {
475
482
let binder_vec = & mut self . binders ;
476
- let new_index = self . mapping . entry ( depth ) . or_insert_with ( || {
483
+ let new_index = self . mapping . entry ( bound_var ) . or_insert_with ( || {
477
484
let i = binder_vec. len ( ) ;
478
485
binder_vec. push ( ParameterKind :: Ty ( ( ) ) ) ;
479
486
i
480
487
} ) ;
481
- Ok ( LifetimeData :: BoundVar ( * new_index + binders) . intern ( self . interner ( ) ) )
488
+ let new_var = BoundVar :: new ( outer_binder, * new_index) ;
489
+ Ok ( LifetimeData :: BoundVar ( new_var) . intern ( self . interner ( ) ) )
482
490
}
483
491
484
492
fn interner ( & self ) -> & ' i I {
0 commit comments