@@ -22,7 +22,7 @@ use crate::ptr::P;
22
22
use crate :: sess:: ParseSess ;
23
23
use crate :: symbol:: { sym, Symbol } ;
24
24
use crate :: ThinVec ;
25
- use crate :: tokenstream:: { TokenStream , TokenTree , DelimSpan } ;
25
+ use crate :: tokenstream:: { DelimSpan , TokenStream , TokenTree , TreeAndJoint } ;
26
26
use crate :: GLOBALS ;
27
27
28
28
use log:: debug;
@@ -340,7 +340,10 @@ impl Attribute {
340
340
DUMMY_SP ,
341
341
) ;
342
342
f ( & Attribute {
343
- item : AttrItem { path : meta. path , tokens : meta. kind . tokens ( meta. span ) } ,
343
+ item : AttrItem {
344
+ path : meta. path ,
345
+ tokens : TokenStream :: new ( meta. kind . token_trees_and_joints ( meta. span ) ) ,
346
+ } ,
344
347
id : self . id ,
345
348
style : self . style ,
346
349
is_sugared_doc : true ,
@@ -400,12 +403,22 @@ pub fn mk_attr(style: AttrStyle, path: Path, tokens: TokenStream, span: Span) ->
400
403
401
404
/// Returns an inner attribute with the given value and span.
402
405
pub fn mk_attr_inner ( item : MetaItem ) -> Attribute {
403
- mk_attr ( AttrStyle :: Inner , item. path , item. kind . tokens ( item. span ) , item. span )
406
+ mk_attr (
407
+ AttrStyle :: Inner ,
408
+ item. path ,
409
+ TokenStream :: new ( item. kind . token_trees_and_joints ( item. span ) ) ,
410
+ item. span ,
411
+ )
404
412
}
405
413
406
414
/// Returns an outer attribute with the given value and span.
407
415
pub fn mk_attr_outer ( item : MetaItem ) -> Attribute {
408
- mk_attr ( AttrStyle :: Outer , item. path , item. kind . tokens ( item. span ) , item. span )
416
+ mk_attr (
417
+ AttrStyle :: Outer ,
418
+ item. path ,
419
+ TokenStream :: new ( item. kind . token_trees_and_joints ( item. span ) ) ,
420
+ item. span ,
421
+ )
409
422
}
410
423
411
424
pub fn mk_sugared_doc_attr ( text : Symbol , span : Span ) -> Attribute {
@@ -415,7 +428,7 @@ pub fn mk_sugared_doc_attr(text: Symbol, span: Span) -> Attribute {
415
428
Attribute {
416
429
item : AttrItem {
417
430
path : Path :: from_ident ( Ident :: with_dummy_span ( sym:: doc) . with_span_pos ( span) ) ,
418
- tokens : MetaItemKind :: NameValue ( lit) . tokens ( span) ,
431
+ tokens : TokenStream :: new ( MetaItemKind :: NameValue ( lit) . token_trees_and_joints ( span) ) ,
419
432
} ,
420
433
id : mk_attr_id ( ) ,
421
434
style,
@@ -476,7 +489,7 @@ pub fn first_attr_value_str_by_name(attrs: &[Attribute], name: Symbol) -> Option
476
489
}
477
490
478
491
impl MetaItem {
479
- fn tokens ( & self ) -> TokenStream {
492
+ fn token_trees_and_joints ( & self ) -> Vec < TreeAndJoint > {
480
493
let mut idents = vec ! [ ] ;
481
494
let mut last_pos = BytePos ( 0 as u32 ) ;
482
495
for ( i, segment) in self . path . segments . iter ( ) . enumerate ( ) {
@@ -490,8 +503,8 @@ impl MetaItem {
490
503
idents. push ( TokenTree :: Token ( Token :: from_ast_ident ( segment. ident ) ) . into ( ) ) ;
491
504
last_pos = segment. ident . span . hi ( ) ;
492
505
}
493
- self . kind . tokens ( self . span ) . append_to_tree_and_joint_vec ( & mut idents ) ;
494
- TokenStream :: new ( idents)
506
+ idents . extend ( self . kind . token_trees_and_joints ( self . span ) ) ;
507
+ idents
495
508
}
496
509
497
510
fn from_tokens < I > ( tokens : & mut iter:: Peekable < I > ) -> Option < MetaItem >
@@ -550,27 +563,30 @@ impl MetaItem {
550
563
}
551
564
552
565
impl MetaItemKind {
553
- pub fn tokens ( & self , span : Span ) -> TokenStream {
566
+ pub fn token_trees_and_joints ( & self , span : Span ) -> Vec < TreeAndJoint > {
554
567
match * self {
555
- MetaItemKind :: Word => TokenStream :: default ( ) ,
568
+ MetaItemKind :: Word => vec ! [ ] ,
556
569
MetaItemKind :: NameValue ( ref lit) => {
557
- let mut vec = vec ! [ TokenTree :: token( token:: Eq , span) . into( ) ] ;
558
- lit. tokens ( ) . append_to_tree_and_joint_vec ( & mut vec) ;
559
- TokenStream :: new ( vec)
570
+ vec ! [
571
+ TokenTree :: token( token:: Eq , span) . into( ) ,
572
+ lit. token_tree( ) . into( ) ,
573
+ ]
560
574
}
561
575
MetaItemKind :: List ( ref list) => {
562
576
let mut tokens = Vec :: new ( ) ;
563
577
for ( i, item) in list. iter ( ) . enumerate ( ) {
564
578
if i > 0 {
565
579
tokens. push ( TokenTree :: token ( token:: Comma , span) . into ( ) ) ;
566
580
}
567
- item . tokens ( ) . append_to_tree_and_joint_vec ( & mut tokens ) ;
581
+ tokens. extend ( item . token_trees_and_joints ( ) )
568
582
}
569
- TokenTree :: Delimited (
570
- DelimSpan :: from_single ( span) ,
571
- token:: Paren ,
572
- TokenStream :: new ( tokens) . into ( ) ,
573
- ) . into ( )
583
+ vec ! [
584
+ TokenTree :: Delimited (
585
+ DelimSpan :: from_single( span) ,
586
+ token:: Paren ,
587
+ TokenStream :: new( tokens) . into( ) ,
588
+ ) . into( )
589
+ ]
574
590
}
575
591
}
576
592
}
@@ -616,10 +632,10 @@ impl NestedMetaItem {
616
632
}
617
633
}
618
634
619
- fn tokens ( & self ) -> TokenStream {
635
+ fn token_trees_and_joints ( & self ) -> Vec < TreeAndJoint > {
620
636
match * self {
621
- NestedMetaItem :: MetaItem ( ref item) => item. tokens ( ) ,
622
- NestedMetaItem :: Literal ( ref lit) => lit. tokens ( ) ,
637
+ NestedMetaItem :: MetaItem ( ref item) => item. token_trees_and_joints ( ) ,
638
+ NestedMetaItem :: Literal ( ref lit) => vec ! [ lit. token_tree ( ) . into ( ) ] ,
623
639
}
624
640
}
625
641
0 commit comments