@@ -98,7 +98,7 @@ impl<'a> Parser<'a> {
9898 debug ! ( "parse_attribute_with_inner_parse_policy: inner_parse_policy={:?} self.token={:?}" ,
9999 inner_parse_policy,
100100 self . token) ;
101- let ( span, path , tokens , style) = match self . token . kind {
101+ let ( span, item , style) = match self . token . kind {
102102 token:: Pound => {
103103 let lo = self . token . span ;
104104 self . bump ( ) ;
@@ -115,7 +115,7 @@ impl<'a> Parser<'a> {
115115 } ;
116116
117117 self . expect ( & token:: OpenDelim ( token:: Bracket ) ) ?;
118- let ( path , tokens ) = self . parse_meta_item_unrestricted ( ) ?;
118+ let item = self . parse_attr_item ( ) ?;
119119 self . expect ( & token:: CloseDelim ( token:: Bracket ) ) ?;
120120 let hi = self . prev_span ;
121121
@@ -150,7 +150,7 @@ impl<'a> Parser<'a> {
150150 }
151151 }
152152
153- ( attr_sp, path , tokens , style)
153+ ( attr_sp, item , style)
154154 }
155155 _ => {
156156 let token_str = self . this_token_to_string ( ) ;
@@ -159,7 +159,7 @@ impl<'a> Parser<'a> {
159159 } ;
160160
161161 Ok ( ast:: Attribute {
162- item : ast :: AttrItem { path , tokens } ,
162+ item,
163163 id : attr:: mk_attr_id ( ) ,
164164 style,
165165 is_sugared_doc : false ,
@@ -176,17 +176,17 @@ impl<'a> Parser<'a> {
176176 /// PATH
177177 /// PATH `=` TOKEN_TREE
178178 /// The delimiters or `=` are still put into the resulting token stream.
179- crate fn parse_meta_item_unrestricted ( & mut self ) -> PResult < ' a , ( ast:: Path , TokenStream ) > {
180- let meta = match self . token . kind {
179+ crate fn parse_attr_item ( & mut self ) -> PResult < ' a , ast:: AttrItem > {
180+ let item = match self . token . kind {
181181 token:: Interpolated ( ref nt) => match * * nt {
182- Nonterminal :: NtMeta ( ref meta ) => Some ( meta . clone ( ) ) ,
182+ Nonterminal :: NtMeta ( ref item ) => Some ( item . clone ( ) ) ,
183183 _ => None ,
184184 } ,
185185 _ => None ,
186186 } ;
187- Ok ( if let Some ( meta ) = meta {
187+ Ok ( if let Some ( item ) = item {
188188 self . bump ( ) ;
189- ( meta . path , meta . node . tokens ( meta . span ) )
189+ item
190190 } else {
191191 let path = self . parse_path ( PathStyle :: Mod ) ?;
192192 let tokens = if self . check ( & token:: OpenDelim ( DelimToken :: Paren ) ) ||
@@ -213,7 +213,7 @@ impl<'a> Parser<'a> {
213213 } else {
214214 TokenStream :: empty ( )
215215 } ;
216- ( path, tokens)
216+ ast :: AttrItem { path, tokens }
217217 } )
218218 }
219219
@@ -281,9 +281,14 @@ impl<'a> Parser<'a> {
281281 _ => None ,
282282 } ;
283283
284- if let Some ( meta) = nt_meta {
285- self . bump ( ) ;
286- return Ok ( meta) ;
284+ if let Some ( item) = nt_meta {
285+ return match item. meta ( item. path . span ) {
286+ Some ( meta) => {
287+ self . bump ( ) ;
288+ Ok ( meta)
289+ }
290+ None => self . unexpected ( ) ,
291+ }
287292 }
288293
289294 let lo = self . token . span ;
0 commit comments