@@ -37,7 +37,7 @@ pub fn read_crates(sess: Session,
37
37
let mut e = Env {
38
38
sess : sess,
39
39
os : os,
40
- crate_cache : @mut ~[ ] ,
40
+ crate_cache : @RefCell :: new ( ~[ ] ) ,
41
41
next_crate_num : 1 ,
42
42
intr : intr
43
43
} ;
@@ -48,8 +48,9 @@ pub fn read_crates(sess: Session,
48
48
} ;
49
49
visit:: walk_crate ( & mut v, crate , ( ) ) ;
50
50
}
51
- dump_crates ( * e. crate_cache ) ;
52
- warn_if_multiple_versions ( & mut e, sess. diagnostic ( ) , * e. crate_cache ) ;
51
+ let crate_cache = e. crate_cache . borrow ( ) ;
52
+ dump_crates ( * crate_cache. get ( ) ) ;
53
+ warn_if_multiple_versions ( & mut e, sess. diagnostic ( ) , * crate_cache. get ( ) ) ;
53
54
}
54
55
55
56
struct ReadCrateVisitor < ' a > {
@@ -111,7 +112,7 @@ fn warn_if_multiple_versions(e: &mut Env,
111
112
struct Env {
112
113
sess : Session ,
113
114
os : loader:: Os ,
114
- crate_cache : @mut ~[ cache_entry ] ,
115
+ crate_cache : @RefCell < ~[ cache_entry ] > ,
115
116
next_crate_num : ast:: CrateNum ,
116
117
intr : @ident_interner
117
118
}
@@ -242,7 +243,8 @@ fn visit_item(e: &Env, i: @ast::item) {
242
243
}
243
244
244
245
fn existing_match ( e : & Env , name : @str , version : @str , hash : & str ) -> Option < ast:: CrateNum > {
245
- for c in e. crate_cache . iter ( ) {
246
+ let crate_cache = e. crate_cache . borrow ( ) ;
247
+ for c in crate_cache. get ( ) . iter ( ) {
246
248
let pkgid_version = match c. pkgid . version {
247
249
None => @"0.0 ",
248
250
Some ( ref ver) => ver. to_managed ( ) ,
@@ -285,12 +287,15 @@ fn resolve_crate(e: &mut Env,
285
287
286
288
// Claim this crate number and cache it
287
289
let cnum = e. next_crate_num ;
288
- e. crate_cache . push ( cache_entry {
289
- cnum : cnum,
290
- span : span,
291
- hash : hash,
292
- pkgid : pkgid,
293
- } ) ;
290
+ {
291
+ let mut crate_cache = e. crate_cache . borrow_mut ( ) ;
292
+ crate_cache. get ( ) . push ( cache_entry {
293
+ cnum : cnum,
294
+ span : span,
295
+ hash : hash,
296
+ pkgid : pkgid,
297
+ } ) ;
298
+ }
294
299
e. next_crate_num += 1 ;
295
300
296
301
// Now resolve the crates referenced by this crate
0 commit comments