@@ -149,6 +149,20 @@ type ast_fold[ENV] =
149
149
& option. t [ def] d,
150
150
ann a) -> @expr) fold_expr_path,
151
151
152
+ ( fn ( & ENV e, & span sp) -> @expr) fold_expr_fail,
153
+
154
+ ( fn( & ENV e, & span sp,
155
+ & option. t [ @expr] rv) -> @expr) fold_expr_ret,
156
+
157
+ ( fn ( & ENV e, & span sp,
158
+ @expr e) -> @expr) fold_expr_be,
159
+
160
+ ( fn ( & ENV e, & span sp,
161
+ @expr e) -> @expr) fold_expr_log,
162
+
163
+ ( fn ( & ENV e, & span sp,
164
+ @expr e) -> @expr) fold_expr_check_expr,
165
+
152
166
// Decl folds.
153
167
( fn ( & ENV e, & span sp,
154
168
@ast. local local) -> @decl) fold_decl_local,
@@ -177,18 +191,6 @@ type ast_fold[ENV] =
177
191
( fn ( & ENV e, & span sp,
178
192
@decl decl) -> @stmt) fold_stmt_decl,
179
193
180
- ( fn( & ENV e, & span sp,
181
- & option. t [ @expr] rv) -> @stmt) fold_stmt_ret,
182
-
183
- ( fn ( & ENV e, & span sp,
184
- @expr e) -> @stmt) fold_stmt_be,
185
-
186
- ( fn ( & ENV e, & span sp,
187
- @expr e) -> @stmt) fold_stmt_log,
188
-
189
- ( fn ( & ENV e, & span sp,
190
- @expr e) -> @stmt) fold_stmt_check_expr,
191
-
192
194
( fn ( & ENV e, & span sp,
193
195
@expr e) -> @stmt) fold_stmt_expr,
194
196
@@ -622,6 +624,37 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr {
622
624
auto p_ = fold_path ( env_, fld, p) ;
623
625
ret fld. fold_expr_path ( env_, e. span , p_, r, t) ;
624
626
}
627
+
628
+ case ( ast. expr_fail ) {
629
+ ret fld. fold_expr_fail ( env_, e. span ) ;
630
+ }
631
+
632
+ case ( ast. expr_ret ( ?oe) ) {
633
+ auto oee = none[ @expr] ;
634
+ alt ( oe) {
635
+ case ( some[ @expr] ( ?x) ) {
636
+ oee = some ( fold_expr ( env_, fld, x) ) ;
637
+ }
638
+ case ( _) { /* fall through */ }
639
+ }
640
+ ret fld. fold_expr_ret ( env_, e. span , oee) ;
641
+ }
642
+
643
+ case ( ast. expr_be ( ?x) ) {
644
+ auto ee = fold_expr ( env_, fld, x) ;
645
+ ret fld. fold_expr_be ( env_, e. span , ee) ;
646
+ }
647
+
648
+ case ( ast. expr_log ( ?x) ) {
649
+ auto ee = fold_expr ( env_, fld, x) ;
650
+ ret fld. fold_expr_log ( env_, e. span , ee) ;
651
+ }
652
+
653
+ case ( ast. expr_check_expr ( ?x) ) {
654
+ auto ee = fold_expr ( env_, fld, x) ;
655
+ ret fld. fold_expr_check_expr ( env_, e. span , ee) ;
656
+ }
657
+
625
658
}
626
659
627
660
ret e;
@@ -642,36 +675,6 @@ fn fold_stmt[ENV](&ENV env, ast_fold[ENV] fld, &@stmt s) -> @stmt {
642
675
ret fld. fold_stmt_decl ( env_, s. span , dd) ;
643
676
}
644
677
645
- case ( ast. stmt_ret ( ?oe) ) {
646
- auto oee = none[ @expr] ;
647
- alt ( oe) {
648
- case ( some[ @expr] ( ?e) ) {
649
- oee = some ( fold_expr ( env_, fld, e) ) ;
650
- }
651
- case ( _) { /* fall through */ }
652
- }
653
- ret fld. fold_stmt_ret ( env_, s. span , oee) ;
654
- }
655
-
656
- case ( ast. stmt_be ( ?e) ) {
657
- auto ee = fold_expr ( env_, fld, e) ;
658
- ret fld. fold_stmt_be ( env_, s. span , ee) ;
659
- }
660
-
661
- case ( ast. stmt_log ( ?e) ) {
662
- auto ee = fold_expr ( env_, fld, e) ;
663
- ret fld. fold_stmt_log ( env_, s. span , ee) ;
664
- }
665
-
666
- case ( ast. stmt_check_expr ( ?e) ) {
667
- auto ee = fold_expr ( env_, fld, e) ;
668
- ret fld. fold_stmt_check_expr ( env_, s. span , ee) ;
669
- }
670
-
671
- case ( ast. stmt_fail ) {
672
- ret s;
673
- }
674
-
675
678
case ( ast. stmt_expr ( ?e) ) {
676
679
auto ee = fold_expr ( env_, fld, e) ;
677
680
ret fld. fold_stmt_expr ( env_, s. span , ee) ;
@@ -1118,6 +1121,27 @@ fn identity_fold_expr_path[ENV](&ENV env, &span sp,
1118
1121
ret @respan( sp, ast. expr_path( p, d, a) ) ;
1119
1122
}
1120
1123
1124
+ fn identity_fold_expr_fail[ ENV ] ( & ENV env, & span sp) -> @expr {
1125
+ ret @respan( sp, ast. expr_fail) ;
1126
+ }
1127
+
1128
+ fn identity_fold_expr_ret[ ENV ] ( & ENV env, & span sp,
1129
+ & option. t[ @expr] rv) -> @expr {
1130
+ ret @respan( sp, ast. expr_ret( rv) ) ;
1131
+ }
1132
+
1133
+ fn identity_fold_expr_be[ ENV ] ( & ENV env, & span sp, @expr x) -> @expr {
1134
+ ret @respan( sp, ast. expr_be( x) ) ;
1135
+ }
1136
+
1137
+ fn identity_fold_expr_log[ ENV ] ( & ENV e, & span sp, @expr x) -> @expr {
1138
+ ret @respan( sp, ast. expr_log( x) ) ;
1139
+ }
1140
+
1141
+ fn identity_fold_expr_check_expr[ ENV ] ( & ENV e, & span sp, @expr x) -> @expr {
1142
+ ret @respan( sp, ast. expr_check_expr( x) ) ;
1143
+ }
1144
+
1121
1145
1122
1146
// Decl identities.
1123
1147
@@ -1158,23 +1182,6 @@ fn identity_fold_stmt_decl[ENV](&ENV env, &span sp, @decl d) -> @stmt {
1158
1182
ret @respan( sp, ast. stmt_decl( d) ) ;
1159
1183
}
1160
1184
1161
- fn identity_fold_stmt_ret[ ENV ] ( & ENV env, & span sp,
1162
- & option. t[ @expr] rv) -> @stmt {
1163
- ret @respan( sp, ast. stmt_ret( rv) ) ;
1164
- }
1165
-
1166
- fn identity_fold_stmt_be[ ENV ] ( & ENV env, & span sp, @expr x) -> @stmt {
1167
- ret @respan( sp, ast. stmt_be( x) ) ;
1168
- }
1169
-
1170
- fn identity_fold_stmt_log[ ENV ] ( & ENV e, & span sp, @expr x) -> @stmt {
1171
- ret @respan( sp, ast. stmt_log( x) ) ;
1172
- }
1173
-
1174
- fn identity_fold_stmt_check_expr[ ENV ] ( & ENV e, & span sp, @expr x) -> @stmt {
1175
- ret @respan( sp, ast. stmt_check_expr( x) ) ;
1176
- }
1177
-
1178
1185
fn identity_fold_stmt_expr[ ENV ] ( & ENV e, & span sp, @expr x) -> @stmt {
1179
1186
ret @respan( sp, ast. stmt_expr( x) ) ;
1180
1187
}
@@ -1387,6 +1394,12 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
1387
1394
fold_expr_field = bind identity_fold_expr_field[ ENV ] ( _, _, _, _, _) ,
1388
1395
fold_expr_index = bind identity_fold_expr_index[ ENV ] ( _, _, _, _, _) ,
1389
1396
fold_expr_path = bind identity_fold_expr_path[ ENV ] ( _, _, _, _, _) ,
1397
+ fold_expr_fail = bind identity_fold_expr_fail[ ENV ] ( _, _) ,
1398
+ fold_expr_ret = bind identity_fold_expr_ret[ ENV ] ( _, _, _) ,
1399
+ fold_expr_be = bind identity_fold_expr_be[ ENV ] ( _, _, _) ,
1400
+ fold_expr_log = bind identity_fold_expr_log[ ENV ] ( _, _, _) ,
1401
+ fold_expr_check_expr
1402
+ = bind identity_fold_expr_check_expr[ ENV ] ( _, _, _) ,
1390
1403
1391
1404
fold_decl_local = bind identity_fold_decl_local[ ENV ] ( _, _, _) ,
1392
1405
fold_decl_item = bind identity_fold_decl_item[ ENV ] ( _, _, _) ,
@@ -1397,11 +1410,6 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
1397
1410
fold_pat_tag = bind identity_fold_pat_tag[ ENV ] ( _, _, _, _, _, _) ,
1398
1411
1399
1412
fold_stmt_decl = bind identity_fold_stmt_decl[ ENV ] ( _, _, _) ,
1400
- fold_stmt_ret = bind identity_fold_stmt_ret[ ENV ] ( _, _, _) ,
1401
- fold_stmt_be = bind identity_fold_stmt_be[ ENV ] ( _, _, _) ,
1402
- fold_stmt_log = bind identity_fold_stmt_log[ ENV ] ( _, _, _) ,
1403
- fold_stmt_check_expr
1404
- = bind identity_fold_stmt_check_expr[ ENV ] ( _, _, _) ,
1405
1413
fold_stmt_expr = bind identity_fold_stmt_expr[ ENV ] ( _, _, _) ,
1406
1414
1407
1415
fold_item_const= bind identity_fold_item_const[ ENV ] ( _, _, _, _, _, _, _) ,
0 commit comments