@@ -27,8 +27,6 @@ use ptr::P;
2727use util:: small_vector:: SmallVector ;
2828use util:: move_map:: MoveMap ;
2929
30- use std:: rc:: Rc ;
31-
3230pub trait Folder : Sized {
3331 // Any additions to this trait should happen in form
3432 // of a call to a public `noop_*` function that only calls
@@ -227,11 +225,11 @@ pub trait Folder : Sized {
227225 noop_fold_ty_params ( tps, self )
228226 }
229227
230- fn fold_tt ( & mut self , tt : & TokenTree ) -> TokenTree {
228+ fn fold_tt ( & mut self , tt : TokenTree ) -> TokenTree {
231229 noop_fold_tt ( tt, self )
232230 }
233231
234- fn fold_tts ( & mut self , tts : & [ TokenTree ] ) -> Vec < TokenTree > {
232+ fn fold_tts ( & mut self , tts : Vec < TokenTree > ) -> Vec < TokenTree > {
235233 noop_fold_tts ( tts, self )
236234 }
237235
@@ -519,7 +517,7 @@ pub fn noop_fold_mac<T: Folder>(Spanned {node, span}: Mac, fld: &mut T) -> Mac {
519517 Spanned {
520518 node : Mac_ {
521519 path : fld. fold_path ( node. path ) ,
522- tts : fld. fold_tts ( & node. tts ) ,
520+ tts : fld. fold_tts ( node. tts ) ,
523521 } ,
524522 span : fld. new_span ( span)
525523 }
@@ -546,34 +544,26 @@ pub fn noop_fold_arg<T: Folder>(Arg {id, pat, ty}: Arg, fld: &mut T) -> Arg {
546544 }
547545}
548546
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 {
551549 TokenTree :: Token ( span, ref tok) =>
552550 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+ } ) ,
570562 }
571563}
572564
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) )
577567}
578568
579569// 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)
631621 token:: NtIdent ( Box :: new ( Spanned :: < Ident > { node : fld. fold_ident ( id. node ) , ..* id} ) ) ,
632622 token:: NtMeta ( meta_item) => token:: NtMeta ( fld. fold_meta_item ( meta_item) ) ,
633623 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) ) ) ,
635625 token:: NtArm ( arm) => token:: NtArm ( fld. fold_arm ( arm) ) ,
636626 token:: NtImplItem ( arm) =>
637627 token:: NtImplItem ( arm. map ( |arm| fld. fold_impl_item ( arm)
0 commit comments