@@ -17,6 +17,7 @@ use parse::token;
17
17
use visit:: Visitor ;
18
18
use visit;
19
19
20
+ use std:: cell:: RefCell ;
20
21
use std:: hashmap:: HashMap ;
21
22
use std:: u32;
22
23
use std:: local_data;
@@ -799,20 +800,22 @@ fn idx_push<T>(vec: &mut ~[T], val: T) -> u32 {
799
800
800
801
/// Resolve a syntax object to a name, per MTWT.
801
802
pub fn mtwt_resolve ( id : Ident ) -> Name {
802
- resolve_internal ( id, get_sctable ( ) , get_resolve_table ( ) )
803
+ let resolve_table = get_resolve_table ( ) ;
804
+ let mut resolve_table = resolve_table. borrow_mut ( ) ;
805
+ resolve_internal ( id, get_sctable ( ) , resolve_table. get ( ) )
803
806
}
804
807
805
808
// FIXME #8215: must be pub for testing
806
809
pub type ResolveTable = HashMap < ( Name , SyntaxContext ) , Name > ;
807
810
808
811
// okay, I admit, putting this in TLS is not so nice:
809
812
// fetch the SCTable from TLS, create one if it doesn't yet exist.
810
- pub fn get_resolve_table ( ) -> @mut ResolveTable {
811
- local_data_key ! ( resolve_table_key: @@mut ResolveTable )
813
+ pub fn get_resolve_table ( ) -> @RefCell < ResolveTable > {
814
+ local_data_key ! ( resolve_table_key: @@RefCell < ResolveTable > )
812
815
match local_data:: get ( resolve_table_key, |k| k. map ( |k| * k) ) {
813
816
None => {
814
- let new_table = @@mut HashMap :: new ( ) ;
815
- local_data:: set ( resolve_table_key, new_table) ;
817
+ let new_table = @@RefCell :: new ( HashMap :: new ( ) ) ;
818
+ local_data:: set ( resolve_table_key, new_table) ;
816
819
* new_table
817
820
} ,
818
821
Some ( intr) => * intr
0 commit comments