@@ -13,6 +13,7 @@ use rustc_hash::FxHashSet;
13
13
pub mod builder;
14
14
mod builtin_traits;
15
15
mod env_elaborator;
16
+ mod generalize;
16
17
pub mod program_clauses;
17
18
18
19
/// For auto-traits, we generate a default rule for every struct,
@@ -436,80 +437,3 @@ fn program_clauses_for_env<'db, I: Interner>(
436
437
437
438
clauses. extend ( closure. drain ( ) )
438
439
}
439
-
440
- mod generalize {
441
- use chalk_engine:: fallible:: Fallible ;
442
- use chalk_ir:: {
443
- fold:: { Fold , Folder } ,
444
- interner:: Interner ,
445
- Binders , BoundVar , DebruijnIndex , Lifetime , LifetimeData , ParameterKind , Ty , TyData ,
446
- } ;
447
- use std:: collections:: HashMap ;
448
-
449
- pub struct Generalize < ' i , I : Interner > {
450
- binders : Vec < ParameterKind < ( ) > > ,
451
- mapping : HashMap < BoundVar , usize > ,
452
- interner : & ' i I ,
453
- }
454
-
455
- impl < I : Interner > Generalize < ' _ , I > {
456
- pub fn apply < T : Fold < I , I > > ( interner : & I , value : & T ) -> Binders < T :: Result > {
457
- let mut generalize = Generalize {
458
- binders : Vec :: new ( ) ,
459
- mapping : HashMap :: new ( ) ,
460
- interner,
461
- } ;
462
- let value = value
463
- . fold_with ( & mut generalize, DebruijnIndex :: INNERMOST )
464
- . unwrap ( ) ;
465
- Binders {
466
- binders : generalize. binders ,
467
- value,
468
- }
469
- }
470
- }
471
-
472
- impl < ' i , I : Interner > Folder < ' i , I > for Generalize < ' i , I > {
473
- fn as_dyn ( & mut self ) -> & mut dyn Folder < ' i , I > {
474
- self
475
- }
476
-
477
- fn fold_free_var_ty (
478
- & mut self ,
479
- bound_var : BoundVar ,
480
- outer_binder : DebruijnIndex ,
481
- ) -> Fallible < Ty < I > > {
482
- let binder_vec = & mut self . binders ;
483
- let new_index = self . mapping . entry ( bound_var) . or_insert_with ( || {
484
- let i = binder_vec. len ( ) ;
485
- binder_vec. push ( ParameterKind :: Ty ( ( ) ) ) ;
486
- i
487
- } ) ;
488
- let new_var = BoundVar :: new ( outer_binder, * new_index) ;
489
- Ok ( TyData :: BoundVar ( new_var) . intern ( self . interner ( ) ) )
490
- }
491
-
492
- fn fold_free_var_lifetime (
493
- & mut self ,
494
- bound_var : BoundVar ,
495
- outer_binder : DebruijnIndex ,
496
- ) -> Fallible < Lifetime < I > > {
497
- let binder_vec = & mut self . binders ;
498
- let new_index = self . mapping . entry ( bound_var) . or_insert_with ( || {
499
- let i = binder_vec. len ( ) ;
500
- binder_vec. push ( ParameterKind :: Ty ( ( ) ) ) ;
501
- i
502
- } ) ;
503
- let new_var = BoundVar :: new ( outer_binder, * new_index) ;
504
- Ok ( LifetimeData :: BoundVar ( new_var) . intern ( self . interner ( ) ) )
505
- }
506
-
507
- fn interner ( & self ) -> & ' i I {
508
- self . interner
509
- }
510
-
511
- fn target_interner ( & self ) -> & ' i I {
512
- self . interner
513
- }
514
- }
515
- }
0 commit comments