librustc: De-@mut the item variance map in the type context

This commit is contained in:
Patrick Walton 2013-12-19 18:40:17 -08:00
parent 7f5e57a5a9
commit 5b98c66593
2 changed files with 11 additions and 7 deletions

View File

@ -321,7 +321,7 @@ struct ctxt_ {
// Maps from def-id of a type or region parameter to its
// (inferred) variance.
item_variance_map: @mut HashMap<ast::DefId, @ItemVariances>,
item_variance_map: RefCell<HashMap<ast::DefId, @ItemVariances>>,
// A mapping from the def ID of an enum or struct type to the def ID
// of the method that implements its destructor. If the type is not
@ -975,7 +975,7 @@ pub fn mk_ctxt(s: session::Session,
-> ctxt {
@ctxt_ {
named_region_map: named_region_map,
item_variance_map: @mut HashMap::new(),
item_variance_map: RefCell::new(HashMap::new()),
diag: s.diagnostic(),
interner: RefCell::new(HashMap::new()),
next_id: @mut primitives::LAST_PRIMITIVE_ID,
@ -4483,8 +4483,9 @@ pub fn visitor_object_ty(tcx: ctxt,
}
pub fn item_variances(tcx: ctxt, item_id: ast::DefId) -> @ItemVariances {
let mut item_variance_map = tcx.item_variance_map.borrow_mut();
lookup_locally_or_in_crate_store(
"item_variance_map", item_id, tcx.item_variance_map,
"item_variance_map", item_id, item_variance_map.get(),
|| @csearch::get_item_variances(tcx.cstore, item_id))
}

View File

@ -363,7 +363,10 @@ impl<'a> Visitor<()> for TermsContext<'a> {
// "invalid item id" from "item id with no
// parameters".
if self.num_inferred() == inferreds_on_entry {
let newly_added = self.tcx.item_variance_map.insert(
let mut item_variance_map = self.tcx
.item_variance_map
.borrow_mut();
let newly_added = item_variance_map.get().insert(
ast_util::local_def(item.id),
self.empty_variances);
assert!(newly_added);
@ -876,7 +879,6 @@ impl<'a> SolveContext<'a> {
// item id).
let tcx = self.terms_cx.tcx;
let item_variance_map = tcx.item_variance_map;
let solutions = &self.solutions;
let inferred_infos = &self.terms_cx.inferred_infos;
let mut index = 0;
@ -919,8 +921,9 @@ impl<'a> SolveContext<'a> {
tcx.sess.span_err(ast_map::node_span(tcx.items, item_id), found);
}
let newly_added = item_variance_map.insert(item_def_id,
@item_variances);
let mut item_variance_map = tcx.item_variance_map.borrow_mut();
let newly_added = item_variance_map.get().insert(item_def_id,
@item_variances);
assert!(newly_added);
}
}