@@ -285,12 +285,12 @@ impl MetaItem {
285285 self . kind . value_str ( )
286286 }
287287
288- fn from_tokens < I > ( tokens : & mut iter:: Peekable < I > ) -> Option < MetaItem >
288+ fn from_tokens < ' a , I > ( tokens : & mut iter:: Peekable < I > ) -> Option < MetaItem >
289289 where
290- I : Iterator < Item = TokenTree > ,
290+ I : Iterator < Item = & ' a TokenTree > ,
291291 {
292292 // FIXME: Share code with `parse_path`.
293- let path = match tokens. next ( ) . map ( TokenTree :: uninterpolate) {
293+ let path = match tokens. next ( ) . map ( |tt| TokenTree :: uninterpolate ( tt . clone ( ) ) ) {
294294 Some ( TokenTree :: Token (
295295 Token { kind : kind @ ( token:: Ident ( ..) | token:: ModSep ) , span } ,
296296 _,
@@ -309,7 +309,7 @@ impl MetaItem {
309309 } ;
310310 loop {
311311 if let Some ( TokenTree :: Token ( Token { kind : token:: Ident ( name, _) , span } , _) ) =
312- tokens. next ( ) . map ( TokenTree :: uninterpolate)
312+ tokens. next ( ) . map ( |tt| TokenTree :: uninterpolate ( tt . clone ( ) ) )
313313 {
314314 segments. push ( PathSegment :: from_ident ( Ident :: new ( name, span) ) ) ;
315315 } else {
@@ -354,7 +354,7 @@ impl MetaItemKind {
354354 }
355355
356356 fn list_from_tokens ( tokens : TokenStream ) -> Option < ThinVec < NestedMetaItem > > {
357- let mut tokens = tokens. into_trees ( ) . peekable ( ) ;
357+ let mut tokens = tokens. trees ( ) . peekable ( ) ;
358358 let mut result = ThinVec :: new ( ) ;
359359 while tokens. peek ( ) . is_some ( ) {
360360 let item = NestedMetaItem :: from_tokens ( & mut tokens) ?;
@@ -367,12 +367,12 @@ impl MetaItemKind {
367367 Some ( result)
368368 }
369369
370- fn name_value_from_tokens (
371- tokens : & mut impl Iterator < Item = TokenTree > ,
370+ fn name_value_from_tokens < ' a > (
371+ tokens : & mut impl Iterator < Item = & ' a TokenTree > ,
372372 ) -> Option < MetaItemKind > {
373373 match tokens. next ( ) {
374374 Some ( TokenTree :: Delimited ( _, Delimiter :: Invisible , inner_tokens) ) => {
375- MetaItemKind :: name_value_from_tokens ( & mut inner_tokens. into_trees ( ) )
375+ MetaItemKind :: name_value_from_tokens ( & mut inner_tokens. trees ( ) )
376376 }
377377 Some ( TokenTree :: Token ( token, _) ) => {
378378 MetaItemLit :: from_token ( & token) . map ( MetaItemKind :: NameValue )
@@ -381,8 +381,8 @@ impl MetaItemKind {
381381 }
382382 }
383383
384- fn from_tokens (
385- tokens : & mut iter:: Peekable < impl Iterator < Item = TokenTree > > ,
384+ fn from_tokens < ' a > (
385+ tokens : & mut iter:: Peekable < impl Iterator < Item = & ' a TokenTree > > ,
386386 ) -> Option < MetaItemKind > {
387387 match tokens. peek ( ) {
388388 Some ( TokenTree :: Delimited ( _, Delimiter :: Parenthesis , inner_tokens) ) => {
@@ -501,9 +501,9 @@ impl NestedMetaItem {
501501 self . meta_item ( ) . is_some ( )
502502 }
503503
504- fn from_tokens < I > ( tokens : & mut iter:: Peekable < I > ) -> Option < NestedMetaItem >
504+ fn from_tokens < ' a , I > ( tokens : & mut iter:: Peekable < I > ) -> Option < NestedMetaItem >
505505 where
506- I : Iterator < Item = TokenTree > ,
506+ I : Iterator < Item = & ' a TokenTree > ,
507507 {
508508 match tokens. peek ( ) {
509509 Some ( TokenTree :: Token ( token, _) )
@@ -513,9 +513,8 @@ impl NestedMetaItem {
513513 return Some ( NestedMetaItem :: Lit ( lit) ) ;
514514 }
515515 Some ( TokenTree :: Delimited ( _, Delimiter :: Invisible , inner_tokens) ) => {
516- let inner_tokens = inner_tokens. clone ( ) ;
517516 tokens. next ( ) ;
518- return NestedMetaItem :: from_tokens ( & mut inner_tokens. into_trees ( ) . peekable ( ) ) ;
517+ return NestedMetaItem :: from_tokens ( & mut inner_tokens. trees ( ) . peekable ( ) ) ;
519518 }
520519 _ => { }
521520 }
0 commit comments