1
1
//! Functions dealing with attributes and meta items.
2
2
3
3
use std:: fmt:: Debug ;
4
- use std:: iter;
5
4
use std:: sync:: atomic:: { AtomicU32 , Ordering } ;
6
5
7
6
use rustc_index:: bit_set:: GrowableBitSet ;
@@ -17,7 +16,9 @@ use crate::ast::{
17
16
} ;
18
17
use crate :: ptr:: P ;
19
18
use crate :: token:: { self , CommentKind , Delimiter , Token } ;
20
- use crate :: tokenstream:: { DelimSpan , LazyAttrTokenStream , Spacing , TokenStream , TokenTree } ;
19
+ use crate :: tokenstream:: {
20
+ DelimSpan , LazyAttrTokenStream , Spacing , TokenStream , TokenStreamIter , TokenTree ,
21
+ } ;
21
22
use crate :: util:: comments;
22
23
use crate :: util:: literal:: escape_string_symbol;
23
24
@@ -366,10 +367,7 @@ impl MetaItem {
366
367
}
367
368
}
368
369
369
- fn from_tokens < ' a , I > ( iter : & mut iter:: Peekable < I > ) -> Option < MetaItem >
370
- where
371
- I : Iterator < Item = & ' a TokenTree > ,
372
- {
370
+ fn from_tokens ( iter : & mut TokenStreamIter < ' _ > ) -> Option < MetaItem > {
373
371
// FIXME: Share code with `parse_path`.
374
372
let tt = iter. next ( ) . map ( |tt| TokenTree :: uninterpolate ( tt) ) ;
375
373
let path = match tt. as_deref ( ) {
@@ -439,7 +437,7 @@ impl MetaItem {
439
437
impl MetaItemKind {
440
438
// public because it can be called in the hir
441
439
pub fn list_from_tokens ( tokens : TokenStream ) -> Option < ThinVec < MetaItemInner > > {
442
- let mut iter = tokens. iter ( ) . peekable ( ) ;
440
+ let mut iter = tokens. iter ( ) ;
443
441
let mut result = ThinVec :: new ( ) ;
444
442
while iter. peek ( ) . is_some ( ) {
445
443
let item = MetaItemInner :: from_tokens ( & mut iter) ?;
@@ -452,9 +450,7 @@ impl MetaItemKind {
452
450
Some ( result)
453
451
}
454
452
455
- fn name_value_from_tokens < ' a > (
456
- iter : & mut impl Iterator < Item = & ' a TokenTree > ,
457
- ) -> Option < MetaItemKind > {
453
+ fn name_value_from_tokens ( iter : & mut TokenStreamIter < ' _ > ) -> Option < MetaItemKind > {
458
454
match iter. next ( ) {
459
455
Some ( TokenTree :: Delimited ( .., Delimiter :: Invisible ( _) , inner_tokens) ) => {
460
456
MetaItemKind :: name_value_from_tokens ( & mut inner_tokens. iter ( ) )
@@ -466,9 +462,7 @@ impl MetaItemKind {
466
462
}
467
463
}
468
464
469
- fn from_tokens < ' a > (
470
- iter : & mut iter:: Peekable < impl Iterator < Item = & ' a TokenTree > > ,
471
- ) -> Option < MetaItemKind > {
465
+ fn from_tokens ( iter : & mut TokenStreamIter < ' _ > ) -> Option < MetaItemKind > {
472
466
match iter. peek ( ) {
473
467
Some ( TokenTree :: Delimited ( .., Delimiter :: Parenthesis , inner_tokens) ) => {
474
468
let inner_tokens = inner_tokens. clone ( ) ;
@@ -594,18 +588,15 @@ impl MetaItemInner {
594
588
self . meta_item ( ) . is_some ( )
595
589
}
596
590
597
- fn from_tokens < ' a , I > ( iter : & mut iter:: Peekable < I > ) -> Option < MetaItemInner >
598
- where
599
- I : Iterator < Item = & ' a TokenTree > ,
600
- {
591
+ fn from_tokens ( iter : & mut TokenStreamIter < ' _ > ) -> Option < MetaItemInner > {
601
592
match iter. peek ( ) {
602
593
Some ( TokenTree :: Token ( token, _) ) if let Some ( lit) = MetaItemLit :: from_token ( token) => {
603
594
iter. next ( ) ;
604
595
return Some ( MetaItemInner :: Lit ( lit) ) ;
605
596
}
606
597
Some ( TokenTree :: Delimited ( .., Delimiter :: Invisible ( _) , inner_tokens) ) => {
607
598
iter. next ( ) ;
608
- return MetaItemInner :: from_tokens ( & mut inner_tokens. iter ( ) . peekable ( ) ) ;
599
+ return MetaItemInner :: from_tokens ( & mut inner_tokens. iter ( ) ) ;
609
600
}
610
601
_ => { }
611
602
}
0 commit comments