@@ -48,6 +48,9 @@ type ast_fold[ENV] =
48
48
49
49
( fn( & ENV e, & span sp, vec[ @ty] elts) -> @ty) fold_ty_tup,
50
50
51
+ ( fn ( & ENV e, & span sp,
52
+ vec[ tup ( ident, @ty) ] elts) -> @ty) fold_ty_rec,
53
+
51
54
( fn ( & ENV e, & span sp,
52
55
vec[ rec ( ast. mode mode, @ty ty) ] inputs,
53
56
@ty output) -> @ty) fold_ty_fn,
@@ -252,6 +255,15 @@ fn fold_ty[ENV](&ENV env, ast_fold[ENV] fld, @ty t) -> @ty {
252
255
ret fld. fold_ty_tup ( env_, t. span , elts) ;
253
256
}
254
257
258
+ case ( ast. ty_rec ( ?elts) ) {
259
+ let vec[ tup( ident, @ty) ] elts_ = vec ( ) ;
260
+ for ( tup( ident, @ty) elt in elts) {
261
+ append[ tup ( ident, @ty) ]
262
+ ( elts_, tup ( elt. _0 , fold_ty ( env, fld, elt. _1 ) ) ) ;
263
+ }
264
+ ret fld. fold_ty_rec ( env_, t. span , elts) ;
265
+ }
266
+
255
267
case ( ast. ty_path ( ?pth, ?ref_opt) ) {
256
268
let vec[ ast. name ] path = vec ( ) ;
257
269
for ( ast. name n in pth) {
@@ -655,6 +667,11 @@ fn identity_fold_ty_tup[ENV](&ENV env, &span sp,
655
667
ret @respan ( sp, ast. ty_tup ( elts) ) ;
656
668
}
657
669
670
+ fn identity_fold_ty_rec[ ENV ] ( & ENV env, & span sp,
671
+ vec[ tup ( ident, @ty) ] elts) -> @ty {
672
+ ret @respan ( sp, ast. ty_rec ( elts) ) ;
673
+ }
674
+
658
675
fn identity_fold_ty_fn[ ENV ] ( & ENV env, & span sp,
659
676
vec[ rec ( ast. mode mode, @ty ty) ] inputs,
660
677
@ty output) -> @ty {
@@ -918,6 +935,7 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
918
935
fold_ty_box = bind identity_fold_ty_box[ ENV ] ( _, _, _) ,
919
936
fold_ty_vec = bind identity_fold_ty_vec[ ENV ] ( _, _, _) ,
920
937
fold_ty_tup = bind identity_fold_ty_tup[ ENV ] ( _, _, _) ,
938
+ fold_ty_rec = bind identity_fold_ty_rec[ ENV ] ( _, _, _) ,
921
939
fold_ty_fn = bind identity_fold_ty_fn[ ENV ] ( _, _, _, _) ,
922
940
fold_ty_path = bind identity_fold_ty_path[ ENV ] ( _, _, _, _) ,
923
941
fold_ty_mutable = bind identity_fold_ty_mutable[ ENV ] ( _, _, _) ,
0 commit comments