@@ -17,7 +17,7 @@ use syntax::symbol::Symbol;
1717use syntax:: tokenstream:: { self , Delimited , TokenTree , TokenStream } ;
1818use syntax_pos:: DUMMY_SP ;
1919
20- use std:: rc :: Rc ;
20+ use std:: iter ;
2121
2222pub fn qquote < ' cx > ( stream : TokenStream ) -> TokenStream {
2323 stream. quote ( )
@@ -49,10 +49,7 @@ macro_rules! quote_tree {
4949}
5050
5151fn delimit ( delim : token:: DelimToken , stream : TokenStream ) -> TokenStream {
52- TokenTree :: Delimited ( DUMMY_SP , Rc :: new ( Delimited {
53- delim : delim,
54- tts : stream. trees ( ) . cloned ( ) . collect ( ) ,
55- } ) ) . into ( )
52+ TokenTree :: Delimited ( DUMMY_SP , Delimited { delim : delim, tts : stream. into ( ) } ) . into ( )
5653}
5754
5855macro_rules! quote {
@@ -75,9 +72,9 @@ impl Quote for TokenStream {
7572 return quote ! ( :: syntax:: tokenstream:: TokenStream :: empty( ) ) ;
7673 }
7774
78- struct Quote < ' a > ( tokenstream:: Cursor < ' a > ) ;
75+ struct Quote ( iter :: Peekable < tokenstream:: Cursor > ) ;
7976
80- impl < ' a > Iterator for Quote < ' a > {
77+ impl Iterator for Quote {
8178 type Item = TokenStream ;
8279
8380 fn next ( & mut self ) -> Option < TokenStream > {
@@ -89,25 +86,18 @@ impl Quote for TokenStream {
8986 _ => false ,
9087 } ;
9188
92- self . 0 . next ( ) . cloned ( ) . map ( |tree| {
89+ self . 0 . next ( ) . map ( |tree| {
9390 let quoted_tree = if is_unquote { tree. into ( ) } else { tree. quote ( ) } ;
9491 quote ! ( :: syntax:: tokenstream:: TokenStream :: from( ( unquote quoted_tree) ) , )
9592 } )
9693 }
9794 }
9895
99- let quoted = Quote ( self . trees ( ) ) . collect :: < TokenStream > ( ) ;
96+ let quoted = Quote ( self . trees ( ) . peekable ( ) ) . collect :: < TokenStream > ( ) ;
10097 quote ! ( [ ( unquote quoted) ] . iter( ) . cloned( ) . collect:: <:: syntax:: tokenstream:: TokenStream >( ) )
10198 }
10299}
103100
104- impl Quote for Vec < TokenTree > {
105- fn quote ( & self ) -> TokenStream {
106- let stream = self . iter ( ) . cloned ( ) . collect :: < TokenStream > ( ) ;
107- quote ! ( ( quote stream) . trees( ) . cloned( ) . collect:: <:: std:: vec:: Vec <_> >( ) )
108- }
109- }
110-
111101impl Quote for TokenTree {
112102 fn quote ( & self ) -> TokenStream {
113103 match * self {
@@ -123,12 +113,12 @@ impl Quote for TokenTree {
123113 }
124114}
125115
126- impl Quote for Rc < Delimited > {
116+ impl Quote for Delimited {
127117 fn quote ( & self ) -> TokenStream {
128- quote ! ( :: std :: rc :: Rc :: new ( :: syntax:: tokenstream:: Delimited {
118+ quote ! ( :: syntax:: tokenstream:: Delimited {
129119 delim: ( quote self . delim) ,
130- tts: ( quote self . tts ) ,
131- } ) )
120+ tts: ( quote self . stream ( ) ) . into ( ) ,
121+ } )
132122 }
133123}
134124
0 commit comments