@@ -261,25 +261,28 @@ impl TokenCursor {
261
261
/// This always-inlined version should only be used on hot code paths.
262
262
#[ inline( always) ]
263
263
fn inlined_next ( & mut self , desugar_doc_comments : bool ) -> ( Token , Spacing ) {
264
- let ( token , spacing ) = loop {
264
+ loop {
265
265
if !self . frame . open_delim {
266
266
self . frame . open_delim = true ;
267
267
return (
268
268
Token :: new ( token:: OpenDelim ( self . frame . delim ) , self . frame . span . open ) ,
269
269
Spacing :: Alone ,
270
270
) ;
271
271
} else if let Some ( ( tree, spacing) ) = self . frame . tree_cursor . next_with_spacing ( ) {
272
- match tree {
273
- TokenTree :: Token ( token) => {
274
- break ( token, spacing) ;
275
- }
272
+ return match tree {
273
+ TokenTree :: Token ( token) => match ( desugar_doc_comments, & token) {
274
+ ( true , & Token { kind : token:: DocComment ( _, attr_style, data) , span } ) => {
275
+ self . desugar ( attr_style, data, span)
276
+ }
277
+ _ => ( token, spacing) ,
278
+ } ,
276
279
TokenTree :: Delimited ( sp, delim, tts) => {
277
280
// Set `open_delim` to true here because we deal with it immediately.
278
281
let frame = TokenCursorFrame :: new ( sp, delim, true , tts, false ) ;
279
282
self . stack . push ( mem:: replace ( & mut self . frame , frame) ) ;
280
- return ( Token :: new ( token:: OpenDelim ( delim) , sp. open ) , Spacing :: Alone ) ;
283
+ ( Token :: new ( token:: OpenDelim ( delim) , sp. open ) , Spacing :: Alone )
281
284
}
282
- }
285
+ } ;
283
286
} else if !self . frame . close_delim {
284
287
self . frame . close_delim = true ;
285
288
return (
@@ -291,69 +294,59 @@ impl TokenCursor {
291
294
} else {
292
295
return ( Token :: new ( token:: Eof , DUMMY_SP ) , Spacing :: Alone ) ;
293
296
}
294
- } ;
297
+ }
298
+ }
295
299
296
- match ( desugar_doc_comments, & token) {
297
- ( true , & Token { kind : token:: DocComment ( _, attr_style, data) , span } ) => {
298
- // Searches for the occurrences of `"#*` and returns the minimum number of `#`s
299
- // required to wrap the text.
300
- let mut num_of_hashes = 0 ;
301
- let mut count = 0 ;
302
- for ch in data. as_str ( ) . chars ( ) {
303
- count = match ch {
304
- '"' => 1 ,
305
- '#' if count > 0 => count + 1 ,
306
- _ => 0 ,
307
- } ;
308
- num_of_hashes = cmp:: max ( num_of_hashes, count) ;
309
- }
300
+ fn desugar ( & mut self , attr_style : AttrStyle , data : Symbol , span : Span ) -> ( Token , Spacing ) {
301
+ // Searches for the occurrences of `"#*` and returns the minimum number of `#`s
302
+ // required to wrap the text.
303
+ let mut num_of_hashes = 0 ;
304
+ let mut count = 0 ;
305
+ for ch in data. as_str ( ) . chars ( ) {
306
+ count = match ch {
307
+ '"' => 1 ,
308
+ '#' if count > 0 => count + 1 ,
309
+ _ => 0 ,
310
+ } ;
311
+ num_of_hashes = cmp:: max ( num_of_hashes, count) ;
312
+ }
310
313
311
- let delim_span = DelimSpan :: from_single ( span) ;
312
- let body = TokenTree :: Delimited (
313
- delim_span,
314
- token:: Bracket ,
315
- [
316
- TokenTree :: token ( token:: Ident ( sym:: doc, false ) , span) ,
317
- TokenTree :: token ( token:: Eq , span) ,
318
- TokenTree :: token (
319
- TokenKind :: lit ( token:: StrRaw ( num_of_hashes) , data, None ) ,
320
- span,
321
- ) ,
322
- ]
323
- . iter ( )
324
- . cloned ( )
325
- . collect :: < TokenStream > ( ) ,
326
- ) ;
314
+ let delim_span = DelimSpan :: from_single ( span) ;
315
+ let body = TokenTree :: Delimited (
316
+ delim_span,
317
+ token:: Bracket ,
318
+ [
319
+ TokenTree :: token ( token:: Ident ( sym:: doc, false ) , span) ,
320
+ TokenTree :: token ( token:: Eq , span) ,
321
+ TokenTree :: token ( TokenKind :: lit ( token:: StrRaw ( num_of_hashes) , data, None ) , span) ,
322
+ ]
323
+ . iter ( )
324
+ . cloned ( )
325
+ . collect :: < TokenStream > ( ) ,
326
+ ) ;
327
327
328
- self . stack . push ( mem:: replace (
329
- & mut self . frame ,
330
- TokenCursorFrame :: new (
331
- delim_span,
332
- token:: NoDelim ,
333
- false ,
334
- if attr_style == AttrStyle :: Inner {
335
- [
336
- TokenTree :: token ( token:: Pound , span) ,
337
- TokenTree :: token ( token:: Not , span) ,
338
- body,
339
- ]
340
- . iter ( )
341
- . cloned ( )
342
- . collect :: < TokenStream > ( )
343
- } else {
344
- [ TokenTree :: token ( token:: Pound , span) , body]
345
- . iter ( )
346
- . cloned ( )
347
- . collect :: < TokenStream > ( )
348
- } ,
349
- false ,
350
- ) ,
351
- ) ) ;
352
-
353
- self . next ( /* desugar_doc_comments */ false )
354
- }
355
- _ => ( token, spacing) ,
356
- }
328
+ self . stack . push ( mem:: replace (
329
+ & mut self . frame ,
330
+ TokenCursorFrame :: new (
331
+ delim_span,
332
+ token:: NoDelim ,
333
+ false ,
334
+ if attr_style == AttrStyle :: Inner {
335
+ [ TokenTree :: token ( token:: Pound , span) , TokenTree :: token ( token:: Not , span) , body]
336
+ . iter ( )
337
+ . cloned ( )
338
+ . collect :: < TokenStream > ( )
339
+ } else {
340
+ [ TokenTree :: token ( token:: Pound , span) , body]
341
+ . iter ( )
342
+ . cloned ( )
343
+ . collect :: < TokenStream > ( )
344
+ } ,
345
+ false ,
346
+ ) ,
347
+ ) ) ;
348
+
349
+ self . next ( /* desugar_doc_comments */ false )
357
350
}
358
351
}
359
352
0 commit comments