@@ -184,6 +184,7 @@ pub mod token_stream {
184
184
let ( subtree, _token_map) =
185
185
mbe:: parse_to_token_tree ( src) . ok_or ( "Failed to parse from mbe" ) ?;
186
186
187
+ let subtree = subtree_replace_token_ids_with_unspecified ( subtree) ;
187
188
Ok ( TokenStream { subtree } )
188
189
}
189
190
}
@@ -226,6 +227,44 @@ pub mod token_stream {
226
227
}
227
228
}
228
229
}
230
+
231
+ fn subtree_replace_token_ids_with_unspecified ( subtree : tt:: Subtree ) -> tt:: Subtree {
232
+ tt:: Subtree {
233
+ delimiter : subtree
234
+ . delimiter
235
+ . map ( |d| tt:: Delimiter { id : tt:: TokenId :: unspecified ( ) , ..d } ) ,
236
+ token_trees : subtree
237
+ . token_trees
238
+ . into_iter ( )
239
+ . map ( |t| token_tree_replace_token_ids_with_unspecified ( t) )
240
+ . collect ( ) ,
241
+ }
242
+ }
243
+
244
+ fn token_tree_replace_token_ids_with_unspecified ( tt : tt:: TokenTree ) -> tt:: TokenTree {
245
+ match tt {
246
+ tt:: TokenTree :: Leaf ( leaf) => {
247
+ tt:: TokenTree :: Leaf ( leaf_replace_token_ids_with_unspecified ( leaf) )
248
+ }
249
+ tt:: TokenTree :: Subtree ( subtree) => {
250
+ tt:: TokenTree :: Subtree ( subtree_replace_token_ids_with_unspecified ( subtree) )
251
+ }
252
+ }
253
+ }
254
+
255
+ fn leaf_replace_token_ids_with_unspecified ( leaf : tt:: Leaf ) -> tt:: Leaf {
256
+ match leaf {
257
+ tt:: Leaf :: Literal ( lit) => {
258
+ tt:: Leaf :: Literal ( tt:: Literal { id : tt:: TokenId :: unspecified ( ) , ..lit } )
259
+ }
260
+ tt:: Leaf :: Punct ( punct) => {
261
+ tt:: Leaf :: Punct ( tt:: Punct { id : tt:: TokenId :: unspecified ( ) , ..punct } )
262
+ }
263
+ tt:: Leaf :: Ident ( ident) => {
264
+ tt:: Leaf :: Ident ( tt:: Ident { id : tt:: TokenId :: unspecified ( ) , ..ident } )
265
+ }
266
+ }
267
+ }
229
268
}
230
269
231
270
impl TokenStreamBuilder {
@@ -277,42 +316,6 @@ impl server::FreeFunctions for Rustc {
277
316
}
278
317
}
279
318
280
- fn subtree_replace_token_ids_with_unspecified ( subtree : tt:: Subtree ) -> tt:: Subtree {
281
- tt:: Subtree {
282
- delimiter : subtree. delimiter . map ( |d| tt:: Delimiter { id : tt:: TokenId :: unspecified ( ) , ..d } ) ,
283
- token_trees : subtree
284
- . token_trees
285
- . into_iter ( )
286
- . map ( |t| token_tree_replace_token_ids_with_unspecified ( t) )
287
- . collect ( ) ,
288
- }
289
- }
290
-
291
- fn token_tree_replace_token_ids_with_unspecified ( tt : tt:: TokenTree ) -> tt:: TokenTree {
292
- match tt {
293
- tt:: TokenTree :: Leaf ( leaf) => {
294
- tt:: TokenTree :: Leaf ( leaf_replace_token_ids_with_unspecified ( leaf) )
295
- }
296
- tt:: TokenTree :: Subtree ( subtree) => {
297
- tt:: TokenTree :: Subtree ( subtree_replace_token_ids_with_unspecified ( subtree) )
298
- }
299
- }
300
- }
301
-
302
- fn leaf_replace_token_ids_with_unspecified ( leaf : tt:: Leaf ) -> tt:: Leaf {
303
- match leaf {
304
- tt:: Leaf :: Literal ( lit) => {
305
- tt:: Leaf :: Literal ( tt:: Literal { id : tt:: TokenId :: unspecified ( ) , ..lit } )
306
- }
307
- tt:: Leaf :: Punct ( punct) => {
308
- tt:: Leaf :: Punct ( tt:: Punct { id : tt:: TokenId :: unspecified ( ) , ..punct } )
309
- }
310
- tt:: Leaf :: Ident ( ident) => {
311
- tt:: Leaf :: Ident ( tt:: Ident { id : tt:: TokenId :: unspecified ( ) , ..ident } )
312
- }
313
- }
314
- }
315
-
316
319
impl server:: TokenStream for Rustc {
317
320
fn new ( & mut self ) -> Self :: TokenStream {
318
321
Self :: TokenStream :: new ( )
@@ -322,8 +325,9 @@ impl server::TokenStream for Rustc {
322
325
stream. is_empty ( )
323
326
}
324
327
fn from_str ( & mut self , src : & str ) -> Self :: TokenStream {
325
- let ( subtree, _) = mbe:: parse_to_token_tree ( src) . expect ( "cannot parse string" ) ;
326
- TokenStream :: with_subtree ( subtree_replace_token_ids_with_unspecified ( subtree) )
328
+ use std:: str:: FromStr ;
329
+
330
+ Self :: TokenStream :: from_str ( src) . expect ( "cannot parse string" )
327
331
}
328
332
fn to_string ( & mut self , stream : & Self :: TokenStream ) -> String {
329
333
stream. to_string ( )
0 commit comments