@@ -30,6 +30,7 @@ use util::ppaux::{Repr, UserString};
30
30
use util:: common:: { indenter} ;
31
31
32
32
use std:: cast;
33
+ use std:: cell:: RefCell ;
33
34
use std:: cmp;
34
35
use std:: hashmap:: { HashMap , HashSet } ;
35
36
use std:: ops;
@@ -264,7 +265,7 @@ pub type ctxt = @ctxt_;
264
265
/// later on.
265
266
struct ctxt_ {
266
267
diag : @mut syntax:: diagnostic:: span_handler ,
267
- interner : @ mut HashMap < intern_key , ~t_box_ > ,
268
+ interner : RefCell < HashMap < intern_key , ~t_box_ > > ,
268
269
next_id : @mut uint ,
269
270
cstore : @mut metadata:: cstore:: CStore ,
270
271
sess : session:: Session ,
@@ -977,7 +978,7 @@ pub fn mk_ctxt(s: session::Session,
977
978
named_region_map : named_region_map,
978
979
item_variance_map : @mut HashMap :: new ( ) ,
979
980
diag : s. diagnostic ( ) ,
980
- interner : @ mut HashMap :: new ( ) ,
981
+ interner : RefCell :: new ( HashMap :: new ( ) ) ,
981
982
next_id : @mut primitives:: LAST_PRIMITIVE_ID ,
982
983
cstore : s. cstore ,
983
984
sess : s,
@@ -1042,9 +1043,13 @@ pub fn mk_t(cx: ctxt, st: sty) -> t {
1042
1043
} ;
1043
1044
1044
1045
let key = intern_key { sty : to_unsafe_ptr ( & st) } ;
1045
- match cx. interner . find ( & key) {
1046
- Some ( t) => unsafe { return cast:: transmute ( & t. sty ) ; } ,
1047
- _ => ( )
1046
+
1047
+ {
1048
+ let mut interner = cx. interner . borrow_mut ( ) ;
1049
+ match interner. get ( ) . find ( & key) {
1050
+ Some ( t) => unsafe { return cast:: transmute ( & t. sty ) ; } ,
1051
+ _ => ( )
1052
+ }
1048
1053
}
1049
1054
1050
1055
let mut flags = 0 u;
@@ -1138,7 +1143,8 @@ pub fn mk_t(cx: ctxt, st: sty) -> t {
1138
1143
sty : sty_ptr,
1139
1144
} ;
1140
1145
1141
- cx. interner . insert ( key, t) ;
1146
+ let mut interner = cx. interner . borrow_mut ( ) ;
1147
+ interner. get ( ) . insert ( key, t) ;
1142
1148
1143
1149
* cx. next_id += 1 ;
1144
1150
0 commit comments