@@ -113,7 +113,7 @@ impl TokenTree {
113113 }
114114
115115 pub fn joint ( self ) -> TokenStream {
116- TokenStream :: Tree ( self , Joint )
116+ TokenStream :: new ( vec ! [ ( self , Joint ) ] )
117117 }
118118
119119 /// Returns the opening delimiter as a token tree.
@@ -146,15 +146,14 @@ impl TokenTree {
146146#[ derive( Clone , Debug ) ]
147147pub enum TokenStream {
148148 Empty ,
149- Tree ( TokenTree , IsJoint ) ,
150149 Stream ( Lrc < Vec < TreeAndJoint > > ) ,
151150}
152151
153152pub type TreeAndJoint = ( TokenTree , IsJoint ) ;
154153
155154// `TokenStream` is used a lot. Make sure it doesn't unintentionally get bigger.
156155#[ cfg( target_arch = "x86_64" ) ]
157- static_assert ! ( MEM_SIZE_OF_TOKEN_STREAM : mem:: size_of:: <TokenStream >( ) == 32 ) ;
156+ static_assert ! ( MEM_SIZE_OF_TOKEN_STREAM : mem:: size_of:: <TokenStream >( ) == 8 ) ;
158157
159158#[ derive( Clone , Copy , Debug , PartialEq ) ]
160159pub enum IsJoint {
@@ -201,7 +200,7 @@ impl TokenStream {
201200
202201impl From < TokenTree > for TokenStream {
203202 fn from ( tree : TokenTree ) -> TokenStream {
204- TokenStream :: Tree ( tree, NonJoint )
203+ TokenStream :: new ( vec ! [ ( tree, NonJoint ) ] )
205204 }
206205}
207206
@@ -260,7 +259,6 @@ impl TokenStream {
260259 for stream in streams {
261260 match stream {
262261 TokenStream :: Empty => { } ,
263- TokenStream :: Tree ( tree, is_joint) => vec. push ( ( tree, is_joint) ) ,
264262 TokenStream :: Stream ( stream2) => vec. extend ( stream2. iter ( ) . cloned ( ) ) ,
265263 }
266264 }
@@ -269,21 +267,16 @@ impl TokenStream {
269267 }
270268 }
271269
272- pub fn new ( mut streams : Vec < TreeAndJoint > ) -> TokenStream {
270+ pub fn new ( streams : Vec < TreeAndJoint > ) -> TokenStream {
273271 match streams. len ( ) {
274272 0 => TokenStream :: empty ( ) ,
275- 1 => {
276- let ( tree, is_joint) = streams. pop ( ) . unwrap ( ) ;
277- TokenStream :: Tree ( tree, is_joint)
278- }
279273 _ => TokenStream :: Stream ( Lrc :: new ( streams) ) ,
280274 }
281275 }
282276
283277 pub fn append_to_tree_and_joint_vec ( self , vec : & mut Vec < TreeAndJoint > ) {
284278 match self {
285279 TokenStream :: Empty => { }
286- TokenStream :: Tree ( tree, is_joint) => vec. push ( ( tree, is_joint) ) ,
287280 TokenStream :: Stream ( stream) => vec. extend ( stream. iter ( ) . cloned ( ) ) ,
288281 }
289282 }
@@ -351,7 +344,6 @@ impl TokenStream {
351344 pub fn map_enumerated < F : FnMut ( usize , TokenTree ) -> TokenTree > ( self , mut f : F ) -> TokenStream {
352345 match self {
353346 TokenStream :: Empty => TokenStream :: Empty ,
354- TokenStream :: Tree ( tree, is_joint) => TokenStream :: Tree ( f ( 0 , tree) , is_joint) ,
355347 TokenStream :: Stream ( stream) => TokenStream :: Stream ( Lrc :: new (
356348 stream
357349 . iter ( )
@@ -365,7 +357,6 @@ impl TokenStream {
365357 pub fn map < F : FnMut ( TokenTree ) -> TokenTree > ( self , mut f : F ) -> TokenStream {
366358 match self {
367359 TokenStream :: Empty => TokenStream :: Empty ,
368- TokenStream :: Tree ( tree, is_joint) => TokenStream :: Tree ( f ( tree) , is_joint) ,
369360 TokenStream :: Stream ( stream) => TokenStream :: Stream ( Lrc :: new (
370361 stream
371362 . iter ( )
@@ -378,21 +369,13 @@ impl TokenStream {
378369 fn first_tree_and_joint ( & self ) -> Option < ( TokenTree , IsJoint ) > {
379370 match self {
380371 TokenStream :: Empty => None ,
381- TokenStream :: Tree ( ref tree, is_joint) => Some ( ( tree. clone ( ) , * is_joint) ) ,
382372 TokenStream :: Stream ( ref stream) => Some ( stream. first ( ) . unwrap ( ) . clone ( ) )
383373 }
384374 }
385375
386376 fn last_tree_if_joint ( & self ) -> Option < TokenTree > {
387377 match self {
388378 TokenStream :: Empty => None ,
389- TokenStream :: Tree ( ref tree, is_joint) => {
390- if * is_joint == Joint {
391- Some ( tree. clone ( ) )
392- } else {
393- None
394- }
395- }
396379 TokenStream :: Stream ( ref stream) => {
397380 if let ( tree, Joint ) = stream. last ( ) . unwrap ( ) {
398381 Some ( tree. clone ( ) )
@@ -422,7 +405,7 @@ impl TokenStreamBuilder {
422405 self . push_all_but_last_tree ( & last_stream) ;
423406 let glued_span = last_span. to ( span) ;
424407 let glued_tt = TokenTree :: Token ( glued_span, glued_tok) ;
425- let glued_tokenstream = TokenStream :: Tree ( glued_tt, is_joint) ;
408+ let glued_tokenstream = TokenStream :: new ( vec ! [ ( glued_tt, is_joint) ] ) ;
426409 self . 0 . push ( glued_tokenstream) ;
427410 self . push_all_but_first_tree ( & stream) ;
428411 return
@@ -441,7 +424,6 @@ impl TokenStreamBuilder {
441424 let len = streams. len ( ) ;
442425 match len {
443426 1 => { }
444- 2 => self . 0 . push ( TokenStream :: Tree ( streams[ 0 ] . 0 . clone ( ) , streams[ 0 ] . 1 ) ) ,
445427 _ => self . 0 . push ( TokenStream :: Stream ( Lrc :: new ( streams[ 0 .. len - 1 ] . to_vec ( ) ) ) ) ,
446428 }
447429 }
@@ -452,7 +434,6 @@ impl TokenStreamBuilder {
452434 let len = streams. len ( ) ;
453435 match len {
454436 1 => { }
455- 2 => self . 0 . push ( TokenStream :: Tree ( streams[ 1 ] . 0 . clone ( ) , streams[ 1 ] . 1 ) ) ,
456437 _ => self . 0 . push ( TokenStream :: Stream ( Lrc :: new ( streams[ 1 .. len] . to_vec ( ) ) ) ) ,
457438 }
458439 }
@@ -481,14 +462,6 @@ impl Cursor {
481462 pub fn next_with_joint ( & mut self ) -> Option < TreeAndJoint > {
482463 match self . stream {
483464 TokenStream :: Empty => None ,
484- TokenStream :: Tree ( ref tree, ref is_joint) => {
485- if self . index == 0 {
486- self . index = 1 ;
487- Some ( ( tree. clone ( ) , * is_joint) )
488- } else {
489- None
490- }
491- }
492465 TokenStream :: Stream ( ref stream) => {
493466 if self . index < stream. len ( ) {
494467 self . index += 1 ;
@@ -513,13 +486,6 @@ impl Cursor {
513486 pub fn look_ahead ( & self , n : usize ) -> Option < TokenTree > {
514487 match self . stream {
515488 TokenStream :: Empty => None ,
516- TokenStream :: Tree ( ref tree, _) => {
517- if n == 0 && self . index == 0 {
518- Some ( tree. clone ( ) )
519- } else {
520- None
521- }
522- }
523489 TokenStream :: Stream ( ref stream) =>
524490 stream[ self . index ..] . get ( n) . map ( |( tree, _) | tree. clone ( ) ) ,
525491 }
@@ -542,7 +508,6 @@ impl From<TokenStream> for ThinTokenStream {
542508 fn from ( stream : TokenStream ) -> ThinTokenStream {
543509 ThinTokenStream ( match stream {
544510 TokenStream :: Empty => None ,
545- TokenStream :: Tree ( tree, is_joint) => Some ( Lrc :: new ( vec ! [ ( tree, is_joint) ] ) ) ,
546511 TokenStream :: Stream ( stream) => Some ( stream) ,
547512 } )
548513 }
0 commit comments