@@ -90,7 +90,7 @@ impl<'a> Parser<'a> {
9090 debug ! ( "parse_attribute_with_inner_parse_policy: inner_parse_policy={:?} self.token={:?}" ,
9191 inner_parse_policy,
9292 self . token) ;
93- let ( span, path , tokens , style) = match self . token . kind {
93+ let ( span, item , style) = match self . token . kind {
9494 token:: Pound => {
9595 let lo = self . token . span ;
9696 self . bump ( ) ;
@@ -107,7 +107,7 @@ impl<'a> Parser<'a> {
107107 } ;
108108
109109 self . expect ( & token:: OpenDelim ( token:: Bracket ) ) ?;
110- let ( path , tokens ) = self . parse_meta_item_unrestricted ( ) ?;
110+ let item = self . parse_attr_item ( ) ?;
111111 self . expect ( & token:: CloseDelim ( token:: Bracket ) ) ?;
112112 let hi = self . prev_span ;
113113
@@ -142,7 +142,7 @@ impl<'a> Parser<'a> {
142142 }
143143 }
144144
145- ( attr_sp, path , tokens , style)
145+ ( attr_sp, item , style)
146146 }
147147 _ => {
148148 let token_str = self . this_token_to_string ( ) ;
@@ -151,7 +151,7 @@ impl<'a> Parser<'a> {
151151 } ;
152152
153153 Ok ( ast:: Attribute {
154- item : ast :: AttrItem { path , tokens } ,
154+ item,
155155 id : attr:: mk_attr_id ( ) ,
156156 style,
157157 is_sugared_doc : false ,
@@ -168,17 +168,17 @@ impl<'a> Parser<'a> {
168168 /// PATH
169169 /// PATH `=` TOKEN_TREE
170170 /// The delimiters or `=` are still put into the resulting token stream.
171- pub fn parse_meta_item_unrestricted ( & mut self ) -> PResult < ' a , ( ast:: Path , TokenStream ) > {
172- let meta = match self . token . kind {
171+ pub fn parse_attr_item ( & mut self ) -> PResult < ' a , ast:: AttrItem > {
172+ let item = match self . token . kind {
173173 token:: Interpolated ( ref nt) => match * * nt {
174- Nonterminal :: NtMeta ( ref meta ) => Some ( meta . clone ( ) ) ,
174+ Nonterminal :: NtMeta ( ref item ) => Some ( item . clone ( ) ) ,
175175 _ => None ,
176176 } ,
177177 _ => None ,
178178 } ;
179- Ok ( if let Some ( meta ) = meta {
179+ Ok ( if let Some ( item ) = item {
180180 self . bump ( ) ;
181- ( meta . path , meta . kind . tokens ( meta . span ) )
181+ item
182182 } else {
183183 let path = self . parse_path ( PathStyle :: Mod ) ?;
184184 let tokens = if self . check ( & token:: OpenDelim ( DelimToken :: Paren ) ) ||
@@ -205,7 +205,7 @@ impl<'a> Parser<'a> {
205205 } else {
206206 TokenStream :: empty ( )
207207 } ;
208- ( path, tokens)
208+ ast :: AttrItem { path, tokens }
209209 } )
210210 }
211211
@@ -273,9 +273,14 @@ impl<'a> Parser<'a> {
273273 _ => None ,
274274 } ;
275275
276- if let Some ( meta) = nt_meta {
277- self . bump ( ) ;
278- return Ok ( meta) ;
276+ if let Some ( item) = nt_meta {
277+ return match item. meta ( item. path . span ) {
278+ Some ( meta) => {
279+ self . bump ( ) ;
280+ Ok ( meta)
281+ }
282+ None => self . unexpected ( ) ,
283+ }
279284 }
280285
281286 let lo = self . token . span ;
0 commit comments