@@ -27,7 +27,8 @@ use syntax::ast::{m_mutbl, m_imm, m_const};
27
27
use syntax:: ast;
28
28
use syntax:: ast_util;
29
29
use syntax:: codemap:: span;
30
- use syntax:: oldvisit;
30
+ use syntax:: visit;
31
+ use syntax:: visit:: Visitor ;
31
32
use util:: ppaux:: Repr ;
32
33
33
34
#[ deriving( Clone ) ]
@@ -39,6 +40,27 @@ struct CheckLoanCtxt<'self> {
39
40
reported : @mut HashSet < ast:: NodeId > ,
40
41
}
41
42
43
+ struct CheckLoanVisitor ;
44
+
45
+ impl < ' self > Visitor < CheckLoanCtxt < ' self > > for CheckLoanVisitor {
46
+ fn visit_expr < ' a > ( & mut self , ex : @ast:: expr , e : CheckLoanCtxt < ' a > ) {
47
+ check_loans_in_expr ( self , ex, e) ;
48
+ }
49
+ fn visit_local ( & mut self , l : @ast:: Local , e : CheckLoanCtxt ) {
50
+ check_loans_in_local ( self , l, e) ;
51
+ }
52
+ fn visit_block ( & mut self , b : & ast:: Block , e : CheckLoanCtxt ) {
53
+ check_loans_in_block ( self , b, e) ;
54
+ }
55
+ fn visit_pat ( & mut self , p : @ast:: pat , e : CheckLoanCtxt ) {
56
+ check_loans_in_pat ( self , p, e) ;
57
+ }
58
+ fn visit_fn ( & mut self , fk : & visit:: fn_kind , fd : & ast:: fn_decl ,
59
+ b : & ast:: Block , s : span , n : ast:: NodeId , e : CheckLoanCtxt ) {
60
+ check_loans_in_fn ( self , fk, fd, b, s, n, e) ;
61
+ }
62
+ }
63
+
42
64
pub fn check_loans ( bccx : @BorrowckCtxt ,
43
65
dfcx_loans : & LoanDataFlow ,
44
66
move_data : move_data:: FlowedMoveData ,
@@ -54,15 +76,8 @@ pub fn check_loans(bccx: @BorrowckCtxt,
54
76
reported : @mut HashSet :: new ( ) ,
55
77
} ;
56
78
57
- let vt = oldvisit:: mk_vt ( @oldvisit:: Visitor {
58
- visit_expr : check_loans_in_expr,
59
- visit_local : check_loans_in_local,
60
- visit_block : check_loans_in_block,
61
- visit_pat : check_loans_in_pat,
62
- visit_fn : check_loans_in_fn,
63
- .. * oldvisit:: default_visitor ( )
64
- } ) ;
65
- ( vt. visit_block ) ( body, ( clcx, vt) ) ;
79
+ let mut vt = CheckLoanVisitor ;
80
+ vt. visit_block ( body, clcx) ;
66
81
}
67
82
68
83
enum MoveError {
@@ -626,27 +641,27 @@ impl<'self> CheckLoanCtxt<'self> {
626
641
}
627
642
}
628
643
629
- fn check_loans_in_fn < ' a > ( fk : & oldvisit:: fn_kind ,
644
+ fn check_loans_in_fn < ' a > ( visitor : & mut CheckLoanVisitor ,
645
+ fk : & visit:: fn_kind ,
630
646
decl : & ast:: fn_decl ,
631
647
body : & ast:: Block ,
632
648
sp : span ,
633
649
id : ast:: NodeId ,
634
- ( this, visitor) : ( CheckLoanCtxt < ' a > ,
635
- oldvisit:: vt < CheckLoanCtxt < ' a > > ) ) {
650
+ this : CheckLoanCtxt < ' a > ) {
636
651
match * fk {
637
- oldvisit :: fk_item_fn( * ) |
638
- oldvisit :: fk_method( * ) => {
652
+ visit :: fk_item_fn( * ) |
653
+ visit :: fk_method( * ) => {
639
654
// Don't process nested items.
640
655
return ;
641
656
}
642
657
643
- oldvisit :: fk_anon( * ) |
644
- oldvisit :: fk_fn_block( * ) => {
658
+ visit :: fk_anon( * ) |
659
+ visit :: fk_fn_block( * ) => {
645
660
check_captured_variables ( this, id, sp) ;
646
661
}
647
662
}
648
663
649
- oldvisit :: visit_fn ( fk, decl, body, sp, id, ( this, visitor ) ) ;
664
+ visit :: walk_fn ( visitor , fk, decl, body, sp, id, this) ;
650
665
651
666
fn check_captured_variables ( this : CheckLoanCtxt ,
652
667
closure_id : ast:: NodeId ,
@@ -689,16 +704,16 @@ fn check_loans_in_fn<'a>(fk: &oldvisit::fn_kind,
689
704
}
690
705
}
691
706
692
- fn check_loans_in_local < ' a > ( local : @ast :: Local ,
693
- ( this , vt ) : ( CheckLoanCtxt < ' a > ,
694
- oldvisit :: vt < CheckLoanCtxt < ' a > > ) ) {
695
- oldvisit :: visit_local ( local , ( this , vt ) ) ;
707
+ fn check_loans_in_local < ' a > ( vt : & mut CheckLoanVisitor ,
708
+ local : @ast :: Local ,
709
+ this : CheckLoanCtxt < ' a > ) {
710
+ visit :: walk_local ( vt , local , this ) ;
696
711
}
697
712
698
- fn check_loans_in_expr < ' a > ( expr : @ast :: expr ,
699
- ( this , vt ) : ( CheckLoanCtxt < ' a > ,
700
- oldvisit :: vt < CheckLoanCtxt < ' a > > ) ) {
701
- oldvisit :: visit_expr ( expr , ( this , vt ) ) ;
713
+ fn check_loans_in_expr < ' a > ( vt : & mut CheckLoanVisitor ,
714
+ expr : @ast :: expr ,
715
+ this : CheckLoanCtxt < ' a > ) {
716
+ visit :: walk_expr ( vt , expr , this ) ;
702
717
703
718
debug ! ( "check_loans_in_expr(expr=%s)" ,
704
719
expr. repr( this. tcx( ) ) ) ;
@@ -749,19 +764,19 @@ fn check_loans_in_expr<'a>(expr: @ast::expr,
749
764
}
750
765
}
751
766
752
- fn check_loans_in_pat < ' a > ( pat : @ast :: pat ,
753
- ( this , vt ) : ( CheckLoanCtxt < ' a > ,
754
- oldvisit :: vt < CheckLoanCtxt < ' a > > ) )
767
+ fn check_loans_in_pat < ' a > ( vt : & mut CheckLoanVisitor ,
768
+ pat : @ast :: pat ,
769
+ this : CheckLoanCtxt < ' a > )
755
770
{
756
771
this. check_for_conflicting_loans ( pat. id ) ;
757
772
this. check_move_out_from_id ( pat. id , pat. span ) ;
758
- oldvisit :: visit_pat ( pat , ( this , vt ) ) ;
773
+ visit :: walk_pat ( vt , pat , this ) ;
759
774
}
760
775
761
- fn check_loans_in_block < ' a > ( blk : & ast :: Block ,
762
- ( this , vt ) : ( CheckLoanCtxt < ' a > ,
763
- oldvisit :: vt < CheckLoanCtxt < ' a > > ) )
776
+ fn check_loans_in_block < ' a > ( vt : & mut CheckLoanVisitor ,
777
+ blk : & ast :: Block ,
778
+ this : CheckLoanCtxt < ' a > )
764
779
{
765
- oldvisit :: visit_block ( blk , ( this , vt ) ) ;
780
+ visit :: walk_block ( vt , blk , this ) ;
766
781
this. check_for_conflicting_loans ( blk. id ) ;
767
782
}
0 commit comments