diff options
| author | Florian Hahn <flo@fhahn.com> | 2016-01-03 00:11:48 +0100 |
|---|---|---|
| committer | Florian Hahn <flo@fhahn.com> | 2016-01-03 00:11:48 +0100 |
| commit | a8d60708ecabc90ca4b72e12483159339a0b40ce (patch) | |
| tree | c24b5c03dc1977e3c3267f3ad91dafa3ba45def9 | |
| parent | 25e4389866d8a4483d7a20b5d3a72c2b00dd9c21 (diff) | |
| download | rust-a8d60708ecabc90ca4b72e12483159339a0b40ce.tar.gz rust-a8d60708ecabc90ca4b72e12483159339a0b40ce.zip | |
Refactor candidate selection
| -rw-r--r-- | src/librustc/middle/traits/error_reporting.rs | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/librustc/middle/traits/error_reporting.rs b/src/librustc/middle/traits/error_reporting.rs index adf0fdee182..038c414662a 100644 --- a/src/librustc/middle/traits/error_reporting.rs +++ b/src/librustc/middle/traits/error_reporting.rs @@ -240,23 +240,24 @@ pub fn report_selection_error<'a, 'tcx>(infcx: &InferCtxt<'a, 'tcx>, let mut impl_candidates = Vec::new(); let trait_def = infcx.tcx.lookup_trait_def(trait_ref.def_id()); - trait_def.for_each_impl(infcx.tcx, |def_id| { - let imp = infcx.tcx.impl_trait_ref(def_id).unwrap(); - if let Some(simp) = simp { + match simp { + Some(simp) => trait_def.for_each_impl(infcx.tcx, |def_id| { + let imp = infcx.tcx.impl_trait_ref(def_id).unwrap(); let imp_simp = fast_reject::simplify_type(infcx.tcx, imp.self_ty(), true); if let Some(imp_simp) = imp_simp { - if simp == imp_simp { - impl_candidates.push(imp); + if simp != imp_simp { + return; } - } else { - impl_candidates.push(imp); } - } else { impl_candidates.push(imp); - } - }); + }), + None => trait_def.for_each_impl(infcx.tcx, |def_id| { + impl_candidates.push( + infcx.tcx.impl_trait_ref(def_id).unwrap()); + }) + }; if impl_candidates.len() > 0 { err.fileline_help( @@ -266,7 +267,7 @@ pub fn report_selection_error<'a, 'tcx>(infcx: &InferCtxt<'a, 'tcx>, let end = cmp::min(4, impl_candidates.len()); for candidate in &impl_candidates[0..end] { err.fileline_help(obligation.cause.span, - candidate); + &format!(" {:?}", candidate)); } if impl_candidates.len() > 4 { err.fileline_help(obligation.cause.span, |
