@@ -113,7 +113,7 @@ impl TokenTree {
113
113
}
114
114
115
115
pub fn joint ( self ) -> TokenStream {
116
- TokenStream :: Tree ( self , Joint )
116
+ TokenStream :: new ( vec ! [ ( self , Joint ) ] )
117
117
}
118
118
119
119
/// Returns the opening delimiter as a token tree.
@@ -146,15 +146,14 @@ impl TokenTree {
146
146
#[ derive( Clone , Debug ) ]
147
147
pub enum TokenStream {
148
148
Empty ,
149
- Tree ( TokenTree , IsJoint ) ,
150
149
Stream ( Lrc < Vec < TreeAndJoint > > ) ,
151
150
}
152
151
153
152
pub type TreeAndJoint = ( TokenTree , IsJoint ) ;
154
153
155
154
// `TokenStream` is used a lot. Make sure it doesn't unintentionally get bigger.
156
155
#[ 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 ) ;
158
157
159
158
#[ derive( Clone , Copy , Debug , PartialEq ) ]
160
159
pub enum IsJoint {
@@ -201,7 +200,7 @@ impl TokenStream {
201
200
202
201
impl From < TokenTree > for TokenStream {
203
202
fn from ( tree : TokenTree ) -> TokenStream {
204
- TokenStream :: Tree ( tree, NonJoint )
203
+ TokenStream :: new ( vec ! [ ( tree, NonJoint ) ] )
205
204
}
206
205
}
207
206
@@ -260,7 +259,6 @@ impl TokenStream {
260
259
for stream in streams {
261
260
match stream {
262
261
TokenStream :: Empty => { } ,
263
- TokenStream :: Tree ( tree, is_joint) => vec. push ( ( tree, is_joint) ) ,
264
262
TokenStream :: Stream ( stream2) => vec. extend ( stream2. iter ( ) . cloned ( ) ) ,
265
263
}
266
264
}
@@ -269,21 +267,16 @@ impl TokenStream {
269
267
}
270
268
}
271
269
272
- pub fn new ( mut streams : Vec < TreeAndJoint > ) -> TokenStream {
270
+ pub fn new ( streams : Vec < TreeAndJoint > ) -> TokenStream {
273
271
match streams. len ( ) {
274
272
0 => TokenStream :: empty ( ) ,
275
- 1 => {
276
- let ( tree, is_joint) = streams. pop ( ) . unwrap ( ) ;
277
- TokenStream :: Tree ( tree, is_joint)
278
- }
279
273
_ => TokenStream :: Stream ( Lrc :: new ( streams) ) ,
280
274
}
281
275
}
282
276
283
277
pub fn append_to_tree_and_joint_vec ( self , vec : & mut Vec < TreeAndJoint > ) {
284
278
match self {
285
279
TokenStream :: Empty => { }
286
- TokenStream :: Tree ( tree, is_joint) => vec. push ( ( tree, is_joint) ) ,
287
280
TokenStream :: Stream ( stream) => vec. extend ( stream. iter ( ) . cloned ( ) ) ,
288
281
}
289
282
}
@@ -351,7 +344,6 @@ impl TokenStream {
351
344
pub fn map_enumerated < F : FnMut ( usize , TokenTree ) -> TokenTree > ( self , mut f : F ) -> TokenStream {
352
345
match self {
353
346
TokenStream :: Empty => TokenStream :: Empty ,
354
- TokenStream :: Tree ( tree, is_joint) => TokenStream :: Tree ( f ( 0 , tree) , is_joint) ,
355
347
TokenStream :: Stream ( stream) => TokenStream :: Stream ( Lrc :: new (
356
348
stream
357
349
. iter ( )
@@ -365,7 +357,6 @@ impl TokenStream {
365
357
pub fn map < F : FnMut ( TokenTree ) -> TokenTree > ( self , mut f : F ) -> TokenStream {
366
358
match self {
367
359
TokenStream :: Empty => TokenStream :: Empty ,
368
- TokenStream :: Tree ( tree, is_joint) => TokenStream :: Tree ( f ( tree) , is_joint) ,
369
360
TokenStream :: Stream ( stream) => TokenStream :: Stream ( Lrc :: new (
370
361
stream
371
362
. iter ( )
@@ -378,21 +369,13 @@ impl TokenStream {
378
369
fn first_tree_and_joint ( & self ) -> Option < ( TokenTree , IsJoint ) > {
379
370
match self {
380
371
TokenStream :: Empty => None ,
381
- TokenStream :: Tree ( ref tree, is_joint) => Some ( ( tree. clone ( ) , * is_joint) ) ,
382
372
TokenStream :: Stream ( ref stream) => Some ( stream. first ( ) . unwrap ( ) . clone ( ) )
383
373
}
384
374
}
385
375
386
376
fn last_tree_if_joint ( & self ) -> Option < TokenTree > {
387
377
match self {
388
378
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
- }
396
379
TokenStream :: Stream ( ref stream) => {
397
380
if let ( tree, Joint ) = stream. last ( ) . unwrap ( ) {
398
381
Some ( tree. clone ( ) )
@@ -422,7 +405,7 @@ impl TokenStreamBuilder {
422
405
self . push_all_but_last_tree ( & last_stream) ;
423
406
let glued_span = last_span. to ( span) ;
424
407
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) ] ) ;
426
409
self . 0 . push ( glued_tokenstream) ;
427
410
self . push_all_but_first_tree ( & stream) ;
428
411
return
@@ -441,7 +424,6 @@ impl TokenStreamBuilder {
441
424
let len = streams. len ( ) ;
442
425
match len {
443
426
1 => { }
444
- 2 => self . 0 . push ( TokenStream :: Tree ( streams[ 0 ] . 0 . clone ( ) , streams[ 0 ] . 1 ) ) ,
445
427
_ => self . 0 . push ( TokenStream :: Stream ( Lrc :: new ( streams[ 0 .. len - 1 ] . to_vec ( ) ) ) ) ,
446
428
}
447
429
}
@@ -452,7 +434,6 @@ impl TokenStreamBuilder {
452
434
let len = streams. len ( ) ;
453
435
match len {
454
436
1 => { }
455
- 2 => self . 0 . push ( TokenStream :: Tree ( streams[ 1 ] . 0 . clone ( ) , streams[ 1 ] . 1 ) ) ,
456
437
_ => self . 0 . push ( TokenStream :: Stream ( Lrc :: new ( streams[ 1 .. len] . to_vec ( ) ) ) ) ,
457
438
}
458
439
}
@@ -481,14 +462,6 @@ impl Cursor {
481
462
pub fn next_with_joint ( & mut self ) -> Option < TreeAndJoint > {
482
463
match self . stream {
483
464
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
- }
492
465
TokenStream :: Stream ( ref stream) => {
493
466
if self . index < stream. len ( ) {
494
467
self . index += 1 ;
@@ -513,13 +486,6 @@ impl Cursor {
513
486
pub fn look_ahead ( & self , n : usize ) -> Option < TokenTree > {
514
487
match self . stream {
515
488
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
- }
523
489
TokenStream :: Stream ( ref stream) =>
524
490
stream[ self . index ..] . get ( n) . map ( |( tree, _) | tree. clone ( ) ) ,
525
491
}
@@ -542,7 +508,6 @@ impl From<TokenStream> for ThinTokenStream {
542
508
fn from ( stream : TokenStream ) -> ThinTokenStream {
543
509
ThinTokenStream ( match stream {
544
510
TokenStream :: Empty => None ,
545
- TokenStream :: Tree ( tree, is_joint) => Some ( Lrc :: new ( vec ! [ ( tree, is_joint) ] ) ) ,
546
511
TokenStream :: Stream ( stream) => Some ( stream) ,
547
512
} )
548
513
}
0 commit comments