@@ -82,10 +82,6 @@ impl TokenTree {
8282 }
8383 }
8484
85- pub fn joint ( self ) -> TokenStream {
86- TokenStream :: new ( vec ! [ ( self , Joint ) ] )
87- }
88-
8985 pub fn token ( kind : TokenKind , span : Span ) -> TokenTree {
9086 TokenTree :: Token ( Token :: new ( kind, span) )
9187 }
@@ -125,22 +121,18 @@ where
125121/// instead of a representation of the abstract syntax tree.
126122/// Today's `TokenTree`s can still contain AST via `token::Interpolated` for back-compat.
127123#[ derive( Clone , Debug , Default , Encodable , Decodable ) ]
128- pub struct TokenStream ( pub Lrc < Vec < TreeAndJoint > > ) ;
129-
130- pub type TreeAndJoint = ( TokenTree , IsJoint ) ;
124+ pub struct TokenStream ( pub Lrc < Vec < TokenTree > > ) ;
131125
132126// `TokenStream` is used a lot. Make sure it doesn't unintentionally get bigger.
133127#[ cfg( target_arch = "x86_64" ) ]
134128rustc_data_structures:: static_assert_size!( TokenStream , 8 ) ;
135129
136- #[ derive( Clone , Copy , Debug , PartialEq , Encodable , Decodable ) ]
130+ #[ derive( Clone , Copy , Debug , PartialEq , Encodable , Decodable , HashStable_Generic ) ]
137131pub enum IsJoint {
138132 Joint ,
139133 NonJoint ,
140134}
141135
142- use IsJoint :: * ;
143-
144136impl TokenStream {
145137 /// Given a `TokenStream` with a `Stream` of only two arguments, return a new `TokenStream`
146138 /// separating the two arguments with a comma for diagnostic suggestions.
@@ -151,22 +143,22 @@ impl TokenStream {
151143 while let Some ( ( pos, ts) ) = iter. next ( ) {
152144 if let Some ( ( _, next) ) = iter. peek ( ) {
153145 let sp = match ( & ts, & next) {
154- ( _, ( TokenTree :: Token ( Token { kind : token:: Comma , .. } ) , _ ) ) => continue ,
146+ ( _, TokenTree :: Token ( Token { kind : token:: Comma , .. } ) ) => continue ,
155147 (
156- ( TokenTree :: Token ( token_left) , NonJoint ) ,
157- ( TokenTree :: Token ( token_right) , _ ) ,
148+ TokenTree :: Token ( token_left @ Token { is_joint : IsJoint :: NonJoint , .. } ) ,
149+ TokenTree :: Token ( token_right) ,
158150 ) if ( ( token_left. is_ident ( ) && !token_left. is_reserved_ident ( ) )
159151 || token_left. is_lit ( ) )
160152 && ( ( token_right. is_ident ( ) && !token_right. is_reserved_ident ( ) )
161153 || token_right. is_lit ( ) ) =>
162154 {
163155 token_left. span
164156 }
165- ( ( TokenTree :: Delimited ( sp, ..) , NonJoint ) , _) => sp. entire ( ) ,
157+ ( TokenTree :: Delimited ( sp, ..) , _) => sp. entire ( ) ,
166158 _ => continue ,
167159 } ;
168160 let sp = sp. shrink_to_hi ( ) ;
169- let comma = ( TokenTree :: token ( token:: Comma , sp) , NonJoint ) ;
161+ let comma = TokenTree :: token ( token:: Comma , sp) ;
170162 suggestion = Some ( ( pos, comma, sp) ) ;
171163 }
172164 }
@@ -184,19 +176,13 @@ impl TokenStream {
184176
185177impl From < TokenTree > for TokenStream {
186178 fn from ( tree : TokenTree ) -> TokenStream {
187- TokenStream :: new ( vec ! [ ( tree, NonJoint ) ] )
188- }
189- }
190-
191- impl From < TokenTree > for TreeAndJoint {
192- fn from ( tree : TokenTree ) -> TreeAndJoint {
193- ( tree, NonJoint )
179+ TokenStream :: new ( vec ! [ tree] )
194180 }
195181}
196182
197183impl iter:: FromIterator < TokenTree > for TokenStream {
198184 fn from_iter < I : IntoIterator < Item = TokenTree > > ( iter : I ) -> Self {
199- TokenStream :: new ( iter. into_iter ( ) . map ( Into :: into ) . collect :: < Vec < TreeAndJoint > > ( ) )
185+ TokenStream :: new ( iter. into_iter ( ) . collect ( ) )
200186 }
201187}
202188
@@ -209,7 +195,7 @@ impl PartialEq<TokenStream> for TokenStream {
209195}
210196
211197impl TokenStream {
212- pub fn new ( streams : Vec < TreeAndJoint > ) -> TokenStream {
198+ pub fn new ( streams : Vec < TokenTree > ) -> TokenStream {
213199 TokenStream ( Lrc :: new ( streams) )
214200 }
215201
@@ -224,8 +210,8 @@ impl TokenStream {
224210 pub fn span ( & self ) -> Option < Span > {
225211 match & * * self . 0 {
226212 [ ] => None ,
227- [ ( tt , _ ) ] => Some ( tt. span ( ) ) ,
228- [ ( tt_start, _ ) , .., ( tt_end, _ ) ] => Some ( tt_start. span ( ) . to ( tt_end. span ( ) ) ) ,
213+ [ tt ] => Some ( tt. span ( ) ) ,
214+ [ tt_start, .., tt_end] => Some ( tt_start. span ( ) . to ( tt_end. span ( ) ) ) ,
229215 }
230216 }
231217
@@ -290,18 +276,12 @@ impl TokenStream {
290276
291277 pub fn map_enumerated < F : FnMut ( usize , TokenTree ) -> TokenTree > ( self , mut f : F ) -> TokenStream {
292278 TokenStream ( Lrc :: new (
293- self . 0
294- . iter ( )
295- . enumerate ( )
296- . map ( |( i, ( tree, is_joint) ) | ( f ( i, tree. clone ( ) ) , * is_joint) )
297- . collect ( ) ,
279+ self . 0 . iter ( ) . enumerate ( ) . map ( |( i, tree) | f ( i, tree. clone ( ) ) ) . collect ( ) ,
298280 ) )
299281 }
300282
301283 pub fn map < F : FnMut ( TokenTree ) -> TokenTree > ( self , mut f : F ) -> TokenStream {
302- TokenStream ( Lrc :: new (
303- self . 0 . iter ( ) . map ( |( tree, is_joint) | ( f ( tree. clone ( ) ) , * is_joint) ) . collect ( ) ,
304- ) )
284+ TokenStream ( Lrc :: new ( self . 0 . iter ( ) . map ( |tree| f ( tree. clone ( ) ) ) . collect ( ) ) )
305285 }
306286}
307287
@@ -320,11 +300,11 @@ impl TokenStreamBuilder {
320300 // If `self` is not empty and the last tree within the last stream is a
321301 // token tree marked with `Joint`...
322302 if let Some ( TokenStream ( ref mut last_stream_lrc) ) = self . 0 . last_mut ( ) {
323- if let Some ( ( TokenTree :: Token ( last_token) , Joint ) ) = last_stream_lrc. last ( ) {
303+ if let Some ( TokenTree :: Token ( last_token) ) = last_stream_lrc. last ( ) {
324304 // ...and `stream` is not empty and the first tree within it is
325305 // a token tree...
326306 let TokenStream ( ref mut stream_lrc) = stream;
327- if let Some ( ( TokenTree :: Token ( token) , is_joint ) ) = stream_lrc. first ( ) {
307+ if let Some ( TokenTree :: Token ( token) ) = stream_lrc. first ( ) {
328308 // ...and the two tokens can be glued together...
329309 if let Some ( glued_tok) = last_token. glue ( & token) {
330310 // ...then do so, by overwriting the last token
@@ -337,8 +317,7 @@ impl TokenStreamBuilder {
337317 // Overwrite the last token tree with the merged
338318 // token.
339319 let last_vec_mut = Lrc :: make_mut ( last_stream_lrc) ;
340- * last_vec_mut. last_mut ( ) . unwrap ( ) =
341- ( TokenTree :: Token ( glued_tok) , * is_joint) ;
320+ * last_vec_mut. last_mut ( ) . unwrap ( ) = TokenTree :: Token ( glued_tok) ;
342321
343322 // Remove the first token tree from `stream`. (This
344323 // is almost always the only tree in `stream`.)
@@ -375,23 +354,19 @@ impl Iterator for Cursor {
375354 type Item = TokenTree ;
376355
377356 fn next ( & mut self ) -> Option < TokenTree > {
378- self . next_with_joint ( ) . map ( |( tree, _) | tree)
379- }
380- }
381-
382- impl Cursor {
383- fn new ( stream : TokenStream ) -> Self {
384- Cursor { stream, index : 0 }
385- }
386-
387- pub fn next_with_joint ( & mut self ) -> Option < TreeAndJoint > {
388357 if self . index < self . stream . len ( ) {
389358 self . index += 1 ;
390359 Some ( self . stream . 0 [ self . index - 1 ] . clone ( ) )
391360 } else {
392361 None
393362 }
394363 }
364+ }
365+
366+ impl Cursor {
367+ fn new ( stream : TokenStream ) -> Self {
368+ Cursor { stream, index : 0 }
369+ }
395370
396371 pub fn append ( & mut self , new_stream : TokenStream ) {
397372 if new_stream. is_empty ( ) {
@@ -404,7 +379,7 @@ impl Cursor {
404379 }
405380
406381 pub fn look_ahead ( & self , n : usize ) -> Option < TokenTree > {
407- self . stream . 0 [ self . index ..] . get ( n) . map ( | ( tree , _ ) | tree . clone ( ) )
382+ self . stream . 0 [ self . index ..] . get ( n) . cloned ( )
408383 }
409384}
410385
0 commit comments