diff --git a/src/librustc/metadata/tyencode.rs b/src/librustc/metadata/tyencode.rs index 6896b951c777..877ae28a2ce1 100644 --- a/src/librustc/metadata/tyencode.rs +++ b/src/librustc/metadata/tyencode.rs @@ -60,17 +60,27 @@ fn mywrite(w: @mut MemWriter, fmt: &fmt::Arguments) { pub fn enc_ty(w: @mut MemWriter, cx: @ctxt, t: ty::t) { match cx.abbrevs { ac_no_abbrevs => { - let result_str = match cx.tcx.short_names_cache.find(&t) { - Some(&s) => s, + let result_str_opt; + { + let short_names_cache = cx.tcx.short_names_cache.borrow(); + result_str_opt = short_names_cache.get() + .find(&t) + .map(|result| *result); + } + let result_str = match result_str_opt { + Some(s) => s, None => { let wr = @mut MemWriter::new(); enc_sty(wr, cx, &ty::get(t).sty); let s = str::from_utf8(*wr.inner_ref()).to_managed(); - cx.tcx.short_names_cache.insert(t, s); + let mut short_names_cache = cx.tcx + .short_names_cache + .borrow_mut(); + short_names_cache.get().insert(t, s); s - } - }; - w.write(result_str.as_bytes()); + } + }; + w.write(result_str.as_bytes()); } ac_use_abbrevs(abbrevs) => { match abbrevs.find(&t) { diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 84ad8099892d..7f995570eed9 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -307,7 +307,7 @@ struct ctxt_ { freevars: freevars::freevar_map, tcache: type_cache, rcache: creader_cache, - short_names_cache: @mut HashMap, + short_names_cache: RefCell>, needs_unwind_cleanup_cache: @mut HashMap, tc_cache: @mut HashMap, ast_ty_to_ty_cache: @mut HashMap, @@ -993,7 +993,7 @@ pub fn mk_ctxt(s: session::Session, freevars: freevars, tcache: @mut HashMap::new(), rcache: mk_rcache(), - short_names_cache: new_ty_hash(), + short_names_cache: RefCell::new(HashMap::new()), needs_unwind_cleanup_cache: new_ty_hash(), tc_cache: @mut HashMap::new(), ast_ty_to_ty_cache: @mut HashMap::new(),