diff --git a/src/librustc/middle/trans/adt.rs b/src/librustc/middle/trans/adt.rs index 9b18b7b1a31a..e06dae6654c8 100644 --- a/src/librustc/middle/trans/adt.rs +++ b/src/librustc/middle/trans/adt.rs @@ -118,13 +118,18 @@ pub fn represent_node(bcx: @Block, node: ast::NodeId) -> @Repr { /// Decides how to represent a given type. pub fn represent_type(cx: &mut CrateContext, t: ty::t) -> @Repr { debug!("Representing: {}", ty_to_str(cx.tcx, t)); - match cx.adt_reprs.find(&t) { - Some(repr) => return *repr, - None => { } + { + let adt_reprs = cx.adt_reprs.borrow(); + match adt_reprs.get().find(&t) { + Some(repr) => return *repr, + None => {} + } } + let repr = @represent_type_uncached(cx, t); debug!("Represented as: {:?}", repr) - cx.adt_reprs.insert(t, repr); + let mut adt_reprs = cx.adt_reprs.borrow_mut(); + adt_reprs.get().insert(t, repr); return repr; } diff --git a/src/librustc/middle/trans/context.rs b/src/librustc/middle/trans/context.rs index 449862c898d1..23e6e897f594 100644 --- a/src/librustc/middle/trans/context.rs +++ b/src/librustc/middle/trans/context.rs @@ -94,7 +94,7 @@ pub struct CrateContext { module_data: RefCell>, lltypes: RefCell>, llsizingtypes: RefCell>, - adt_reprs: HashMap, + adt_reprs: RefCell>, symbol_hasher: Sha256, type_hashcodes: HashMap, type_short_names: HashMap, @@ -205,7 +205,7 @@ impl CrateContext { module_data: RefCell::new(HashMap::new()), lltypes: RefCell::new(HashMap::new()), llsizingtypes: RefCell::new(HashMap::new()), - adt_reprs: HashMap::new(), + adt_reprs: RefCell::new(HashMap::new()), symbol_hasher: symbol_hasher, type_hashcodes: HashMap::new(), type_short_names: HashMap::new(),