type BindingMap = HashMap<Name,binding_info>;
// Trait method resolution
-pub type TraitMap = HashMap<NodeId,@RefCell<~[DefId]>>;
+pub type TraitMap = HashMap<NodeId, ~[DefId]>;
// This is the replacement export map. It maps a module to all of the exports
// within.
// the field name so that we can do some nice error reporting
// later on in typeck.
let traits = self.search_for_traits_containing_method(ident);
- self.trait_map.insert(expr.id, @RefCell::new(traits));
+ self.trait_map.insert(expr.id, traits);
}
ExprMethodCall(_, ident, _, _) => {
debug!("(recording candidate traits for expr) recording \
traits for {}",
expr.id);
let traits = self.search_for_traits_containing_method(ident);
- self.trait_map.insert(expr.id, @RefCell::new(traits));
+ self.trait_map.insert(expr.id, traits);
}
_ => {
// Nothing to do.
use middle::subst::Subst;
-use middle::resolve;
use middle::ty::*;
use middle::ty;
use middle::typeck::astconv::AstConv;
// If the method being called is associated with a trait, then
// find all the impls of that trait. Each of those are
// candidates.
- let trait_map: &resolve::TraitMap = &self.fcx.ccx.trait_map;
- let opt_applicable_traits = trait_map.find(&self.expr.id);
- for applicable_traits in opt_applicable_traits.iter() {
- let applicable_traits = applicable_traits.borrow();
- for trait_did in applicable_traits.get().iter() {
- ty::populate_implementations_for_trait_if_necessary(
- self.tcx(),
- *trait_did);
-
- // Look for explicit implementations.
- let trait_impls = self.tcx().trait_impls.borrow();
- let opt_impl_infos = trait_impls.get().find(trait_did);
- for impl_infos in opt_impl_infos.iter() {
- let impl_infos = impl_infos.borrow();
- for impl_info in impl_infos.get().iter() {
- let mut extension_candidates =
- self.extension_candidates.borrow_mut();
- self.push_candidates_from_impl(
- extension_candidates.get(), *impl_info);
-
- }
- }
+ let opt_applicable_traits = self.fcx.ccx.trait_map.find(&self.expr.id);
+ for applicable_traits in opt_applicable_traits.move_iter() {
+ for trait_did in applicable_traits.iter() {
+ self.push_extension_candidate(*trait_did);
}
}
}