@@ -15,7 +15,7 @@ pub use self::ReprAttr::*;
1515pub use self :: IntType :: * ;
1616
1717use ast;
18- use ast:: { AttrId , Attribute , Name , Ident } ;
18+ use ast:: { AttrId , Attribute , Name , Ident , Path , PathSegment } ;
1919use ast:: { MetaItem , MetaItemKind , NestedMetaItem , NestedMetaItemKind } ;
2020use ast:: { Lit , LitKind , Expr , ExprKind , Item , Local , Stmt , StmtKind } ;
2121use codemap:: { BytePos , Spanned , respan, dummy_spanned} ;
@@ -212,7 +212,7 @@ impl NestedMetaItem {
212212 }
213213}
214214
215- fn name_from_path ( path : & ast :: Path ) -> Name {
215+ fn name_from_path ( path : & Path ) -> Name {
216216 path. segments . last ( ) . expect ( "empty path in attribute" ) . ident . name
217217}
218218
@@ -399,15 +399,15 @@ pub fn mk_name_value_item_str(ident: Ident, value: Spanned<Symbol>) -> MetaItem
399399}
400400
401401pub fn mk_name_value_item ( span : Span , ident : Ident , value : ast:: Lit ) -> MetaItem {
402- MetaItem { ident : ast :: Path :: from_ident ( ident) , span, node : MetaItemKind :: NameValue ( value) }
402+ MetaItem { ident : Path :: from_ident ( ident) , span, node : MetaItemKind :: NameValue ( value) }
403403}
404404
405405pub fn mk_list_item ( span : Span , ident : Ident , items : Vec < NestedMetaItem > ) -> MetaItem {
406- MetaItem { ident : ast :: Path :: from_ident ( ident) , span, node : MetaItemKind :: List ( items) }
406+ MetaItem { ident : Path :: from_ident ( ident) , span, node : MetaItemKind :: List ( items) }
407407}
408408
409409pub fn mk_word_item ( ident : Ident ) -> MetaItem {
410- MetaItem { ident : ast :: Path :: from_ident ( ident) , span : ident. span , node : MetaItemKind :: Word }
410+ MetaItem { ident : Path :: from_ident ( ident) , span : ident. span , node : MetaItemKind :: Word }
411411}
412412
413413pub fn mk_nested_word_item ( ident : Ident ) -> NestedMetaItem {
@@ -466,7 +466,7 @@ pub fn mk_sugared_doc_attr(id: AttrId, text: Symbol, span: Span) -> Attribute {
466466 Attribute {
467467 id,
468468 style,
469- path : ast :: Path :: from_ident ( Ident :: from_str ( "doc" ) . with_span_pos ( span) ) ,
469+ path : Path :: from_ident ( Ident :: from_str ( "doc" ) . with_span_pos ( span) ) ,
470470 tokens : MetaItemKind :: NameValue ( lit) . tokens ( span) ,
471471 is_sugared_doc : true ,
472472 span,
@@ -1142,7 +1142,6 @@ impl MetaItem {
11421142 fn tokens ( & self ) -> TokenStream {
11431143 let mut idents = vec ! [ ] ;
11441144 let mut last_pos = BytePos ( 0 as u32 ) ;
1145- // FIXME: Share code with `parse_path`.
11461145 for ( i, segment) in self . ident . segments . iter ( ) . enumerate ( ) {
11471146 let is_first = i == 0 ;
11481147 if !is_first {
@@ -1162,14 +1161,16 @@ impl MetaItem {
11621161 fn from_tokens < I > ( tokens : & mut iter:: Peekable < I > ) -> Option < MetaItem >
11631162 where I : Iterator < Item = TokenTree > ,
11641163 {
1164+ // FIXME: Share code with `parse_path`.
11651165 let ident = match tokens. next ( ) {
11661166 Some ( TokenTree :: Token ( span, Token :: Ident ( ident, _) ) ) => {
11671167 if let Some ( TokenTree :: Token ( _, Token :: ModSep ) ) = tokens. peek ( ) {
1168+ let mut segments = vec ! [ PathSegment :: from_ident( ident. with_span_pos( span) ) ] ;
11681169 tokens. next ( ) ;
1169- let mut segments = vec ! [ ] ;
11701170 loop {
1171- if let Some ( TokenTree :: Token ( _, Token :: Ident ( ident, _) ) ) = tokens. next ( ) {
1172- segments. push ( ast:: PathSegment :: from_ident ( ident) ) ;
1171+ if let Some ( TokenTree :: Token ( span,
1172+ Token :: Ident ( ident, _) ) ) = tokens. next ( ) {
1173+ segments. push ( PathSegment :: from_ident ( ident. with_span_pos ( span) ) ) ;
11731174 } else {
11741175 return None ;
11751176 }
@@ -1179,15 +1180,14 @@ impl MetaItem {
11791180 break ;
11801181 }
11811182 }
1182- ast:: Path { span, segments }
1183+ let span = span. with_hi ( segments. last ( ) . unwrap ( ) . ident . span . hi ( ) ) ;
1184+ Path { span, segments }
11831185 } else {
1184- ast :: Path :: from_ident ( ident)
1186+ Path :: from_ident ( ident. with_span_pos ( span ) )
11851187 }
11861188 }
11871189 Some ( TokenTree :: Token ( _, Token :: Interpolated ( ref nt) ) ) => match nt. 0 {
1188- token:: Nonterminal :: NtIdent ( ident, _) => {
1189- ast:: Path :: from_ident ( ident)
1190- }
1190+ token:: Nonterminal :: NtIdent ( ident, _) => Path :: from_ident ( ident) ,
11911191 token:: Nonterminal :: NtMeta ( ref meta) => return Some ( meta. clone ( ) ) ,
11921192 token:: Nonterminal :: NtPath ( ref path) => path. clone ( ) ,
11931193 _ => return None ,
0 commit comments