summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-12-20 20:18:52 -0800
committerPatrick Walton <pcwalton@mimiga.net>2013-12-26 15:54:29 -0800
commit2ae76e120aff2fac9293c64004827bdc14b5c63c (patch)
tree7f9bb8de329464f1fc7e6eea671bd10ef6331d0a /src
parentfbb70d916f08e880c7f0ca576f7f56ea7a40ddc1 (diff)
downloadrust-2ae76e120aff2fac9293c64004827bdc14b5c63c.tar.gz
rust-2ae76e120aff2fac9293c64004827bdc14b5c63c.zip
librustc: De-`@mut` the `type_abbrevs` table
Diffstat (limited to 'src')
-rw-r--r--src/librustc/metadata/encoder.rs4
-rw-r--r--src/librustc/metadata/tyencode.rs17
2 files changed, 14 insertions, 7 deletions
diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs
index 140a53880db..1e8acf53fac 100644
--- a/src/librustc/metadata/encoder.rs
+++ b/src/librustc/metadata/encoder.rs
@@ -49,7 +49,7 @@ use syntax;
 use writer = extra::ebml::writer;
 
 // used by astencode:
-type abbrev_map = @mut HashMap<ty::t, tyencode::ty_abbrev>;
+type abbrev_map = @RefCell<HashMap<ty::t, tyencode::ty_abbrev>>;
 
 pub type encode_inlined_item<'a> = 'a |ecx: &EncodeContext,
                                              ebml_w: &mut writer::Encoder,
@@ -1774,7 +1774,7 @@ pub fn encode_metadata(parms: EncodeParams, crate: &Crate) -> ~[u8] {
         non_inlineable_statics,
         ..
     } = parms;
-    let type_abbrevs = @mut HashMap::new();
+    let type_abbrevs = @RefCell::new(HashMap::new());
     let stats = @mut stats;
     let ecx = EncodeContext {
         diag: diag,
diff --git a/src/librustc/metadata/tyencode.rs b/src/librustc/metadata/tyencode.rs
index 8ad9784df1b..06d74055af4 100644
--- a/src/librustc/metadata/tyencode.rs
+++ b/src/librustc/metadata/tyencode.rs
@@ -10,6 +10,7 @@
 
 // Type encoding
 
+use std::cell::RefCell;
 use std::hashmap::HashMap;
 use std::io;
 use std::io::{Decorator, Writer, Seek};
@@ -50,7 +51,7 @@ pub struct ty_abbrev {
 
 pub enum abbrev_ctxt {
     ac_no_abbrevs,
-    ac_use_abbrevs(@mut HashMap<ty::t, ty_abbrev>),
+    ac_use_abbrevs(@RefCell<HashMap<ty::t, ty_abbrev>>),
 }
 
 fn mywrite(w: &mut MemWriter, fmt: &fmt::Arguments) {
@@ -83,9 +84,12 @@ pub fn enc_ty(w: &mut MemWriter, cx: @ctxt, t: ty::t) {
           w.write(result_str.as_bytes());
       }
       ac_use_abbrevs(abbrevs) => {
-          match abbrevs.find(&t) {
-              Some(a) => { w.write(a.s.as_bytes()); return; }
-              None => {}
+          {
+              let mut abbrevs = abbrevs.borrow_mut();
+              match abbrevs.get().find(&t) {
+                  Some(a) => { w.write(a.s.as_bytes()); return; }
+                  None => {}
+              }
           }
           let pos = w.tell();
           enc_sty(w, cx, &ty::get(t).sty);
@@ -104,7 +108,10 @@ pub fn enc_ty(w: &mut MemWriter, cx: @ctxt, t: ty::t) {
               let a = ty_abbrev { pos: pos as uint,
                                   len: len as uint,
                                   s: s };
-              abbrevs.insert(t, a);
+              {
+                  let mut abbrevs = abbrevs.borrow_mut();
+                  abbrevs.get().insert(t, a);
+              }
           }
           return;
       }