@@ -590,7 +590,7 @@ pub struct Liveness {
590
590
tcx : ty:: ctxt ,
591
591
ir : @IrMaps ,
592
592
s : Specials ,
593
- successors : @mut ~[ LiveNode ] ,
593
+ successors : @RefCell < ~[ LiveNode ] > ,
594
594
users : @mut ~[ Users ] ,
595
595
// The list of node IDs for the nested loop scopes
596
596
// we're in.
@@ -607,8 +607,8 @@ fn Liveness(ir: @IrMaps, specials: Specials) -> Liveness {
607
607
ir : ir,
608
608
tcx : ir. tcx ,
609
609
s : specials,
610
- successors : @mut vec:: from_elem ( ir. num_live_nodes . get ( ) ,
611
- invalid_node ( ) ) ,
610
+ successors : @RefCell :: new ( vec:: from_elem ( ir. num_live_nodes . get ( ) ,
611
+ invalid_node ( ) ) ) ,
612
612
users : @mut vec:: from_elem ( ir. num_live_nodes . get ( ) *
613
613
ir. num_vars . get ( ) ,
614
614
invalid_users ( ) ) ,
@@ -694,7 +694,11 @@ impl Liveness {
694
694
*/
695
695
pub fn live_on_exit ( & self , ln : LiveNode , var : Variable )
696
696
-> Option < LiveNodeKind > {
697
- self . live_on_entry ( self . successors [ * ln] , var)
697
+ let successor = {
698
+ let successors = self . successors . borrow ( ) ;
699
+ successors. get ( ) [ * ln]
700
+ } ;
701
+ self . live_on_entry ( successor, var)
698
702
}
699
703
700
704
pub fn used_on_entry ( & self , ln : LiveNode , var : Variable ) -> bool {
@@ -711,7 +715,11 @@ impl Liveness {
711
715
712
716
pub fn assigned_on_exit ( & self , ln : LiveNode , var : Variable )
713
717
-> Option < LiveNodeKind > {
714
- self . assigned_on_entry ( self . successors [ * ln] , var)
718
+ let successor = {
719
+ let successors = self . successors . borrow ( ) ;
720
+ successors. get ( ) [ * ln]
721
+ } ;
722
+ self . assigned_on_entry ( successor, var)
715
723
}
716
724
717
725
pub fn indices2 ( & self ,
@@ -782,12 +790,19 @@ impl Liveness {
782
790
self . write_vars ( wr, ln, |idx| self . users [ idx] . reader ) ;
783
791
write ! ( wr, " writes" ) ;
784
792
self . write_vars ( wr, ln, |idx| self . users [ idx] . writer ) ;
785
- write ! ( wr, " precedes {}]" , self . successors[ * ln] . to_str( ) ) ;
793
+ let successor = {
794
+ let successors = self . successors . borrow ( ) ;
795
+ successors. get ( ) [ * ln]
796
+ } ;
797
+ write ! ( wr, " precedes {}]" , successor. to_str( ) ) ;
786
798
} ) )
787
799
}
788
800
789
801
pub fn init_empty ( & self , ln : LiveNode , succ_ln : LiveNode ) {
790
- self . successors [ * ln] = succ_ln;
802
+ {
803
+ let mut successors = self . successors . borrow_mut ( ) ;
804
+ successors. get ( ) [ * ln] = succ_ln;
805
+ }
791
806
792
807
// It is not necessary to initialize the
793
808
// values to empty because this is the value
@@ -801,7 +816,11 @@ impl Liveness {
801
816
802
817
pub fn init_from_succ ( & self , ln : LiveNode , succ_ln : LiveNode ) {
803
818
// more efficient version of init_empty() / merge_from_succ()
804
- self . successors [ * ln] = succ_ln;
819
+ {
820
+ let mut successors = self . successors . borrow_mut ( ) ;
821
+ successors. get ( ) [ * ln] = succ_ln;
822
+ }
823
+
805
824
self . indices2 ( ln, succ_ln, |idx, succ_idx| {
806
825
self . users [ idx] = self . users [ succ_idx]
807
826
} ) ;
0 commit comments