@@ -81,6 +81,14 @@ type ast_fold[ENV] =
81
81
& option[ block] els,
82
82
option[ @ty] ty) -> @expr) fold_expr_if,
83
83
84
+ ( fn ( & ENV e, & span sp,
85
+ @expr cond, & block body,
86
+ option[ @ty] ty) -> @expr) fold_expr_while,
87
+
88
+ ( fn ( & ENV e, & span sp,
89
+ & block body, @expr cond,
90
+ option[ @ty] ty) -> @expr) fold_expr_do_while,
91
+
84
92
( fn ( & ENV e, & span sp,
85
93
& block blk, option[ @ty] ty) -> @expr) fold_expr_block,
86
94
@@ -335,6 +343,18 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr {
335
343
ret fld. fold_expr_if ( env_, e. span , ccnd, tthn, eels, t) ;
336
344
}
337
345
346
+ case ( ast. expr_while ( ?cnd, ?body, ?t) ) {
347
+ auto ccnd = fold_expr ( env_, fld, cnd) ;
348
+ auto bbody = fold_block ( env_, fld, body) ;
349
+ ret fld. fold_expr_while ( env_, e. span , ccnd, bbody, t) ;
350
+ }
351
+
352
+ case ( ast. expr_do_while ( ?body, ?cnd, ?t) ) {
353
+ auto bbody = fold_block ( env_, fld, body) ;
354
+ auto ccnd = fold_expr ( env_, fld, cnd) ;
355
+ ret fld. fold_expr_do_while ( env_, e. span , bbody, ccnd, t) ;
356
+ }
357
+
338
358
case ( ast. expr_block ( ?b, ?t) ) {
339
359
auto bb = fold_block ( env_, fld, b) ;
340
360
ret fld. fold_expr_block ( env_, e. span , bb, t) ;
@@ -598,6 +618,18 @@ fn identity_fold_expr_if[ENV](&ENV env, &span sp,
598
618
ret @respan ( sp, ast. expr_if ( cond, thn, els, t) ) ;
599
619
}
600
620
621
+ fn identity_fold_expr_while[ ENV ] ( & ENV env, & span sp,
622
+ @expr cond, & block body,
623
+ option[ @ty] t) -> @expr {
624
+ ret @respan ( sp, ast. expr_while ( cond, body, t) ) ;
625
+ }
626
+
627
+ fn identity_fold_expr_do_while[ ENV ] ( & ENV env, & span sp,
628
+ & block body, @expr cond,
629
+ option[ @ty] t) -> @expr {
630
+ ret @respan ( sp, ast. expr_do_while ( body, cond, t) ) ;
631
+ }
632
+
601
633
fn identity_fold_expr_block[ ENV ] ( & ENV env, & span sp, & block blk,
602
634
option[ @ty] t) -> @expr {
603
635
ret @respan ( sp, ast. expr_block ( blk, t) ) ;
@@ -765,6 +797,9 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
765
797
fold_expr_unary = bind identity_fold_expr_unary[ ENV ] ( _, _, _, _, _) ,
766
798
fold_expr_lit = bind identity_fold_expr_lit[ ENV ] ( _, _, _, _) ,
767
799
fold_expr_if = bind identity_fold_expr_if[ ENV ] ( _, _, _, _, _, _) ,
800
+ fold_expr_while = bind identity_fold_expr_while[ ENV ] ( _, _, _, _, _) ,
801
+ fold_expr_do_while
802
+ = bind identity_fold_expr_do_while[ ENV ] ( _, _, _, _, _) ,
768
803
fold_expr_block = bind identity_fold_expr_block[ ENV ] ( _, _, _, _) ,
769
804
fold_expr_assign = bind identity_fold_expr_assign[ ENV ] ( _, _, _, _, _) ,
770
805
fold_expr_field = bind identity_fold_expr_field[ ENV ] ( _, _, _, _, _) ,
0 commit comments