@@ -74,6 +74,10 @@ type ast_fold[ENV] =
74
74
@expr f, vec[ @expr] args,
75
75
ann a) -> @expr) fold_expr_call,
76
76
77
+ ( fn( & ENV e, & span sp,
78
+ @expr f, vec[ option. t [ @expr] ] args,
79
+ ann a) -> @expr) fold_expr_bind,
80
+
77
81
( fn ( & ENV e, & span sp,
78
82
ast. binop ,
79
83
@expr lhs, @expr rhs,
@@ -417,6 +421,20 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr {
417
421
ret fld. fold_expr_call ( env_, e. span , ff, aargs, t) ;
418
422
}
419
423
424
+ case ( ast. expr_bind ( ?f, ?args_opt, ?t) ) {
425
+ auto ff = fold_expr ( env_, fld, f) ;
426
+ let vec[ option. t [ @ast. expr ] ] aargs_opt = vec ( ) ;
427
+ for ( option. t[ @ast. expr] t_opt in args_opt) {
428
+ alt ( t_opt) {
429
+ case ( some[ @ast. expr] ( ?e) ) {
430
+ aargs_opt += vec( some( fold_expr( env_, fld, e) ) ) ;
431
+ }
432
+ case ( none[ @ast. expr] ) { /* empty */ }
433
+ }
434
+ }
435
+ ret fld. fold_expr_bind( env_, e. span, ff, aargs_opt, t) ;
436
+ }
437
+
420
438
case ( ast. expr_binary( ?op, ?a, ?b, ?t) ) {
421
439
auto aa = fold_expr( env_, fld, a) ;
422
440
auto bb = fold_expr( env_, fld, b) ;
@@ -807,6 +825,12 @@ fn identity_fold_expr_call[ENV](&ENV env, &span sp, @expr f,
807
825
ret @respan( sp, ast. expr_call( f, args, a) ) ;
808
826
}
809
827
828
+ fn identity_fold_expr_bind[ ENV ] ( & ENV env, & span sp, @expr f,
829
+ vec[ option. t[ @expr] ] args_opt, ann a)
830
+ -> @expr {
831
+ ret @respan( sp, ast. expr_bind( f, args_opt, a) ) ;
832
+ }
833
+
810
834
fn identity_fold_expr_binary[ ENV ] ( & ENV env, & span sp, ast. binop b,
811
835
@expr lhs, @expr rhs,
812
836
ann a) -> @expr {
@@ -1075,6 +1099,7 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
1075
1099
fold_expr_tup = bind identity_fold_expr_tup[ ENV ] ( _, _, _, _) ,
1076
1100
fold_expr_rec = bind identity_fold_expr_rec[ ENV ] ( _, _, _, _) ,
1077
1101
fold_expr_call = bind identity_fold_expr_call[ ENV ] ( _, _, _, _, _) ,
1102
+ fold_expr_bind = bind identity_fold_expr_bind[ ENV ] ( _, _, _, _, _) ,
1078
1103
fold_expr_binary = bind identity_fold_expr_binary[ ENV ] ( _, _, _, _, _, _) ,
1079
1104
fold_expr_unary = bind identity_fold_expr_unary[ ENV ] ( _, _, _, _, _) ,
1080
1105
fold_expr_lit = bind identity_fold_expr_lit[ ENV ] ( _, _, _, _) ,
0 commit comments