@@ -52,7 +52,7 @@ The region maps encode information about region relationships.
52
52
*/
53
53
pub struct RegionMaps {
54
54
priv scope_map : RefCell < HashMap < ast:: NodeId , ast:: NodeId > > ,
55
- priv free_region_map : HashMap < FreeRegion , ~[ FreeRegion ] > ,
55
+ priv free_region_map : RefCell < HashMap < FreeRegion , ~[ FreeRegion ] > > ,
56
56
priv cleanup_scopes : HashSet < ast:: NodeId >
57
57
}
58
58
@@ -75,7 +75,8 @@ struct RegionResolutionVisitor {
75
75
76
76
impl RegionMaps {
77
77
pub fn relate_free_regions ( & mut self , sub : FreeRegion , sup : FreeRegion ) {
78
- match self . free_region_map . find_mut ( & sub) {
78
+ let mut free_region_map = self . free_region_map . borrow_mut ( ) ;
79
+ match free_region_map. get ( ) . find_mut ( & sub) {
79
80
Some ( sups) => {
80
81
if !sups. iter ( ) . any ( |x| x == & sup) {
81
82
sups. push ( sup) ;
@@ -87,7 +88,7 @@ impl RegionMaps {
87
88
88
89
debug ! ( "relate_free_regions(sub={:?}, sup={:?})" , sub, sup) ;
89
90
90
- self . free_region_map . insert ( sub, ~[ sup] ) ;
91
+ free_region_map. get ( ) . insert ( sub, ~[ sup] ) ;
91
92
}
92
93
93
94
pub fn record_parent ( & mut self , sub : ast:: NodeId , sup : ast:: NodeId ) {
@@ -198,7 +199,8 @@ impl RegionMaps {
198
199
let mut queue = ~[ sub] ;
199
200
let mut i = 0 ;
200
201
while i < queue. len ( ) {
201
- match self . free_region_map . find ( & queue[ i] ) {
202
+ let free_region_map = self . free_region_map . borrow ( ) ;
203
+ match free_region_map. get ( ) . find ( & queue[ i] ) {
202
204
Some ( parents) => {
203
205
for parent in parents. iter ( ) {
204
206
if * parent == sup {
@@ -504,7 +506,7 @@ pub fn resolve_crate(sess: Session,
504
506
{
505
507
let region_maps = @mut RegionMaps {
506
508
scope_map : RefCell :: new ( HashMap :: new ( ) ) ,
507
- free_region_map : HashMap :: new ( ) ,
509
+ free_region_map : RefCell :: new ( HashMap :: new ( ) ) ,
508
510
cleanup_scopes : HashSet :: new ( ) ,
509
511
} ;
510
512
let cx = Context { parent : None ,
0 commit comments