@@ -1001,37 +1001,42 @@ fn resolve_local(visitor: &mut RegionResolutionVisitor, local: &hir::Local) {
1001
1001
fn record_rvalue_scope_if_borrow_expr ( visitor : & mut RegionResolutionVisitor ,
1002
1002
expr : & hir:: Expr ,
1003
1003
blk_id : CodeExtent ) {
1004
- match expr. node {
1005
- hir:: ExprAddrOf ( _, ref subexpr) => {
1006
- record_rvalue_scope_if_borrow_expr ( visitor, & subexpr, blk_id) ;
1007
- record_rvalue_scope ( visitor, & subexpr, blk_id) ;
1008
- }
1009
- hir:: ExprStruct ( _, ref fields, _) => {
1010
- for field in fields {
1011
- record_rvalue_scope_if_borrow_expr (
1012
- visitor, & field. expr , blk_id) ;
1004
+ debug ! ( "record_rvalue_scope_if_borrow_expr recur on \
1005
+ expr: {:?} blk_id: {:?}", expr, blk_id) ;
1006
+ return recur ( visitor, expr, blk_id) ;
1007
+
1008
+ fn recur ( visitor : & mut RegionResolutionVisitor ,
1009
+ expr : & hir:: Expr ,
1010
+ blk_id : CodeExtent ) {
1011
+ match expr. node {
1012
+ hir:: ExprAddrOf ( _, ref subexpr) => {
1013
+ recur ( visitor, & subexpr, blk_id) ;
1014
+ record_rvalue_scope ( visitor, & subexpr, blk_id) ;
1013
1015
}
1014
- }
1015
- hir:: ExprVec ( ref subexprs) |
1016
- hir:: ExprTup ( ref subexprs) => {
1017
- for subexpr in subexprs {
1018
- record_rvalue_scope_if_borrow_expr (
1019
- visitor, & subexpr, blk_id) ;
1016
+ hir:: ExprStruct ( _, ref fields, _) => {
1017
+ for field in fields {
1018
+ recur ( visitor, & field. expr , blk_id) ;
1019
+ }
1020
1020
}
1021
- }
1022
- hir:: ExprCast ( ref subexpr, _) => {
1023
- record_rvalue_scope_if_borrow_expr ( visitor, & subexpr, blk_id)
1024
- }
1025
- hir:: ExprBlock ( ref block) => {
1026
- match block. expr {
1027
- Some ( ref subexpr) => {
1028
- record_rvalue_scope_if_borrow_expr (
1029
- visitor, & subexpr, blk_id) ;
1021
+ hir:: ExprVec ( ref subexprs) |
1022
+ hir:: ExprTup ( ref subexprs) => {
1023
+ for subexpr in subexprs {
1024
+ recur ( visitor, & subexpr, blk_id) ;
1030
1025
}
1031
- None => { }
1032
1026
}
1033
- }
1034
- _ => {
1027
+ hir:: ExprCast ( ref subexpr, _) => {
1028
+ recur ( visitor, & subexpr, blk_id)
1029
+ }
1030
+ hir:: ExprBlock ( ref block) => {
1031
+ match block. expr {
1032
+ Some ( ref subexpr) => {
1033
+ recur ( visitor, & subexpr, blk_id) ;
1034
+ }
1035
+ None => { }
1036
+ }
1037
+ }
1038
+ _ => {
1039
+ }
1035
1040
}
1036
1041
}
1037
1042
}
@@ -1054,6 +1059,8 @@ fn resolve_local(visitor: &mut RegionResolutionVisitor, local: &hir::Local) {
1054
1059
fn record_rvalue_scope < ' a > ( visitor : & mut RegionResolutionVisitor ,
1055
1060
expr : & ' a hir:: Expr ,
1056
1061
blk_scope : CodeExtent ) {
1062
+ debug ! ( "record_rvalue_scope loop on \
1063
+ expr: {:?} blk_scope: {:?}", expr, blk_scope) ;
1057
1064
let mut expr = expr;
1058
1065
loop {
1059
1066
// Note: give all the expressions matching `ET` with the
0 commit comments