@@ -110,6 +110,7 @@ use middle::typeck;
110
110
use middle:: moves;
111
111
112
112
use std:: cast:: transmute;
113
+ use std:: cell:: RefCell ;
113
114
use std:: hashmap:: HashMap ;
114
115
use std:: io;
115
116
use std:: str;
@@ -577,7 +578,7 @@ static ACC_READ: uint = 1u;
577
578
static ACC_WRITE : uint = 2 u;
578
579
static ACC_USE : uint = 4 u;
579
580
580
- type LiveNodeMap = @mut HashMap < NodeId , LiveNode > ;
581
+ type LiveNodeMap = @RefCell < HashMap < NodeId , LiveNode > > ;
581
582
582
583
pub struct Liveness {
583
584
tcx : ty:: ctxt ,
@@ -604,8 +605,8 @@ fn Liveness(ir: @mut IrMaps, specials: Specials) -> Liveness {
604
605
users : @mut vec:: from_elem ( ir. num_live_nodes * ir. num_vars ,
605
606
invalid_users ( ) ) ,
606
607
loop_scope : @mut ~[ ] ,
607
- break_ln : @mut HashMap :: new ( ) ,
608
- cont_ln : @mut HashMap :: new ( )
608
+ break_ln : @RefCell :: new ( HashMap :: new ( ) ) ,
609
+ cont_ln : @RefCell :: new ( HashMap :: new ( ) ) ,
609
610
}
610
611
}
611
612
@@ -1091,7 +1092,8 @@ impl Liveness {
1091
1092
// Now that we know the label we're going to,
1092
1093
// look it up in the break loop nodes table
1093
1094
1094
- match self . break_ln . find ( & sc) {
1095
+ let break_ln = self . break_ln . borrow ( ) ;
1096
+ match break_ln. get ( ) . find ( & sc) {
1095
1097
Some ( & b) => b,
1096
1098
None => self . tcx . sess . span_bug ( expr. span ,
1097
1099
"Break to unknown label" )
@@ -1105,7 +1107,8 @@ impl Liveness {
1105
1107
// Now that we know the label we're going to,
1106
1108
// look it up in the continue loop nodes table
1107
1109
1108
- match self . cont_ln . find ( & sc) {
1110
+ let cont_ln = self . cont_ln . borrow ( ) ;
1111
+ match cont_ln. get ( ) . find ( & sc) {
1109
1112
Some ( & b) => b,
1110
1113
None => self . tcx . sess . span_bug ( expr. span ,
1111
1114
"Loop to unknown label" )
@@ -1383,8 +1386,12 @@ impl Liveness {
1383
1386
-> R {
1384
1387
debug ! ( "with_loop_nodes: {} {}" , loop_node_id, * break_ln) ;
1385
1388
self . loop_scope . push ( loop_node_id) ;
1386
- self . break_ln . insert ( loop_node_id, break_ln) ;
1387
- self . cont_ln . insert ( loop_node_id, cont_ln) ;
1389
+ {
1390
+ let mut this_break_ln = self . break_ln . borrow_mut ( ) ;
1391
+ let mut this_cont_ln = self . cont_ln . borrow_mut ( ) ;
1392
+ this_break_ln. get ( ) . insert ( loop_node_id, break_ln) ;
1393
+ this_cont_ln. get ( ) . insert ( loop_node_id, cont_ln) ;
1394
+ }
1388
1395
let r = f ( ) ;
1389
1396
self . loop_scope . pop ( ) ;
1390
1397
r
0 commit comments