diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 22974ebd711d..c7be0b7ca4ca 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -1006,7 +1006,7 @@ pub fn mk_ctxt(s: session::Session, impls: RefCell::new(HashMap::new()), used_unsafe: @mut HashSet::new(), used_mut_nodes: @mut HashSet::new(), - impl_vtables: @mut HashMap::new(), + impl_vtables: RefCell::new(HashMap::new()), populated_external_types: @mut HashSet::new(), populated_external_traits: @mut HashSet::new(), @@ -3980,8 +3980,9 @@ pub fn lookup_item_type(cx: ctxt, pub fn lookup_impl_vtables(cx: ctxt, did: ast::DefId) -> typeck::impl_res { + let mut impl_vtables = cx.impl_vtables.borrow_mut(); lookup_locally_or_in_crate_store( - "impl_vtables", did, cx.impl_vtables, + "impl_vtables", did, impl_vtables.get(), || csearch::get_impl_vtables(cx, did) ) } diff --git a/src/librustc/middle/typeck/check/vtable.rs b/src/librustc/middle/typeck/check/vtable.rs index 5ddb2c78d192..bdcbf4e128a7 100644 --- a/src/librustc/middle/typeck/check/vtable.rs +++ b/src/librustc/middle/typeck/check/vtable.rs @@ -778,7 +778,9 @@ pub fn resolve_impl(ccx: @mut CrateCtxt, self_vtables: self_vtable_res }; let impl_def_id = ast_util::local_def(impl_item.id); - ccx.tcx.impl_vtables.insert(impl_def_id, res); + + let mut impl_vtables = ccx.tcx.impl_vtables.borrow_mut(); + impl_vtables.get().insert(impl_def_id, res); } impl visit::Visitor<()> for @FnCtxt { diff --git a/src/librustc/middle/typeck/mod.rs b/src/librustc/middle/typeck/mod.rs index c606e264865b..10f9cc289ea5 100644 --- a/src/librustc/middle/typeck/mod.rs +++ b/src/librustc/middle/typeck/mod.rs @@ -68,6 +68,7 @@ use util::common::time; use util::ppaux::Repr; use util::ppaux; +use std::cell::RefCell; use std::hashmap::HashMap; use std::result; use extra::list::List; @@ -225,7 +226,7 @@ impl Repr for impl_res { } } -pub type impl_vtable_map = @mut HashMap; +pub type impl_vtable_map = RefCell>; pub struct CrateCtxt { // A mapping from method call sites to traits that have that method.