@@ -484,22 +484,16 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> {
484484
485485 debug ! ( "assemble_inherent_impl_probe {:?}" , impl_def_id) ;
486486
487- let items = self . impl_or_trait_item ( impl_def_id) ;
488- if items. len ( ) < 1 {
489- return // No method with correct name on this impl
490- }
491-
492- if self . looking_for . is_method_name ( ) {
493- let item = items[ 0 ] ;
494-
487+ for item in self . impl_or_trait_item ( impl_def_id) {
495488 if !self . has_applicable_self ( & item) {
496489 // No receiver declared. Not a candidate.
497- return self . record_static_candidate ( ImplSource ( impl_def_id) ) ;
490+ self . record_static_candidate ( ImplSource ( impl_def_id) ) ;
491+ continue
498492 }
499493
500494 if !item. vis . is_accessible_from ( self . body_id , & self . tcx . map ) {
501495 self . private_candidate = Some ( item. def ( ) ) ;
502- return ;
496+ continue
503497 }
504498
505499 let ( impl_ty, impl_substs) = self . impl_ty_and_substs ( impl_def_id) ;
@@ -523,41 +517,6 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> {
523517 kind : InherentImplCandidate ( impl_substs, obligations) ,
524518 import_id : self . import_id ,
525519 } ) ;
526- } else {
527- for item in items {
528- if !self . has_applicable_self ( & item) {
529- // No receiver declared. Not a candidate.
530- self . record_static_candidate ( ImplSource ( impl_def_id) ) ;
531- continue
532- }
533-
534- if !item. vis . is_accessible_from ( self . body_id , & self . tcx . map ) {
535- self . private_candidate = Some ( item. def ( ) ) ;
536- continue
537- }
538-
539- let ( impl_ty, impl_substs) = self . impl_ty_and_substs ( impl_def_id) ;
540- let impl_ty = impl_ty. subst ( self . tcx , impl_substs) ;
541-
542- // Determine the receiver type that the method itself expects.
543- let xform_self_ty = self . xform_self_ty ( & item, impl_ty, impl_substs) ;
544-
545- // We can't use normalize_associated_types_in as it will pollute the
546- // fcx's fulfillment context after this probe is over.
547- let cause = traits:: ObligationCause :: misc ( self . span , self . body_id ) ;
548- let mut selcx = & mut traits:: SelectionContext :: new ( self . fcx ) ;
549- let traits:: Normalized { value : xform_self_ty, obligations } =
550- traits:: normalize ( selcx, cause, & xform_self_ty) ;
551- debug ! ( "assemble_inherent_impl_probe: xform_self_ty = {:?}" ,
552- xform_self_ty) ;
553-
554- self . inherent_candidates . push ( Candidate {
555- xform_self_ty : xform_self_ty,
556- item : item,
557- kind : InherentImplCandidate ( impl_substs, obligations) ,
558- import_id : self . import_id ,
559- } ) ;
560- }
561520 }
562521 }
563522
@@ -651,16 +610,12 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> {
651610
652611 let tcx = self . tcx ;
653612 for bound_trait_ref in traits:: transitive_bounds ( tcx, bounds) {
654- let items = self . impl_or_trait_item ( bound_trait_ref. def_id ( ) ) ;
655- if items. len ( ) < 1 {
656- continue
657- }
658- let item = items[ 0 ] ;
659-
660- if !self . has_applicable_self ( & item) {
661- self . record_static_candidate ( TraitSource ( bound_trait_ref. def_id ( ) ) ) ;
662- } else {
663- mk_cand ( self , bound_trait_ref, item) ;
613+ for item in self . impl_or_trait_item ( bound_trait_ref. def_id ( ) ) {
614+ if !self . has_applicable_self ( & item) {
615+ self . record_static_candidate ( TraitSource ( bound_trait_ref. def_id ( ) ) ) ;
616+ } else {
617+ mk_cand ( self , bound_trait_ref, item) ;
618+ }
664619 }
665620 }
666621 }
@@ -717,26 +672,22 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> {
717672 debug ! ( "assemble_extension_candidates_for_trait(trait_def_id={:?})" ,
718673 trait_def_id) ;
719674
720- let items = self . impl_or_trait_item ( trait_def_id) ;
721- if items. len ( ) < 1 {
722- return Ok ( ( ) ) ;
723- }
724- let item = items[ 0 ] ;
725-
726- // Check whether `trait_def_id` defines a method with suitable name:
727- if !self . has_applicable_self ( & item) {
728- debug ! ( "method has inapplicable self" ) ;
729- self . record_static_candidate ( TraitSource ( trait_def_id) ) ;
730- return Ok ( ( ) ) ;
731- }
675+ for item in self . impl_or_trait_item ( trait_def_id) {
676+ // Check whether `trait_def_id` defines a method with suitable name:
677+ if !self . has_applicable_self ( & item) {
678+ debug ! ( "method has inapplicable self" ) ;
679+ self . record_static_candidate ( TraitSource ( trait_def_id) ) ;
680+ continue ;
681+ }
732682
733- self . assemble_extension_candidates_for_trait_impls ( trait_def_id, item. clone ( ) ) ;
683+ self . assemble_extension_candidates_for_trait_impls ( trait_def_id, item. clone ( ) ) ;
734684
735- self . assemble_closure_candidates ( trait_def_id, item. clone ( ) ) ?;
685+ self . assemble_closure_candidates ( trait_def_id, item. clone ( ) ) ?;
736686
737- self . assemble_projection_candidates ( trait_def_id, item. clone ( ) ) ;
687+ self . assemble_projection_candidates ( trait_def_id, item. clone ( ) ) ;
738688
739- self . assemble_where_clause_candidates ( trait_def_id, item. clone ( ) ) ;
689+ self . assemble_where_clause_candidates ( trait_def_id, item. clone ( ) ) ;
690+ }
740691
741692 Ok ( ( ) )
742693 }
0 commit comments