@@ -27,8 +27,6 @@ use ptr::P;
27
27
use util:: small_vector:: SmallVector ;
28
28
use util:: move_map:: MoveMap ;
29
29
30
- use std:: rc:: Rc ;
31
-
32
30
pub trait Folder : Sized {
33
31
// Any additions to this trait should happen in form
34
32
// of a call to a public `noop_*` function that only calls
@@ -227,11 +225,11 @@ pub trait Folder : Sized {
227
225
noop_fold_ty_params ( tps, self )
228
226
}
229
227
230
- fn fold_tt ( & mut self , tt : & TokenTree ) -> TokenTree {
228
+ fn fold_tt ( & mut self , tt : TokenTree ) -> TokenTree {
231
229
noop_fold_tt ( tt, self )
232
230
}
233
231
234
- fn fold_tts ( & mut self , tts : & [ TokenTree ] ) -> Vec < TokenTree > {
232
+ fn fold_tts ( & mut self , tts : Vec < TokenTree > ) -> Vec < TokenTree > {
235
233
noop_fold_tts ( tts, self )
236
234
}
237
235
@@ -519,7 +517,7 @@ pub fn noop_fold_mac<T: Folder>(Spanned {node, span}: Mac, fld: &mut T) -> Mac {
519
517
Spanned {
520
518
node : Mac_ {
521
519
path : fld. fold_path ( node. path ) ,
522
- tts : fld. fold_tts ( & node. tts ) ,
520
+ tts : fld. fold_tts ( node. tts ) ,
523
521
} ,
524
522
span : fld. new_span ( span)
525
523
}
@@ -546,34 +544,26 @@ pub fn noop_fold_arg<T: Folder>(Arg {id, pat, ty}: Arg, fld: &mut T) -> Arg {
546
544
}
547
545
}
548
546
549
- pub fn noop_fold_tt < T : Folder > ( tt : & TokenTree , fld : & mut T ) -> TokenTree {
550
- match * tt {
547
+ pub fn noop_fold_tt < T : Folder > ( tt : TokenTree , fld : & mut T ) -> TokenTree {
548
+ match tt {
551
549
TokenTree :: Token ( span, ref tok) =>
552
550
TokenTree :: Token ( span, fld. fold_token ( tok. clone ( ) ) ) ,
553
- TokenTree :: Delimited ( span, ref delimed) => {
554
- TokenTree :: Delimited ( span, Rc :: new (
555
- Delimited {
556
- delim : delimed. delim ,
557
- open_span : delimed. open_span ,
558
- tts : fld. fold_tts ( & delimed. tts ) ,
559
- close_span : delimed. close_span ,
560
- }
561
- ) )
562
- } ,
563
- TokenTree :: Sequence ( span, ref seq) =>
564
- TokenTree :: Sequence ( span,
565
- Rc :: new ( SequenceRepetition {
566
- tts : fld. fold_tts ( & seq. tts ) ,
567
- separator : seq. separator . clone ( ) . map ( |tok| fld. fold_token ( tok) ) ,
568
- ..* * seq
569
- } ) ) ,
551
+ TokenTree :: Delimited ( span, delimed) => TokenTree :: Delimited ( span, Delimited {
552
+ delim : delimed. delim ,
553
+ open_span : delimed. open_span ,
554
+ tts : fld. fold_tts ( delimed. tts ) ,
555
+ close_span : delimed. close_span ,
556
+ } ) ,
557
+ TokenTree :: Sequence ( span, seq) => TokenTree :: Sequence ( span, SequenceRepetition {
558
+ tts : fld. fold_tts ( seq. tts ) ,
559
+ separator : seq. separator . clone ( ) . map ( |tok| fld. fold_token ( tok) ) ,
560
+ ..seq
561
+ } ) ,
570
562
}
571
563
}
572
564
573
- pub fn noop_fold_tts < T : Folder > ( tts : & [ TokenTree ] , fld : & mut T ) -> Vec < TokenTree > {
574
- // FIXME: Does this have to take a tts slice?
575
- // Could use move_map otherwise...
576
- tts. iter ( ) . map ( |tt| fld. fold_tt ( tt) ) . collect ( )
565
+ pub fn noop_fold_tts < T : Folder > ( tts : Vec < TokenTree > , fld : & mut T ) -> Vec < TokenTree > {
566
+ tts. move_map ( |tt| fld. fold_tt ( tt) )
577
567
}
578
568
579
569
// apply ident folder if it's an ident, apply other folds to interpolated nodes
@@ -631,7 +621,7 @@ pub fn noop_fold_interpolated<T: Folder>(nt: token::Nonterminal, fld: &mut T)
631
621
token:: NtIdent ( Box :: new ( Spanned :: < Ident > { node : fld. fold_ident ( id. node ) , ..* id} ) ) ,
632
622
token:: NtMeta ( meta_item) => token:: NtMeta ( fld. fold_meta_item ( meta_item) ) ,
633
623
token:: NtPath ( path) => token:: NtPath ( Box :: new ( fld. fold_path ( * path) ) ) ,
634
- token:: NtTT ( tt) => token:: NtTT ( P ( fld. fold_tt ( & tt) ) ) ,
624
+ token:: NtTT ( tt) => token:: NtTT ( tt . map ( |tt| fld. fold_tt ( tt) ) ) ,
635
625
token:: NtArm ( arm) => token:: NtArm ( fld. fold_arm ( arm) ) ,
636
626
token:: NtImplItem ( arm) =>
637
627
token:: NtImplItem ( arm. map ( |arm| fld. fold_impl_item ( arm)
0 commit comments