@@ -110,7 +110,7 @@ use middle::typeck;
110
110
use middle:: moves;
111
111
112
112
use std:: cast:: transmute;
113
- use std:: cell:: RefCell ;
113
+ use std:: cell:: { Cell , RefCell } ;
114
114
use std:: hashmap:: HashMap ;
115
115
use std:: io;
116
116
use std:: str;
@@ -245,7 +245,7 @@ struct IrMaps {
245
245
method_map : typeck:: method_map ,
246
246
capture_map : moves:: CaptureMap ,
247
247
248
- num_live_nodes : uint ,
248
+ num_live_nodes : Cell < uint > ,
249
249
num_vars : uint ,
250
250
live_node_map : HashMap < NodeId , LiveNode > ,
251
251
variable_map : HashMap < NodeId , Variable > ,
@@ -262,7 +262,7 @@ fn IrMaps(tcx: ty::ctxt,
262
262
tcx : tcx,
263
263
method_map : method_map,
264
264
capture_map : capture_map,
265
- num_live_nodes : 0 ,
265
+ num_live_nodes : Cell :: new ( 0 ) ,
266
266
num_vars : 0 ,
267
267
live_node_map : HashMap :: new ( ) ,
268
268
variable_map : HashMap :: new ( ) ,
@@ -274,9 +274,10 @@ fn IrMaps(tcx: ty::ctxt,
274
274
275
275
impl IrMaps {
276
276
pub fn add_live_node ( & mut self , lnk : LiveNodeKind ) -> LiveNode {
277
- let ln = LiveNode ( self . num_live_nodes ) ;
277
+ let num_live_nodes = self . num_live_nodes . get ( ) ;
278
+ let ln = LiveNode ( num_live_nodes) ;
278
279
self . lnks . push ( lnk) ;
279
- self . num_live_nodes += 1 ;
280
+ self . num_live_nodes . set ( num_live_nodes + 1 ) ;
280
281
281
282
debug ! ( "{} is of kind {}" , ln. to_str( ) ,
282
283
live_node_kind_to_str( lnk, self . tcx) ) ;
@@ -601,8 +602,9 @@ fn Liveness(ir: @mut IrMaps, specials: Specials) -> Liveness {
601
602
ir : ir,
602
603
tcx : ir. tcx ,
603
604
s : specials,
604
- successors : @mut vec:: from_elem ( ir. num_live_nodes , invalid_node ( ) ) ,
605
- users : @mut vec:: from_elem ( ir. num_live_nodes * ir. num_vars ,
605
+ successors : @mut vec:: from_elem ( ir. num_live_nodes . get ( ) ,
606
+ invalid_node ( ) ) ,
607
+ users : @mut vec:: from_elem ( ir. num_live_nodes . get ( ) * ir. num_vars ,
606
608
invalid_users ( ) ) ,
607
609
loop_scope : @mut ~[ ] ,
608
610
break_ln : @RefCell :: new ( HashMap :: new ( ) ) ,
@@ -883,7 +885,7 @@ impl Liveness {
883
885
// hack to skip the loop unless debug! is enabled:
884
886
debug ! ( "^^ liveness computation results for body {} (entry={})" ,
885
887
{
886
- for ln_idx in range( 0 u, self . ir. num_live_nodes) {
888
+ for ln_idx in range( 0 u, self . ir. num_live_nodes. get ( ) ) {
887
889
debug!( "{}" , self . ln_str( LiveNode ( ln_idx) ) ) ;
888
890
}
889
891
body. id
0 commit comments