@@ -251,7 +251,7 @@ struct IrMaps {
251
251
variable_map : RefCell < HashMap < NodeId , Variable > > ,
252
252
capture_info_map : RefCell < HashMap < NodeId , @~[ CaptureInfo ] > > ,
253
253
var_kinds : RefCell < ~[ VarKind ] > ,
254
- lnks : ~[ LiveNodeKind ] ,
254
+ lnks : RefCell < ~[ LiveNodeKind ] > ,
255
255
}
256
256
257
257
fn IrMaps ( tcx : ty:: ctxt ,
@@ -268,15 +268,16 @@ fn IrMaps(tcx: ty::ctxt,
268
268
variable_map : RefCell :: new ( HashMap :: new ( ) ) ,
269
269
capture_info_map : RefCell :: new ( HashMap :: new ( ) ) ,
270
270
var_kinds : RefCell :: new ( ~[ ] ) ,
271
- lnks : ~[ ] ,
271
+ lnks : RefCell :: new ( ~[ ] ) ,
272
272
}
273
273
}
274
274
275
275
impl IrMaps {
276
276
pub fn add_live_node ( & mut self , lnk : LiveNodeKind ) -> LiveNode {
277
277
let num_live_nodes = self . num_live_nodes . get ( ) ;
278
278
let ln = LiveNode ( num_live_nodes) ;
279
- self . lnks . push ( lnk) ;
279
+ let mut lnks = self . lnks . borrow_mut ( ) ;
280
+ lnks. get ( ) . push ( lnk) ;
280
281
self . num_live_nodes . set ( num_live_nodes + 1 ) ;
281
282
282
283
debug ! ( "{} is of kind {}" , ln. to_str( ) ,
@@ -353,7 +354,8 @@ impl IrMaps {
353
354
}
354
355
355
356
pub fn lnk ( & mut self , ln : LiveNode ) -> LiveNodeKind {
356
- self . lnks [ * ln]
357
+ let lnks = self . lnks . borrow ( ) ;
358
+ lnks. get ( ) [ * ln]
357
359
}
358
360
}
359
361
@@ -776,10 +778,16 @@ impl Liveness {
776
778
pub fn ln_str ( & self , ln : LiveNode ) -> ~str {
777
779
str:: from_utf8_owned ( io:: mem:: with_mem_writer ( |wr| {
778
780
let wr = wr as & mut io:: Writer ;
779
- write ! ( wr, "[ln({}) of kind {:?} reads" , * ln, self . ir. lnks[ * ln] ) ;
780
- self . write_vars ( wr, ln, |idx| self . users [ idx] . reader ) ;
781
+ {
782
+ let lnks = self . ir . lnks . borrow ( ) ;
783
+ write ! ( wr,
784
+ "[ln({}) of kind {:?} reads" ,
785
+ * ln,
786
+ lnks. get( ) [ * ln] ) ;
787
+ }
788
+ self . write_vars ( wr, ln, |idx| self . users [ idx] . reader ) ;
781
789
write ! ( wr, " writes" ) ;
782
- self . write_vars ( wr, ln, |idx| self . users [ idx] . writer ) ;
790
+ self . write_vars ( wr, ln, |idx| self . users [ idx] . writer ) ;
783
791
write ! ( wr, " precedes {}]" , self . successors[ * ln] . to_str( ) ) ;
784
792
} ) )
785
793
}
0 commit comments