@@ -20,8 +20,6 @@ use syntax::owned_slice::OwnedSlice;
20
20
use syntax:: ptr:: P ;
21
21
use syntax:: parse:: token;
22
22
use std:: ptr;
23
- use syntax:: util:: small_vector:: SmallVector ;
24
-
25
23
26
24
// This could have a better place to live.
27
25
pub trait MoveMap < T > {
@@ -79,14 +77,10 @@ pub trait Folder : Sized {
79
77
noop_fold_foreign_item ( ni, self )
80
78
}
81
79
82
- fn fold_item ( & mut self , i : P < Item > ) -> SmallVector < P < Item > > {
80
+ fn fold_item ( & mut self , i : P < Item > ) -> P < Item > {
83
81
noop_fold_item ( i, self )
84
82
}
85
83
86
- fn fold_item_simple ( & mut self , i : Item ) -> Item {
87
- noop_fold_item_simple ( i, self )
88
- }
89
-
90
84
fn fold_struct_field ( & mut self , sf : StructField ) -> StructField {
91
85
noop_fold_struct_field ( sf, self )
92
86
}
@@ -95,11 +89,11 @@ pub trait Folder : Sized {
95
89
noop_fold_item_underscore ( i, self )
96
90
}
97
91
98
- fn fold_trait_item ( & mut self , i : P < TraitItem > ) -> SmallVector < P < TraitItem > > {
92
+ fn fold_trait_item ( & mut self , i : P < TraitItem > ) -> P < TraitItem > {
99
93
noop_fold_trait_item ( i, self )
100
94
}
101
95
102
- fn fold_impl_item ( & mut self , i : P < ImplItem > ) -> SmallVector < P < ImplItem > > {
96
+ fn fold_impl_item ( & mut self , i : P < ImplItem > ) -> P < ImplItem > {
103
97
noop_fold_impl_item ( i, self )
104
98
}
105
99
@@ -111,8 +105,8 @@ pub trait Folder : Sized {
111
105
noop_fold_block ( b, self )
112
106
}
113
107
114
- fn fold_stmt ( & mut self , s : P < Stmt > ) -> SmallVector < P < Stmt > > {
115
- s . and_then ( |s| noop_fold_stmt ( s, self ) )
108
+ fn fold_stmt ( & mut self , s : P < Stmt > ) -> P < Stmt > {
109
+ noop_fold_stmt ( s, self )
116
110
}
117
111
118
112
fn fold_arm ( & mut self , a : Arm ) -> Arm {
@@ -123,7 +117,7 @@ pub trait Folder : Sized {
123
117
noop_fold_pat ( p, self )
124
118
}
125
119
126
- fn fold_decl ( & mut self , d : P < Decl > ) -> SmallVector < P < Decl > > {
120
+ fn fold_decl ( & mut self , d : P < Decl > ) -> P < Decl > {
127
121
noop_fold_decl ( d, self )
128
122
}
129
123
@@ -340,22 +334,17 @@ pub fn noop_fold_arm<T: Folder>(Arm { attrs, pats, guard, body }: Arm, fld: &mut
340
334
}
341
335
}
342
336
343
- pub fn noop_fold_decl < T : Folder > ( d : P < Decl > , fld : & mut T ) -> SmallVector < P < Decl > > {
344
- d. and_then ( |Spanned { node, span } | {
337
+ pub fn noop_fold_decl < T : Folder > ( d : P < Decl > , fld : & mut T ) -> P < Decl > {
338
+ d. map ( |Spanned { node, span } | {
345
339
match node {
346
- DeclLocal ( l) => SmallVector :: one ( P ( Spanned {
340
+ DeclLocal ( l) => Spanned {
347
341
node : DeclLocal ( fld. fold_local ( l) ) ,
348
342
span : fld. new_span ( span) ,
349
- } ) ) ,
350
- DeclItem ( it) => fld. fold_item ( it)
351
- . into_iter ( )
352
- . map ( |i| {
353
- P ( Spanned {
354
- node : DeclItem ( i) ,
355
- span : fld. new_span ( span) ,
356
- } )
357
- } )
358
- . collect ( ) ,
343
+ } ,
344
+ DeclItem ( it) => Spanned {
345
+ node : DeclItem ( fld. fold_item ( it) ) ,
346
+ span : fld. new_span ( span) ,
347
+ } ,
359
348
}
360
349
} )
361
350
}
@@ -771,7 +760,7 @@ pub fn noop_fold_block<T: Folder>(b: P<Block>, folder: &mut T) -> P<Block> {
771
760
b. map ( |Block { id, stmts, expr, rules, span } | {
772
761
Block {
773
762
id : folder. new_id ( id) ,
774
- stmts : stmts. into_iter ( ) . flat_map ( |s| folder. fold_stmt ( s) . into_iter ( ) ) . collect ( ) ,
763
+ stmts : stmts. into_iter ( ) . map ( |s| folder. fold_stmt ( s) ) . collect ( ) ,
775
764
expr : expr. map ( |x| folder. fold_expr ( x) ) ,
776
765
rules : rules,
777
766
span : folder. new_span ( span) ,
@@ -819,9 +808,7 @@ pub fn noop_fold_item_underscore<T: Folder>(i: Item_, folder: &mut T) -> Item_ {
819
808
}
820
809
ItemImpl ( unsafety, polarity, generics, ifce, ty, impl_items) => {
821
810
let new_impl_items = impl_items. into_iter ( )
822
- . flat_map ( |item| {
823
- folder. fold_impl_item ( item) . into_iter ( )
824
- } )
811
+ . map ( |item| folder. fold_impl_item ( item) )
825
812
. collect ( ) ;
826
813
let ifce = match ifce {
827
814
None => None ,
@@ -839,7 +826,7 @@ pub fn noop_fold_item_underscore<T: Folder>(i: Item_, folder: &mut T) -> Item_ {
839
826
ItemTrait ( unsafety, generics, bounds, items) => {
840
827
let bounds = folder. fold_bounds ( bounds) ;
841
828
let items = items. into_iter ( )
842
- . flat_map ( |item| folder. fold_trait_item ( item) . into_iter ( ) )
829
+ . map ( |item| folder. fold_trait_item ( item) )
843
830
. collect ( ) ;
844
831
ItemTrait ( unsafety, folder. fold_generics ( generics) , bounds, items)
845
832
}
@@ -848,8 +835,8 @@ pub fn noop_fold_item_underscore<T: Folder>(i: Item_, folder: &mut T) -> Item_ {
848
835
849
836
pub fn noop_fold_trait_item < T : Folder > ( i : P < TraitItem > ,
850
837
folder : & mut T )
851
- -> SmallVector < P < TraitItem > > {
852
- SmallVector :: one ( i. map ( |TraitItem { id, name, attrs, node, span } | {
838
+ -> P < TraitItem > {
839
+ i. map ( |TraitItem { id, name, attrs, node, span } | {
853
840
TraitItem {
854
841
id : folder. new_id ( id) ,
855
842
name : folder. fold_name ( name) ,
@@ -869,11 +856,11 @@ pub fn noop_fold_trait_item<T: Folder>(i: P<TraitItem>,
869
856
} ,
870
857
span : folder. new_span ( span) ,
871
858
}
872
- } ) )
859
+ } )
873
860
}
874
861
875
- pub fn noop_fold_impl_item < T : Folder > ( i : P < ImplItem > , folder : & mut T ) -> SmallVector < P < ImplItem > > {
876
- SmallVector :: one ( i. map ( |ImplItem { id, name, attrs, node, vis, span } | {
862
+ pub fn noop_fold_impl_item < T : Folder > ( i : P < ImplItem > , folder : & mut T ) -> P < ImplItem > {
863
+ i. map ( |ImplItem { id, name, attrs, node, vis, span } | {
877
864
ImplItem {
878
865
id : folder. new_id ( id) ,
879
866
name : folder. fold_name ( name) ,
@@ -890,13 +877,13 @@ pub fn noop_fold_impl_item<T: Folder>(i: P<ImplItem>, folder: &mut T) -> SmallVe
890
877
} ,
891
878
span : folder. new_span ( span) ,
892
879
}
893
- } ) )
880
+ } )
894
881
}
895
882
896
883
pub fn noop_fold_mod < T : Folder > ( Mod { inner, items } : Mod , folder : & mut T ) -> Mod {
897
884
Mod {
898
885
inner : folder. new_span ( inner) ,
899
- items : items. into_iter ( ) . flat_map ( |x| folder. fold_item ( x) . into_iter ( ) ) . collect ( ) ,
886
+ items : items. into_iter ( ) . map ( |x| folder. fold_item ( x) ) . collect ( ) ,
900
887
}
901
888
}
902
889
@@ -905,34 +892,22 @@ pub fn noop_fold_crate<T: Folder>(Crate { module, attrs, config, span, exported_
905
892
-> Crate {
906
893
let config = folder. fold_meta_items ( config) ;
907
894
908
- let mut items = folder. fold_item ( P ( hir:: Item {
909
- name : token:: special_idents:: invalid. name ,
910
- attrs : attrs,
911
- id : DUMMY_NODE_ID ,
912
- vis : hir:: Public ,
913
- span : span,
914
- node : hir:: ItemMod ( module) ,
915
- } ) )
916
- . into_iter ( ) ;
917
-
918
- let ( module, attrs, span) = match items. next ( ) {
919
- Some ( item) => {
920
- assert ! ( items. next( ) . is_none( ) ,
921
- "a crate cannot expand to more than one item" ) ;
922
- item. and_then ( |hir:: Item { attrs, span, node, .. } | {
923
- match node {
924
- hir:: ItemMod ( m) => ( m, attrs, span) ,
925
- _ => panic ! ( "fold converted a module to not a module" ) ,
926
- }
927
- } )
928
- }
929
- None => ( hir:: Mod {
930
- inner : span,
931
- items : vec ! [ ] ,
932
- } ,
933
- vec ! [ ] ,
934
- span) ,
935
- } ;
895
+ let crate_mod = folder. fold_item ( P ( hir:: Item {
896
+ name : token:: special_idents:: invalid. name ,
897
+ attrs : attrs,
898
+ id : DUMMY_NODE_ID ,
899
+ vis : hir:: Public ,
900
+ span : span,
901
+ node : hir:: ItemMod ( module) ,
902
+ } ) ) ;
903
+
904
+ let ( module, attrs, span) =
905
+ crate_mod. and_then ( |hir:: Item { attrs, span, node, .. } | {
906
+ match node {
907
+ hir:: ItemMod ( m) => ( m, attrs, span) ,
908
+ _ => panic ! ( "fold converted a module to not a module" ) ,
909
+ }
910
+ } ) ;
936
911
937
912
Crate {
938
913
module : module,
@@ -943,34 +918,28 @@ pub fn noop_fold_crate<T: Folder>(Crate { module, attrs, config, span, exported_
943
918
}
944
919
}
945
920
946
- // fold one item into possibly many items
947
- pub fn noop_fold_item < T : Folder > ( i : P < Item > , folder : & mut T ) -> SmallVector < P < Item > > {
948
- SmallVector :: one ( i. map ( |i| folder. fold_item_simple ( i) ) )
949
- }
950
-
951
- // fold one item into exactly one item
952
- pub fn noop_fold_item_simple < T : Folder > ( Item { id, name, attrs, node, vis, span } : Item ,
953
- folder : & mut T )
954
- -> Item {
955
- let id = folder. new_id ( id) ;
956
- let node = folder. fold_item_underscore ( node) ;
957
- // FIXME: we should update the impl_pretty_name, but it uses pretty printing.
958
- // let ident = match node {
959
- // // The node may have changed, recompute the "pretty" impl name.
960
- // ItemImpl(_, _, _, ref maybe_trait, ref ty, _) => {
961
- // impl_pretty_name(maybe_trait, Some(&**ty))
962
- // }
963
- // _ => ident
964
- // };
965
-
966
- Item {
967
- id : id,
968
- name : folder. fold_name ( name) ,
969
- attrs : fold_attrs ( attrs, folder) ,
970
- node : node,
971
- vis : vis,
972
- span : folder. new_span ( span) ,
973
- }
921
+ pub fn noop_fold_item < T : Folder > ( item : P < Item > , folder : & mut T ) -> P < Item > {
922
+ item. map ( |Item { id, name, attrs, node, vis, span } | {
923
+ let id = folder. new_id ( id) ;
924
+ let node = folder. fold_item_underscore ( node) ;
925
+ // FIXME: we should update the impl_pretty_name, but it uses pretty printing.
926
+ // let ident = match node {
927
+ // // The node may have changed, recompute the "pretty" impl name.
928
+ // ItemImpl(_, _, _, ref maybe_trait, ref ty, _) => {
929
+ // impl_pretty_name(maybe_trait, Some(&**ty))
930
+ // }
931
+ // _ => ident
932
+ // };
933
+
934
+ Item {
935
+ id : id,
936
+ name : folder. fold_name ( name) ,
937
+ attrs : fold_attrs ( attrs, folder) ,
938
+ node : node,
939
+ vis : vis,
940
+ span : folder. new_span ( span) ,
941
+ }
942
+ } )
974
943
}
975
944
976
945
pub fn noop_fold_foreign_item < T : Folder > ( ni : P < ForeignItem > , folder : & mut T ) -> P < ForeignItem > {
@@ -1184,36 +1153,32 @@ pub fn noop_fold_expr<T: Folder>(Expr { id, node, span }: Expr, folder: &mut T)
1184
1153
}
1185
1154
}
1186
1155
1187
- pub fn noop_fold_stmt < T : Folder > ( Spanned { node, span } : Stmt ,
1188
- folder : & mut T )
1189
- -> SmallVector < P < Stmt > > {
1190
- let span = folder. new_span ( span) ;
1191
- match node {
1192
- StmtDecl ( d, id) => {
1193
- let id = folder. new_id ( id) ;
1194
- folder. fold_decl ( d)
1195
- . into_iter ( )
1196
- . map ( |d| {
1197
- P ( Spanned {
1198
- node : StmtDecl ( d, id) ,
1199
- span : span,
1200
- } )
1201
- } )
1202
- . collect ( )
1203
- }
1204
- StmtExpr ( e, id) => {
1205
- let id = folder. new_id ( id) ;
1206
- SmallVector :: one ( P ( Spanned {
1207
- node : StmtExpr ( folder. fold_expr ( e) , id) ,
1208
- span : span,
1209
- } ) )
1210
- }
1211
- StmtSemi ( e, id) => {
1212
- let id = folder. new_id ( id) ;
1213
- SmallVector :: one ( P ( Spanned {
1214
- node : StmtSemi ( folder. fold_expr ( e) , id) ,
1215
- span : span,
1216
- } ) )
1156
+ pub fn noop_fold_stmt < T : Folder > ( stmt : P < Stmt > , folder : & mut T )
1157
+ -> P < Stmt > {
1158
+ stmt. map ( |Spanned { node, span } | {
1159
+ let span = folder. new_span ( span) ;
1160
+ match node {
1161
+ StmtDecl ( d, id) => {
1162
+ let id = folder. new_id ( id) ;
1163
+ Spanned {
1164
+ node : StmtDecl ( folder. fold_decl ( d) , id) ,
1165
+ span : span
1166
+ }
1167
+ }
1168
+ StmtExpr ( e, id) => {
1169
+ let id = folder. new_id ( id) ;
1170
+ Spanned {
1171
+ node : StmtExpr ( folder. fold_expr ( e) , id) ,
1172
+ span : span,
1173
+ }
1174
+ }
1175
+ StmtSemi ( e, id) => {
1176
+ let id = folder. new_id ( id) ;
1177
+ Spanned {
1178
+ node : StmtSemi ( folder. fold_expr ( e) , id) ,
1179
+ span : span,
1180
+ }
1181
+ }
1217
1182
}
1218
- }
1183
+ } )
1219
1184
}
0 commit comments