Skip to content

Commit 25e4389

Browse files
committed
Use for_each_impl
1 parent ba24fbd commit 25e4389

File tree

1 file changed

+15
-24
lines changed

1 file changed

+15
-24
lines changed

src/librustc/middle/traits/error_reporting.rs

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -234,39 +234,30 @@ pub fn report_selection_error<'a, 'tcx>(infcx: &InferCtxt<'a, 'tcx>,
234234
if let Some(s) = custom_note {
235235
err.fileline_note(obligation.cause.span, &s);
236236
} else {
237-
infcx.tcx.populate_implementations_for_trait_if_necessary(
238-
trait_ref.def_id());
239-
237+
let simp = fast_reject::simplify_type(infcx.tcx,
238+
trait_ref.self_ty(),
239+
true);
240+
let mut impl_candidates = Vec::new();
240241
let trait_def = infcx.tcx.lookup_trait_def(trait_ref.def_id());
241-
let blanket_impls = trait_def.blanket_impls.borrow();
242-
let impl_iter = blanket_impls.iter()
243-
.filter_map(|&id|
244-
infcx.tcx.impl_trait_ref(id));
245-
246-
let nonblanket = trait_def.nonblanket_impls.borrow();
247-
let nonblanket_iter = nonblanket.values()
248-
.flat_map(|ids|
249-
ids.iter().filter_map(|&id|
250-
infcx.tcx.impl_trait_ref(id)));
251-
252-
let simp = fast_reject::simplify_type(infcx.tcx, trait_ref.self_ty(), true);
253-
let nonblanket_iter = nonblanket_iter.filter(|def| {
242+
243+
trait_def.for_each_impl(infcx.tcx, |def_id| {
244+
let imp = infcx.tcx.impl_trait_ref(def_id).unwrap();
254245
if let Some(simp) = simp {
255-
let imp_simp = fast_reject::simplify_type(infcx.tcx, def.self_ty(), true);
246+
let imp_simp = fast_reject::simplify_type(infcx.tcx,
247+
imp.self_ty(),
248+
true);
256249
if let Some(imp_simp) = imp_simp {
257-
simp == imp_simp
250+
if simp == imp_simp {
251+
impl_candidates.push(imp);
252+
}
258253
} else {
259-
false
254+
impl_candidates.push(imp);
260255
}
261256
} else {
262-
true
257+
impl_candidates.push(imp);
263258
}
264259
});
265260

266-
let impl_candidates = impl_iter.chain(nonblanket_iter)
267-
.map(|imp| format!(" {}", imp))
268-
.take(5).collect::<Vec<_>>();
269-
270261
if impl_candidates.len() > 0 {
271262
err.fileline_help(
272263
obligation.cause.span,

0 commit comments

Comments
 (0)