]> git.lizzy.rs Git - rust.git/commitdiff
use `map_bound` instead of `skip_binder`
authorleonardo.yvens <leoyvens@gmail.com>
Tue, 16 Jan 2018 21:20:26 +0000 (19:20 -0200)
committerleonardo.yvens <leoyvens@gmail.com>
Wed, 28 Feb 2018 15:33:14 +0000 (12:33 -0300)
src/librustc_typeck/check/wfcheck.rs

index a16b806b6f125c353b1c147d7369fe29c1e83183..7648feea457d017e0b001d54e80224860dcda79a 100644 (file)
@@ -277,7 +277,6 @@ fn check_type_defn<F>(&mut self, item: &hir::Item, all_sized: bool, mut lookup_f
 
     fn check_trait(&mut self, item: &hir::Item) {
         let trait_def_id = self.tcx.hir.local_def_id(item.id);
-        
         self.for_item(item).with_fcx(|fcx, _| {
             self.check_trait_where_clauses(fcx, item.span, trait_def_id);
             vec![]
@@ -421,14 +420,13 @@ fn inner_check_where_clauses<'fcx, 'tcx>(&mut self,
                 if skip { continue; }
                 substituted_predicates.push(match pred {
                     // In trait predicates, substitute defaults only for the LHS.
-                    ty::Predicate::Trait(trait_pred) => {
-                        let t_pred = trait_pred.skip_binder();
-                        let self_ty = t_pred.self_ty().subst(fcx.tcx, substs);
-                        let mut trait_substs = t_pred.trait_ref.substs.to_vec();
-                        trait_substs[0] = self_ty.into();
-                        let trait_ref = ty::TraitRef::new(t_pred.def_id(),
-                                                          fcx.tcx.intern_substs(&trait_substs));
-                        ty::Predicate::Trait(ty::Binder(trait_ref).to_poly_trait_predicate())
+                    ty::Predicate::Trait(t_pred) => {
+                        let trait_ref = t_pred.map_bound(|t_pred| {
+                            let mut trait_subs = t_pred.trait_ref.substs.to_vec();
+                            trait_subs[0] = t_pred.self_ty().subst(fcx.tcx, substs).into();
+                            ty::TraitRef::new(t_pred.def_id(), fcx.tcx.intern_substs(&trait_subs))
+                        });
+                        ty::Predicate::Trait(trait_ref.to_poly_trait_predicate())
                     }
                     _ => pred.subst(fcx.tcx, substs)
                 });