@@ -43,7 +43,8 @@ type ast_fold_precursor =
43
43
fold_ident : fn ( & ident , ast_fold ) -> ident ,
44
44
fold_path : fn ( & path_ , ast_fold ) -> path_ ,
45
45
fold_local : fn ( & local_ , ast_fold ) -> local_ ,
46
- map_exprs : fn ( fn ( & @expr) -> @expr , [ @expr] ) -> [ @expr] } ;
46
+ map_exprs : fn ( fn ( & @expr) -> @expr , [ @expr] ) -> [ @expr] ,
47
+ new_id : fn ( node_id ) -> node_id } ;
47
48
48
49
type a_f =
49
50
{ fold_crate: fn ( & crate ) -> crate ,
@@ -68,7 +69,9 @@ type a_f =
68
69
fold_ident : fn ( & ident ) -> ident ,
69
70
fold_path : fn ( & path ) -> path ,
70
71
fold_local : fn ( & @local ) -> @local ,
71
- map_exprs : fn ( fn ( & @expr) -> @expr , [ @expr] ) -> [ @expr] } ;
72
+ map_exprs: fn ( fn ( & @expr) -> @expr , [ @expr] ) -> [ @expr] ,
73
+ new_id: fn ( node_id ) -> node_id } ;
74
+
72
75
73
76
//fn nf_dummy[T](&T node) -> T { fail; }
74
77
fn nf_crate_dummy( c: & crate ) -> crate { fail ; }
@@ -509,6 +512,8 @@ fn noop_map_exprs(f: fn(&@expr) -> @expr , es: [@expr]) -> [@expr] {
509
512
ret ivec:: map ( f , es ) ;
510
513
}
511
514
515
+ fn noop_id ( i : node_id ) -> node_id { ret i ; }
516
+
512
517
513
518
fn default_ast_fold ( ) -> @ast_fold_precursor {
514
519
ret @{ fold_crate : noop_fold_crate ,
@@ -533,7 +538,8 @@ fn default_ast_fold() -> @ast_fold_precursor {
533
538
fold_ident : noop_fold_ident ,
534
539
fold_path : noop_fold_path ,
535
540
fold_local : noop_fold_local ,
536
- map_exprs : noop_map_exprs } ;
541
+ map_exprs : noop_map_exprs ,
542
+ new_id : noop_id } ;
537
543
}
538
544
539
545
fn dummy_out ( a : ast_fold ) {
@@ -560,7 +566,8 @@ fn dummy_out(a: ast_fold) {
560
566
fold_ident : nf_ident_dummy ,
561
567
fold_path : nf_path_dummy ,
562
568
fold_local : nf_local_dummy ,
563
- map_exprs : noop_map_exprs } ;
569
+ map_exprs : noop_map_exprs ,
570
+ new_id : noop_id } ;
564
571
}
565
572
566
573
@@ -588,7 +595,8 @@ fn make_fold(afp: &ast_fold_precursor) -> ast_fold {
588
595
fold_ident : nf_ident_dummy ,
589
596
fold_path : nf_path_dummy ,
590
597
fold_local : nf_local_dummy ,
591
- map_exprs : noop_map_exprs } ;
598
+ map_exprs : noop_map_exprs ,
599
+ new_id : noop_id } ;
592
600
593
601
/* naturally, a macro to write these would be nice */
594
602
fn f_crate( afp: & ast_fold_precursor, f: ast_fold, c: & crate ) -> crate {
@@ -627,13 +635,15 @@ fn make_fold(afp: &ast_fold_precursor) -> ast_fold {
627
635
ret afp. fold_arm ( x , f ) ;
628
636
}
629
637
fn f_pat( afp : & ast_fold_precursor , f : ast_fold , x : & @pat) -> @pat {
630
- ret @{ id : x. id, node : afp. fold_pat ( x. node , f ) , span : x. span } ;
638
+ ret @{ id : afp. new_id ( x. id ) ,
639
+ node : afp. fold_pat ( x. node , f ) , span : x. span } ;
631
640
}
632
641
fn f_decl ( afp : & ast_fold_precursor , f : ast_fold , x : & @decl ) -> @decl {
633
642
ret @{ node : afp. fold_decl ( x. node , f ) , span: x. span } ;
634
643
}
635
644
fn f_expr( afp : & ast_fold_precursor , f : ast_fold , x : & @expr) -> @expr {
636
- ret @{ id : x. id, node : afp. fold_expr ( x. node , f ) , span: x. span } ;
645
+ ret @{ id : afp. new_id ( x. id ) ,
646
+ node : afp. fold_expr ( x. node , f ) , span: x. span } ;
637
647
}
638
648
fn f_ty( afp : & ast_fold_precursor , f : ast_fold , x : & @ty) -> @ty {
639
649
ret @{ node : afp. fold_ty ( x. node , f ) , span : x. span } ;
@@ -689,7 +699,8 @@ fn make_fold(afp: &ast_fold_precursor) -> ast_fold {
689
699
fold_ident : bind f_ident ( afp , result , _) ,
690
700
fold_path : bind f_path ( afp , result , _) ,
691
701
fold_local : bind f_local ( afp , result , _) ,
692
- map_exprs : afp. map_exprs } ;
702
+ map_exprs : afp. map_exprs ,
703
+ new_id : afp. new_id } ;
693
704
ret result;
694
705
}
695
706
0 commit comments