diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2017-01-27 17:19:02 -0500 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2017-02-02 20:35:41 -0500 |
| commit | 5a6019429f68d2fa8b92285d7dfdcd2f30fd1303 (patch) | |
| tree | d723ff77311be318b051763fb5aac92b66c3363b /src | |
| parent | eedaa94e330094a84f4df9aa52949515327f8e80 (diff) | |
| download | rust-5a6019429f68d2fa8b92285d7dfdcd2f30fd1303.tar.gz rust-5a6019429f68d2fa8b92285d7dfdcd2f30fd1303.zip | |
don't use a mutable field where parameter passing will do
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_typeck/check/method/probe.rs | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/src/librustc_typeck/check/method/probe.rs b/src/librustc_typeck/check/method/probe.rs index 300caca30fe..201a223c15f 100644 --- a/src/librustc_typeck/check/method/probe.rs +++ b/src/librustc_typeck/check/method/probe.rs @@ -55,7 +55,6 @@ struct ProbeContext<'a, 'gcx: 'a + 'tcx, 'tcx: 'a> { inherent_candidates: Vec<Candidate<'tcx>>, extension_candidates: Vec<Candidate<'tcx>>, impl_dups: FxHashSet<DefId>, - import_id: Option<ast::NodeId>, /// Collects near misses when the candidate functions are missing a `self` keyword and is only /// used for error reporting @@ -351,7 +350,6 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { inherent_candidates: Vec::new(), extension_candidates: Vec::new(), impl_dups: FxHashSet(), - import_id: None, steps: Rc::new(steps), opt_simplified_steps: opt_simplified_steps, static_candidates: Vec::new(), @@ -530,7 +528,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { xform_self_ty: xform_self_ty, item: item, kind: InherentImplCandidate(impl_substs, obligations), - import_id: self.import_id, + import_id: None, }); } } @@ -559,7 +557,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { xform_self_ty: xform_self_ty, item: item, kind: ObjectCandidate, - import_id: this.import_id, + import_id: None, }); }); } @@ -609,7 +607,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { xform_self_ty: xform_self_ty, item: item, kind: WhereClauseCandidate(poly_trait_ref), - import_id: this.import_id, + import_id: None, }); }); } @@ -644,9 +642,8 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { for trait_candidate in applicable_traits { let trait_did = trait_candidate.def_id; if duplicates.insert(trait_did) { - self.import_id = trait_candidate.import_id; - let result = self.assemble_extension_candidates_for_trait(trait_did); - self.import_id = None; + let import_id = trait_candidate.import_id; + let result = self.assemble_extension_candidates_for_trait(import_id, trait_did); result?; } } @@ -658,7 +655,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { let mut duplicates = FxHashSet(); for trait_info in suggest::all_traits(self.ccx) { if duplicates.insert(trait_info.def_id) { - self.assemble_extension_candidates_for_trait(trait_info.def_id)?; + self.assemble_extension_candidates_for_trait(None, trait_info.def_id)?; } } Ok(()) @@ -682,6 +679,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { } fn assemble_extension_candidates_for_trait(&mut self, + import_id: Option<ast::NodeId>, trait_def_id: DefId) -> Result<(), MethodError<'tcx>> { debug!("assemble_extension_candidates_for_trait(trait_def_id={:?})", @@ -695,19 +693,21 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { continue; } - self.assemble_extension_candidates_for_trait_impls(trait_def_id, item.clone()); + self.assemble_extension_candidates_for_trait_impls(import_id, trait_def_id, + item.clone()); - self.assemble_closure_candidates(trait_def_id, item.clone())?; + self.assemble_closure_candidates(import_id, trait_def_id, item.clone())?; - self.assemble_projection_candidates(trait_def_id, item.clone()); + self.assemble_projection_candidates(import_id, trait_def_id, item.clone()); - self.assemble_where_clause_candidates(trait_def_id, item.clone()); + self.assemble_where_clause_candidates(import_id, trait_def_id, item.clone()); } Ok(()) } fn assemble_extension_candidates_for_trait_impls(&mut self, + import_id: Option<ast::NodeId>, trait_def_id: DefId, item: ty::AssociatedItem) { let trait_def = self.tcx.lookup_trait_def(trait_def_id); @@ -751,7 +751,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { xform_self_ty: xform_self_ty, item: item.clone(), kind: ExtensionImplCandidate(impl_def_id, impl_substs, obligations), - import_id: self.import_id, + import_id: import_id, }); }); } @@ -777,6 +777,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { } fn assemble_closure_candidates(&mut self, + import_id: Option<ast::NodeId>, trait_def_id: DefId, item: ty::AssociatedItem) -> Result<(), MethodError<'tcx>> { @@ -840,7 +841,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { xform_self_ty: xform_self_ty, item: item.clone(), kind: TraitCandidate, - import_id: self.import_id, + import_id: import_id, }); } @@ -848,6 +849,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { } fn assemble_projection_candidates(&mut self, + import_id: Option<ast::NodeId>, trait_def_id: DefId, item: ty::AssociatedItem) { debug!("assemble_projection_candidates(\ @@ -895,7 +897,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { xform_self_ty: xform_self_ty, item: item.clone(), kind: TraitCandidate, - import_id: self.import_id, + import_id: import_id, }); } } @@ -903,6 +905,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { } fn assemble_where_clause_candidates(&mut self, + import_id: Option<ast::NodeId>, trait_def_id: DefId, item: ty::AssociatedItem) { debug!("assemble_where_clause_candidates(trait_def_id={:?})", @@ -923,7 +926,7 @@ impl<'a, 'gcx, 'tcx> ProbeContext<'a, 'gcx, 'tcx> { xform_self_ty: xform_self_ty, item: item.clone(), kind: WhereClauseCandidate(poly_bound), - import_id: self.import_id, + import_id: import_id, }); } } |
