Skip to content

Commit 3950471

Browse files
committed
resolve: Don't use @refcell in trait_map, nothing modifies its entries.
1 parent 9d55326 commit 3950471

File tree

2 files changed

+7
-26
lines changed

2 files changed

+7
-26
lines changed

src/librustc/middle/resolve.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ struct binding_info {
4646
type BindingMap = HashMap<Name,binding_info>;
4747

4848
// Trait method resolution
49-
pub type TraitMap = HashMap<NodeId,@RefCell<~[DefId]>>;
49+
pub type TraitMap = HashMap<NodeId, ~[DefId]>;
5050

5151
// This is the replacement export map. It maps a module to all of the exports
5252
// within.
@@ -5255,14 +5255,14 @@ impl Resolver {
52555255
// the field name so that we can do some nice error reporting
52565256
// later on in typeck.
52575257
let traits = self.search_for_traits_containing_method(ident);
5258-
self.trait_map.insert(expr.id, @RefCell::new(traits));
5258+
self.trait_map.insert(expr.id, traits);
52595259
}
52605260
ExprMethodCall(_, ident, _, _) => {
52615261
debug!("(recording candidate traits for expr) recording \
52625262
traits for {}",
52635263
expr.id);
52645264
let traits = self.search_for_traits_containing_method(ident);
5265-
self.trait_map.insert(expr.id, @RefCell::new(traits));
5265+
self.trait_map.insert(expr.id, traits);
52665266
}
52675267
_ => {
52685268
// Nothing to do.

src/librustc/middle/typeck/check/method.rs

+4-23
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ obtained the type `Foo`, we would never match this method.
8181

8282

8383
use middle::subst::Subst;
84-
use middle::resolve;
8584
use middle::ty::*;
8685
use middle::ty;
8786
use middle::typeck::astconv::AstConv;
@@ -396,28 +395,10 @@ impl<'a> LookupContext<'a> {
396395
// If the method being called is associated with a trait, then
397396
// find all the impls of that trait. Each of those are
398397
// candidates.
399-
let trait_map: &resolve::TraitMap = &self.fcx.ccx.trait_map;
400-
let opt_applicable_traits = trait_map.find(&self.expr.id);
401-
for applicable_traits in opt_applicable_traits.iter() {
402-
let applicable_traits = applicable_traits.borrow();
403-
for trait_did in applicable_traits.get().iter() {
404-
ty::populate_implementations_for_trait_if_necessary(
405-
self.tcx(),
406-
*trait_did);
407-
408-
// Look for explicit implementations.
409-
let trait_impls = self.tcx().trait_impls.borrow();
410-
let opt_impl_infos = trait_impls.get().find(trait_did);
411-
for impl_infos in opt_impl_infos.iter() {
412-
let impl_infos = impl_infos.borrow();
413-
for impl_info in impl_infos.get().iter() {
414-
let mut extension_candidates =
415-
self.extension_candidates.borrow_mut();
416-
self.push_candidates_from_impl(
417-
extension_candidates.get(), *impl_info);
418-
419-
}
420-
}
398+
let opt_applicable_traits = self.fcx.ccx.trait_map.find(&self.expr.id);
399+
for applicable_traits in opt_applicable_traits.move_iter() {
400+
for trait_did in applicable_traits.iter() {
401+
self.push_extension_candidate(*trait_did);
421402
}
422403
}
423404
}

0 commit comments

Comments
 (0)