@@ -307,8 +307,7 @@ fn fold_ty[ENV](&ENV env, ast_fold[ENV] fld, @ty t) -> @ty {
307
307
case ( ast. ty_obj ( ?meths) ) {
308
308
let vec[ ast. ty_method ] meths_ = vec ( ) ;
309
309
for ( ast. ty_method m in meths) {
310
- auto tfn = fld. fold_ty_fn( env_, t. span,
311
- m. inputs, m. output) ;
310
+ auto tfn = fold_ty_fn( env_, fld, t. span, m. inputs, m. output) ;
312
311
alt ( tfn. node) {
313
312
case ( ast. ty_fn( ?ins, ?out) ) {
314
313
append[ ast. ty_method]
@@ -330,11 +329,24 @@ fn fold_ty[ENV](&ENV env, ast_fold[ENV] fld, @ty t) -> @ty {
330
329
}
331
330
332
331
case ( ast. ty_fn( ?inputs, ?output) ) {
333
- ret fld . fold_ty_fn( env_, t. span, inputs, output) ;
332
+ ret fold_ty_fn( env_, fld , t. span, inputs, output) ;
334
333
}
335
334
}
336
335
}
337
336
337
+ fn fold_ty_fn[ ENV ] ( & ENV env, ast_fold[ ENV ] fld, & span sp,
338
+ vec[ rec( ast. mode mode, @ty ty) ] inputs,
339
+ @ty output) -> @ty {
340
+ auto output_ = fold_ty( env, fld, output) ;
341
+ let vec[ rec( ast. mode mode, @ty ty) ] inputs_ = vec( ) ;
342
+ for ( rec( ast. mode mode, @ty ty) input in inputs) {
343
+ auto ty_ = fold_ty( env, fld, input. ty) ;
344
+ auto input_ = rec( ty=ty_ with input) ;
345
+ inputs_ += vec( input_) ;
346
+ }
347
+ ret fld. fold_ty_fn( env, sp, inputs_, output_) ;
348
+ }
349
+
338
350
fn fold_decl[ ENV ] ( & ENV env, ast_fold[ ENV ] fld, @decl d) -> @decl {
339
351
let ENV env_ = fld. update_env_for_decl( env, d) ;
340
352
0 commit comments