don't use a mutable field where parameter passing will do
This commit is contained in:
parent
eedaa94e33
commit
5a6019429f
1 changed files with 20 additions and 17 deletions
|
|
@ -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,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue