@@ -63,18 +63,13 @@ pub(crate) fn infer_query(db: &dyn HirDatabase, def: DefWithBodyId) -> Arc<Infer
63
63
let body = db. body ( def) ;
64
64
let mut ctx = InferenceContext :: new ( db, def, & body, resolver) ;
65
65
66
- crate :: tls:: set_current_program ( db, || {
67
- match def {
68
- DefWithBodyId :: ConstId ( c) => ctx. collect_const ( & db. const_data ( c) ) ,
69
- DefWithBodyId :: FunctionId ( f) => {
70
- eprintln ! ( ) ;
71
- ctx. collect_fn ( f) ;
72
- }
73
- DefWithBodyId :: StaticId ( s) => ctx. collect_static ( & db. static_data ( s) ) ,
74
- }
66
+ match def {
67
+ DefWithBodyId :: ConstId ( c) => ctx. collect_const ( & db. const_data ( c) ) ,
68
+ DefWithBodyId :: FunctionId ( f) => ctx. collect_fn ( f) ,
69
+ DefWithBodyId :: StaticId ( s) => ctx. collect_static ( & db. static_data ( s) ) ,
70
+ }
75
71
76
- ctx. infer_body ( ) ;
77
- } ) ;
72
+ ctx. infer_body ( ) ;
78
73
79
74
Arc :: new ( ctx. resolve_all ( ) )
80
75
}
@@ -481,46 +476,41 @@ impl<'a> InferenceContext<'a> {
481
476
} else {
482
477
& * data. ret_type
483
478
} ;
484
- // let return_ty = dbg!(self.make_ty_with_mode(return_ty, ImplTraitLoweringMode::Disallowed)); // FIXME implement RPIT
485
479
let return_ty = self . make_ty_with_mode ( return_ty, ImplTraitLoweringMode :: Opaque ) ;
486
480
self . return_ty = return_ty;
487
481
488
- if let Some ( rpits) = dbg ! ( self . db. return_type_impl_traits( func) ) {
489
- let mut rpit_vars = Vec :: new ( ) ;
482
+ if let Some ( rpits) = self . db . return_type_impl_traits ( func) {
490
483
// RPIT opaque types use substitution of their parent function.
491
- let fn_placeholders = dbg ! ( TyBuilder :: placeholder_subst( self . db, func) ) ;
492
- let rpits = dbg ! ( ( & * rpits) . clone( ) . substitute( Interner , & fn_placeholders) ) ;
493
- for rpit in rpits. impl_traits {
494
- let var = self . table . new_type_var ( ) ;
495
- rpit_vars. push ( var. clone ( ) ) ;
496
- let self_var = Substitution :: from1 ( Interner , var) ;
497
- for predicate in dbg ! ( rpit. bounds. substitute( Interner , & self_var) ) {
498
- let ( predicate, binders) = predicate. into_value_and_skipped_binders ( ) ;
499
- always ! ( binders. len( Interner ) == 0 ) ; // quantified where clauses not yet handled
500
- self . push_obligation ( predicate. cast ( Interner ) ) ;
501
- }
502
- }
503
-
484
+ let fn_placeholders = TyBuilder :: placeholder_subst ( self . db , func) ;
504
485
self . return_ty = fold_tys (
505
- dbg ! ( self . return_ty. clone( ) ) ,
506
- |ty, _outer_binder| match * ty. kind ( Interner ) {
507
- TyKind :: OpaqueType ( opaque_ty_id, _) => {
508
- let impl_trait_id =
509
- self . db . lookup_intern_impl_trait_id ( opaque_ty_id. into ( ) ) ;
510
- match impl_trait_id {
511
- ImplTraitId :: ReturnTypeImplTrait ( _, idx) => {
512
- rpit_vars[ idx as usize ] . clone ( )
513
- }
514
- _ => unreachable ! ( ) ,
515
- }
486
+ self . return_ty . clone ( ) ,
487
+ |ty, _| {
488
+ let opaque_ty_id = match ty. kind ( Interner ) {
489
+ TyKind :: OpaqueType ( opaque_ty_id, _) => * opaque_ty_id,
490
+ _ => return ty,
491
+ } ;
492
+ let idx = match self . db . lookup_intern_impl_trait_id ( opaque_ty_id. into ( ) ) {
493
+ ImplTraitId :: ReturnTypeImplTrait ( _, idx) => idx,
494
+ _ => unreachable ! ( ) ,
495
+ } ;
496
+ let bounds = ( * rpits) . map_ref ( |rpits| {
497
+ rpits. impl_traits [ idx as usize ] . bounds . map_ref ( |it| it. into_iter ( ) )
498
+ } ) ;
499
+ let var = self . table . new_type_var ( ) ;
500
+ let self_var = Substitution :: from1 ( Interner , var. clone ( ) ) ;
501
+ for bound in bounds {
502
+ let predicate =
503
+ bound. map ( |it| it. cloned ( ) ) . substitute ( Interner , & fn_placeholders) ;
504
+ let ( var_predicate, binders) = predicate
505
+ . substitute ( Interner , & self_var)
506
+ . into_value_and_skipped_binders ( ) ;
507
+ always ! ( binders. len( Interner ) == 0 ) ; // quantified where clauses not yet handled
508
+ self . push_obligation ( var_predicate. cast ( Interner ) ) ;
516
509
}
517
- _ => ty ,
510
+ var
518
511
} ,
519
512
DebruijnIndex :: INNERMOST ,
520
513
) ;
521
- dbg ! ( & self . return_ty) ;
522
- dbg ! ( & self . table) ;
523
- compile_error ! ( "skip ci build" ) ;
524
514
}
525
515
}
526
516
0 commit comments