@@ -15,7 +15,7 @@ pub use self::ReprAttr::*;
15
15
pub use self :: IntType :: * ;
16
16
17
17
use ast;
18
- use ast:: { AttrId , Attribute , Name , Ident } ;
18
+ use ast:: { AttrId , Attribute , Name , Ident , Path , PathSegment } ;
19
19
use ast:: { MetaItem , MetaItemKind , NestedMetaItem , NestedMetaItemKind } ;
20
20
use ast:: { Lit , LitKind , Expr , ExprKind , Item , Local , Stmt , StmtKind } ;
21
21
use codemap:: { BytePos , Spanned , respan, dummy_spanned} ;
@@ -212,7 +212,7 @@ impl NestedMetaItem {
212
212
}
213
213
}
214
214
215
- fn name_from_path ( path : & ast :: Path ) -> Name {
215
+ fn name_from_path ( path : & Path ) -> Name {
216
216
path. segments . last ( ) . expect ( "empty path in attribute" ) . ident . name
217
217
}
218
218
@@ -399,15 +399,15 @@ pub fn mk_name_value_item_str(ident: Ident, value: Spanned<Symbol>) -> MetaItem
399
399
}
400
400
401
401
pub 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) }
403
403
}
404
404
405
405
pub 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) }
407
407
}
408
408
409
409
pub 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 }
411
411
}
412
412
413
413
pub 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 {
466
466
Attribute {
467
467
id,
468
468
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) ) ,
470
470
tokens : MetaItemKind :: NameValue ( lit) . tokens ( span) ,
471
471
is_sugared_doc : true ,
472
472
span,
@@ -1142,7 +1142,6 @@ impl MetaItem {
1142
1142
fn tokens ( & self ) -> TokenStream {
1143
1143
let mut idents = vec ! [ ] ;
1144
1144
let mut last_pos = BytePos ( 0 as u32 ) ;
1145
- // FIXME: Share code with `parse_path`.
1146
1145
for ( i, segment) in self . ident . segments . iter ( ) . enumerate ( ) {
1147
1146
let is_first = i == 0 ;
1148
1147
if !is_first {
@@ -1162,14 +1161,16 @@ impl MetaItem {
1162
1161
fn from_tokens < I > ( tokens : & mut iter:: Peekable < I > ) -> Option < MetaItem >
1163
1162
where I : Iterator < Item = TokenTree > ,
1164
1163
{
1164
+ // FIXME: Share code with `parse_path`.
1165
1165
let ident = match tokens. next ( ) {
1166
1166
Some ( TokenTree :: Token ( span, Token :: Ident ( ident, _) ) ) => {
1167
1167
if let Some ( TokenTree :: Token ( _, Token :: ModSep ) ) = tokens. peek ( ) {
1168
+ let mut segments = vec ! [ PathSegment :: from_ident( ident. with_span_pos( span) ) ] ;
1168
1169
tokens. next ( ) ;
1169
- let mut segments = vec ! [ ] ;
1170
1170
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) ) ) ;
1173
1174
} else {
1174
1175
return None ;
1175
1176
}
@@ -1179,15 +1180,14 @@ impl MetaItem {
1179
1180
break ;
1180
1181
}
1181
1182
}
1182
- ast:: Path { span, segments }
1183
+ let span = span. with_hi ( segments. last ( ) . unwrap ( ) . ident . span . hi ( ) ) ;
1184
+ Path { span, segments }
1183
1185
} else {
1184
- ast :: Path :: from_ident ( ident)
1186
+ Path :: from_ident ( ident. with_span_pos ( span ) )
1185
1187
}
1186
1188
}
1187
1189
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) ,
1191
1191
token:: Nonterminal :: NtMeta ( ref meta) => return Some ( meta. clone ( ) ) ,
1192
1192
token:: Nonterminal :: NtPath ( ref path) => path. clone ( ) ,
1193
1193
_ => return None ,
0 commit comments