@@ -22,7 +22,7 @@ pub use self::ReprAttr::*;
2222pub use self :: StabilityLevel :: * ;
2323
2424use ast;
25- use ast:: { AttrId , Attribute , AttrStyle , Name , Ident , Path , PathSegment } ;
25+ use ast:: { AttrId , Attribute , AttrStyle , Name , Ident , MetaPath } ;
2626use ast:: { MetaItem , MetaItemKind , NestedMetaItem , NestedMetaItemKind } ;
2727use ast:: { Lit , LitKind , Expr , ExprKind , Item , Local , Stmt , StmtKind , GenericParam } ;
2828use source_map:: { BytePos , Spanned , respan, dummy_spanned} ;
@@ -166,8 +166,8 @@ impl NestedMetaItem {
166166 }
167167}
168168
169- fn name_from_path ( path : & Path ) -> Name {
170- path. segments . last ( ) . expect ( "empty path in attribute" ) . ident . name
169+ fn name_from_path ( path : & MetaPath ) -> Name {
170+ path. segments . last ( ) . expect ( "empty path in attribute" ) . name
171171}
172172
173173impl Attribute {
@@ -270,7 +270,7 @@ impl MetaItem {
270270
271271 pub fn is_scoped ( & self ) -> Option < Ident > {
272272 if self . path . segments . len ( ) > 1 {
273- Some ( self . path . segments [ 0 ] . ident )
273+ Some ( self . path . segments [ 0 ] )
274274 } else {
275275 None
276276 }
@@ -366,15 +366,15 @@ pub fn mk_name_value_item_str(ident: Ident, value: Spanned<Symbol>) -> MetaItem
366366}
367367
368368pub fn mk_name_value_item ( span : Span , ident : Ident , value : ast:: Lit ) -> MetaItem {
369- MetaItem { path : Path :: from_ident ( ident) , span, node : MetaItemKind :: NameValue ( value) }
369+ MetaItem { path : MetaPath :: from_ident ( ident) , span, node : MetaItemKind :: NameValue ( value) }
370370}
371371
372372pub fn mk_list_item ( span : Span , ident : Ident , items : Vec < NestedMetaItem > ) -> MetaItem {
373- MetaItem { path : Path :: from_ident ( ident) , span, node : MetaItemKind :: List ( items) }
373+ MetaItem { path : MetaPath :: from_ident ( ident) , span, node : MetaItemKind :: List ( items) }
374374}
375375
376376pub fn mk_word_item ( ident : Ident ) -> MetaItem {
377- MetaItem { path : Path :: from_ident ( ident) , span : ident. span , node : MetaItemKind :: Word }
377+ MetaItem { path : MetaPath :: from_ident ( ident) , span : ident. span , node : MetaItemKind :: Word }
378378}
379379
380380pub fn mk_nested_word_item ( ident : Ident ) -> NestedMetaItem {
@@ -432,7 +432,7 @@ pub fn mk_sugared_doc_attr(id: AttrId, text: Symbol, span: Span) -> Attribute {
432432 Attribute {
433433 id,
434434 style,
435- path : Path :: from_ident ( Ident :: from_str ( "doc" ) . with_span_pos ( span) ) ,
435+ path : MetaPath :: from_ident ( Ident :: from_str ( "doc" ) . with_span_pos ( span) ) ,
436436 tokens : MetaItemKind :: NameValue ( lit) . tokens ( span) ,
437437 is_sugared_doc : true ,
438438 span,
@@ -470,17 +470,17 @@ impl MetaItem {
470470 fn tokens ( & self ) -> TokenStream {
471471 let mut idents = vec ! [ ] ;
472472 let mut last_pos = BytePos ( 0 as u32 ) ;
473- for ( i, segment ) in self . path . segments . iter ( ) . enumerate ( ) {
473+ for ( i, & ident ) in self . path . segments . iter ( ) . enumerate ( ) {
474474 let is_first = i == 0 ;
475475 if !is_first {
476476 let mod_sep_span = Span :: new ( last_pos,
477- segment . ident . span . lo ( ) ,
478- segment . ident . span . ctxt ( ) ) ;
477+ ident. span . lo ( ) ,
478+ ident. span . ctxt ( ) ) ;
479479 idents. push ( TokenTree :: Token ( mod_sep_span, Token :: ModSep ) . into ( ) ) ;
480480 }
481- idents. push ( TokenTree :: Token ( segment . ident . span ,
482- Token :: from_ast_ident ( segment . ident ) ) . into ( ) ) ;
483- last_pos = segment . ident . span . hi ( ) ;
481+ idents. push ( TokenTree :: Token ( ident. span ,
482+ Token :: from_ast_ident ( ident) ) . into ( ) ) ;
483+ last_pos = ident. span . hi ( ) ;
484484 }
485485 idents. push ( self . node . tokens ( self . span ) ) ;
486486 TokenStream :: concat ( idents)
@@ -493,12 +493,12 @@ impl MetaItem {
493493 let path = match tokens. next ( ) {
494494 Some ( TokenTree :: Token ( span, Token :: Ident ( ident, _) ) ) => {
495495 if let Some ( TokenTree :: Token ( _, Token :: ModSep ) ) = tokens. peek ( ) {
496- let mut segments = vec ! [ PathSegment :: from_ident ( ident. with_span_pos( span) ) ] ;
496+ let mut segments = vec ! [ ident. with_span_pos( span) ] ;
497497 tokens. next ( ) ;
498498 loop {
499499 if let Some ( TokenTree :: Token ( span,
500500 Token :: Ident ( ident, _) ) ) = tokens. next ( ) {
501- segments. push ( PathSegment :: from_ident ( ident. with_span_pos ( span) ) ) ;
501+ segments. push ( ident. with_span_pos ( span) ) ;
502502 } else {
503503 return None ;
504504 }
@@ -508,16 +508,18 @@ impl MetaItem {
508508 break ;
509509 }
510510 }
511- let span = span. with_hi ( segments. last ( ) . unwrap ( ) . ident . span . hi ( ) ) ;
512- Path { span, segments }
511+ let span = span. with_hi ( segments. last ( ) . unwrap ( ) . span . hi ( ) ) ;
512+ MetaPath { span, segments }
513513 } else {
514- Path :: from_ident ( ident. with_span_pos ( span) )
514+ MetaPath :: from_ident ( ident. with_span_pos ( span) )
515515 }
516516 }
517517 Some ( TokenTree :: Token ( _, Token :: Interpolated ( ref nt) ) ) => match nt. 0 {
518- token:: Nonterminal :: NtIdent ( ident, _) => Path :: from_ident ( ident) ,
518+ token:: Nonterminal :: NtIdent ( ident, _) => MetaPath :: from_ident ( ident) ,
519519 token:: Nonterminal :: NtMeta ( ref meta) => return Some ( meta. clone ( ) ) ,
520- token:: Nonterminal :: NtPath ( ref path) => path. clone ( ) ,
520+ token:: Nonterminal :: NtPath ( ref path) => {
521+ ast:: MetaPath :: from_regular_path ( path) ?
522+ }
521523 _ => return None ,
522524 } ,
523525 _ => return None ,
0 commit comments