File tree Expand file tree Collapse file tree 3 files changed +13
-14
lines changed Expand file tree Collapse file tree 3 files changed +13
-14
lines changed Original file line number Diff line number Diff line change 18
18
*/
19
19
20
20
use driver:: session;
21
+ use std:: cell:: RefCell ;
21
22
use std:: hashmap:: HashMap ;
22
23
use syntax:: ast;
23
24
use syntax:: codemap:: Span ;
@@ -33,7 +34,7 @@ pub type NamedRegionMap = HashMap<ast::NodeId, ast::DefRegion>;
33
34
34
35
struct LifetimeContext {
35
36
sess : session:: Session ,
36
- named_region_map : @mut NamedRegionMap ,
37
+ named_region_map : @RefCell < NamedRegionMap > ,
37
38
}
38
39
39
40
enum ScopeChain < ' a > {
@@ -43,12 +44,11 @@ enum ScopeChain<'a> {
43
44
RootScope
44
45
}
45
46
46
- pub fn crate ( sess : session:: Session ,
47
- crate : & ast:: Crate )
48
- -> @mut NamedRegionMap {
47
+ pub fn crate ( sess : session:: Session , crate : & ast:: Crate )
48
+ -> @RefCell < NamedRegionMap > {
49
49
let mut ctxt = LifetimeContext {
50
50
sess : sess,
51
- named_region_map : @mut HashMap :: new ( )
51
+ named_region_map : @RefCell :: new ( HashMap :: new ( ) )
52
52
} ;
53
53
visit:: walk_crate ( & mut ctxt, crate , & RootScope ) ;
54
54
sess. abort_if_errors ( ) ;
@@ -305,7 +305,8 @@ impl LifetimeContext {
305
305
self . sess. intr( ) ) ,
306
306
lifetime_ref. id,
307
307
def) ;
308
- self . named_region_map . insert ( lifetime_ref. id , def) ;
308
+ let mut named_region_map = self . named_region_map . borrow_mut ( ) ;
309
+ named_region_map. get ( ) . insert ( lifetime_ref. id , def) ;
309
310
}
310
311
}
311
312
Original file line number Diff line number Diff line change @@ -270,7 +270,7 @@ struct ctxt_ {
270
270
sess : session:: Session ,
271
271
def_map : resolve:: DefMap ,
272
272
273
- named_region_map : @mut resolve_lifetime:: NamedRegionMap ,
273
+ named_region_map : @RefCell < resolve_lifetime:: NamedRegionMap > ,
274
274
275
275
region_maps : @mut middle:: region:: RegionMaps ,
276
276
@@ -959,7 +959,7 @@ pub type node_type_table = RefCell<HashMap<uint,t>>;
959
959
960
960
pub fn mk_ctxt ( s : session:: Session ,
961
961
dm : resolve:: DefMap ,
962
- named_region_map : @mut resolve_lifetime:: NamedRegionMap ,
962
+ named_region_map : @RefCell < resolve_lifetime:: NamedRegionMap > ,
963
963
amap : ast_map:: map ,
964
964
freevars : freevars:: freevar_map ,
965
965
region_maps : @mut middle:: region:: RegionMaps ,
Original file line number Diff line number Diff line change @@ -76,12 +76,10 @@ pub trait AstConv {
76
76
fn ty_infer ( & self , span : Span ) -> ty:: t ;
77
77
}
78
78
79
- pub fn ast_region_to_region (
80
- tcx : ty:: ctxt ,
81
- lifetime : & ast:: Lifetime )
82
- -> ty:: Region
83
- {
84
- let r = match tcx. named_region_map . find ( & lifetime. id ) {
79
+ pub fn ast_region_to_region ( tcx : ty:: ctxt , lifetime : & ast:: Lifetime )
80
+ -> ty:: Region {
81
+ let named_region_map = tcx. named_region_map . borrow ( ) ;
82
+ let r = match named_region_map. get ( ) . find ( & lifetime. id ) {
85
83
None => {
86
84
// should have been recorded by the `resolve_lifetime` pass
87
85
tcx. sess . span_bug ( lifetime. span , "unresolved lifetime" ) ;
You can’t perform that action at this time.
0 commit comments