@@ -82,10 +82,6 @@ impl TokenTree {
82
82
}
83
83
}
84
84
85
- pub fn joint ( self ) -> TokenStream {
86
- TokenStream :: new ( vec ! [ ( self , Joint ) ] )
87
- }
88
-
89
85
pub fn token ( kind : TokenKind , span : Span ) -> TokenTree {
90
86
TokenTree :: Token ( Token :: new ( kind, span) )
91
87
}
@@ -125,22 +121,18 @@ where
125
121
/// instead of a representation of the abstract syntax tree.
126
122
/// Today's `TokenTree`s can still contain AST via `token::Interpolated` for back-compat.
127
123
#[ 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 > > ) ;
131
125
132
126
// `TokenStream` is used a lot. Make sure it doesn't unintentionally get bigger.
133
127
#[ cfg( target_arch = "x86_64" ) ]
134
128
rustc_data_structures:: static_assert_size!( TokenStream , 8 ) ;
135
129
136
- #[ derive( Clone , Copy , Debug , PartialEq , Encodable , Decodable ) ]
130
+ #[ derive( Clone , Copy , Debug , PartialEq , Encodable , Decodable , HashStable_Generic ) ]
137
131
pub enum IsJoint {
138
132
Joint ,
139
133
NonJoint ,
140
134
}
141
135
142
- use IsJoint :: * ;
143
-
144
136
impl TokenStream {
145
137
/// Given a `TokenStream` with a `Stream` of only two arguments, return a new `TokenStream`
146
138
/// separating the two arguments with a comma for diagnostic suggestions.
@@ -151,22 +143,22 @@ impl TokenStream {
151
143
while let Some ( ( pos, ts) ) = iter. next ( ) {
152
144
if let Some ( ( _, next) ) = iter. peek ( ) {
153
145
let sp = match ( & ts, & next) {
154
- ( _, ( TokenTree :: Token ( Token { kind : token:: Comma , .. } ) , _ ) ) => continue ,
146
+ ( _, TokenTree :: Token ( Token { kind : token:: Comma , .. } ) ) => continue ,
155
147
(
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) ,
158
150
) if ( ( token_left. is_ident ( ) && !token_left. is_reserved_ident ( ) )
159
151
|| token_left. is_lit ( ) )
160
152
&& ( ( token_right. is_ident ( ) && !token_right. is_reserved_ident ( ) )
161
153
|| token_right. is_lit ( ) ) =>
162
154
{
163
155
token_left. span
164
156
}
165
- ( ( TokenTree :: Delimited ( sp, ..) , NonJoint ) , _) => sp. entire ( ) ,
157
+ ( TokenTree :: Delimited ( sp, ..) , _) => sp. entire ( ) ,
166
158
_ => continue ,
167
159
} ;
168
160
let sp = sp. shrink_to_hi ( ) ;
169
- let comma = ( TokenTree :: token ( token:: Comma , sp) , NonJoint ) ;
161
+ let comma = TokenTree :: token ( token:: Comma , sp) ;
170
162
suggestion = Some ( ( pos, comma, sp) ) ;
171
163
}
172
164
}
@@ -184,19 +176,13 @@ impl TokenStream {
184
176
185
177
impl From < TokenTree > for TokenStream {
186
178
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] )
194
180
}
195
181
}
196
182
197
183
impl iter:: FromIterator < TokenTree > for TokenStream {
198
184
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 ( ) )
200
186
}
201
187
}
202
188
@@ -209,7 +195,7 @@ impl PartialEq<TokenStream> for TokenStream {
209
195
}
210
196
211
197
impl TokenStream {
212
- pub fn new ( streams : Vec < TreeAndJoint > ) -> TokenStream {
198
+ pub fn new ( streams : Vec < TokenTree > ) -> TokenStream {
213
199
TokenStream ( Lrc :: new ( streams) )
214
200
}
215
201
@@ -224,8 +210,8 @@ impl TokenStream {
224
210
pub fn span ( & self ) -> Option < Span > {
225
211
match & * * self . 0 {
226
212
[ ] => 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 ( ) ) ) ,
229
215
}
230
216
}
231
217
@@ -290,18 +276,12 @@ impl TokenStream {
290
276
291
277
pub fn map_enumerated < F : FnMut ( usize , TokenTree ) -> TokenTree > ( self , mut f : F ) -> TokenStream {
292
278
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 ( ) ,
298
280
) )
299
281
}
300
282
301
283
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 ( ) ) )
305
285
}
306
286
}
307
287
@@ -320,11 +300,11 @@ impl TokenStreamBuilder {
320
300
// If `self` is not empty and the last tree within the last stream is a
321
301
// token tree marked with `Joint`...
322
302
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 ( ) {
324
304
// ...and `stream` is not empty and the first tree within it is
325
305
// a token tree...
326
306
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 ( ) {
328
308
// ...and the two tokens can be glued together...
329
309
if let Some ( glued_tok) = last_token. glue ( & token) {
330
310
// ...then do so, by overwriting the last token
@@ -337,8 +317,7 @@ impl TokenStreamBuilder {
337
317
// Overwrite the last token tree with the merged
338
318
// token.
339
319
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) ;
342
321
343
322
// Remove the first token tree from `stream`. (This
344
323
// is almost always the only tree in `stream`.)
@@ -375,23 +354,19 @@ impl Iterator for Cursor {
375
354
type Item = TokenTree ;
376
355
377
356
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 > {
388
357
if self . index < self . stream . len ( ) {
389
358
self . index += 1 ;
390
359
Some ( self . stream . 0 [ self . index - 1 ] . clone ( ) )
391
360
} else {
392
361
None
393
362
}
394
363
}
364
+ }
365
+
366
+ impl Cursor {
367
+ fn new ( stream : TokenStream ) -> Self {
368
+ Cursor { stream, index : 0 }
369
+ }
395
370
396
371
pub fn append ( & mut self , new_stream : TokenStream ) {
397
372
if new_stream. is_empty ( ) {
@@ -404,7 +379,7 @@ impl Cursor {
404
379
}
405
380
406
381
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 ( )
408
383
}
409
384
}
410
385
0 commit comments