@@ -375,6 +375,19 @@ fn transcribe_metavar<'tx>(
375375        return  Ok ( ( ) ) ; 
376376    } ; 
377377
378+     let  MatchedSingle ( pnr)  = cur_matched else  { 
379+         // We were unable to descend far enough. This is an error. 
380+         return  Err ( dcx. create_err ( MacroVarStillRepeating  {  span :  sp,  ident } ) ) ; 
381+     } ; 
382+ 
383+     transcribe_pnr ( tscx,  sp,  pnr) 
384+ } 
385+ 
386+ fn  transcribe_pnr < ' tx > ( 
387+     tscx :  & mut  TranscrCtx < ' tx ,  ' _ > , 
388+     mut  sp :  Span , 
389+     pnr :  & ParseNtResult , 
390+ )  -> PResult < ' tx ,  ( ) >  { 
378391    // We wrap the tokens in invisible delimiters, unless they are already wrapped 
379392    // in invisible delimiters with the same `MetaVarKind`. Because some proc 
380393    // macros can't handle multiple layers of invisible delimiters of the same 
@@ -404,33 +417,33 @@ fn transcribe_metavar<'tx>(
404417        ) 
405418    } ; 
406419
407-     let  tt = match  cur_matched  { 
408-         MatchedSingle ( ParseNtResult :: Tt ( tt) )  => { 
420+     let  tt = match  pnr  { 
421+         ParseNtResult :: Tt ( tt)  => { 
409422            // `tt`s are emitted into the output stream directly as "raw tokens", 
410423            // without wrapping them into groups. Other variables are emitted into 
411424            // the output stream as groups with `Delimiter::Invisible` to maintain 
412425            // parsing priorities. 
413426            maybe_use_metavar_location ( tscx. psess ,  & tscx. stack ,  sp,  tt,  & mut  tscx. marker ) 
414427        } 
415-         MatchedSingle ( ParseNtResult :: Ident ( ident,  is_raw) )  => { 
428+         ParseNtResult :: Ident ( ident,  is_raw)  => { 
416429            tscx. marker . mark_span ( & mut  sp) ; 
417430            with_metavar_spans ( |mspans| mspans. insert ( ident. span ,  sp) ) ; 
418431            let  kind = token:: NtIdent ( * ident,  * is_raw) ; 
419432            TokenTree :: token_alone ( kind,  sp) 
420433        } 
421-         MatchedSingle ( ParseNtResult :: Lifetime ( ident,  is_raw) )  => { 
434+         ParseNtResult :: Lifetime ( ident,  is_raw)  => { 
422435            tscx. marker . mark_span ( & mut  sp) ; 
423436            with_metavar_spans ( |mspans| mspans. insert ( ident. span ,  sp) ) ; 
424437            let  kind = token:: NtLifetime ( * ident,  * is_raw) ; 
425438            TokenTree :: token_alone ( kind,  sp) 
426439        } 
427-         MatchedSingle ( ParseNtResult :: Item ( item) )  => { 
440+         ParseNtResult :: Item ( item)  => { 
428441            mk_delimited ( item. span ,  MetaVarKind :: Item ,  TokenStream :: from_ast ( item) ) 
429442        } 
430-         MatchedSingle ( ParseNtResult :: Block ( block) )  => { 
443+         ParseNtResult :: Block ( block)  => { 
431444            mk_delimited ( block. span ,  MetaVarKind :: Block ,  TokenStream :: from_ast ( block) ) 
432445        } 
433-         MatchedSingle ( ParseNtResult :: Stmt ( stmt) )  => { 
446+         ParseNtResult :: Stmt ( stmt)  => { 
434447            let  stream = if  let  StmtKind :: Empty  = stmt. kind  { 
435448                // FIXME: Properly collect tokens for empty statements. 
436449                TokenStream :: token_alone ( token:: Semi ,  stmt. span ) 
@@ -439,10 +452,10 @@ fn transcribe_metavar<'tx>(
439452            } ; 
440453            mk_delimited ( stmt. span ,  MetaVarKind :: Stmt ,  stream) 
441454        } 
442-         MatchedSingle ( ParseNtResult :: Pat ( pat,  pat_kind) )  => { 
455+         ParseNtResult :: Pat ( pat,  pat_kind)  => { 
443456            mk_delimited ( pat. span ,  MetaVarKind :: Pat ( * pat_kind) ,  TokenStream :: from_ast ( pat) ) 
444457        } 
445-         MatchedSingle ( ParseNtResult :: Expr ( expr,  kind) )  => { 
458+         ParseNtResult :: Expr ( expr,  kind)  => { 
446459            let  ( can_begin_literal_maybe_minus,  can_begin_string_literal)  = match  & expr. kind  { 
447460                ExprKind :: Lit ( _)  => ( true ,  true ) , 
448461                ExprKind :: Unary ( UnOp :: Neg ,  e)  if  matches ! ( & e. kind,  ExprKind :: Lit ( _) )  => { 
@@ -460,31 +473,27 @@ fn transcribe_metavar<'tx>(
460473                TokenStream :: from_ast ( expr) , 
461474            ) 
462475        } 
463-         MatchedSingle ( ParseNtResult :: Literal ( lit) )  => { 
476+         ParseNtResult :: Literal ( lit)  => { 
464477            mk_delimited ( lit. span ,  MetaVarKind :: Literal ,  TokenStream :: from_ast ( lit) ) 
465478        } 
466-         MatchedSingle ( ParseNtResult :: Ty ( ty) )  => { 
479+         ParseNtResult :: Ty ( ty)  => { 
467480            let  is_path = matches ! ( & ty. kind,  TyKind :: Path ( None ,  _path) ) ; 
468481            mk_delimited ( ty. span ,  MetaVarKind :: Ty  {  is_path } ,  TokenStream :: from_ast ( ty) ) 
469482        } 
470-         MatchedSingle ( ParseNtResult :: Meta ( attr_item) )  => { 
483+         ParseNtResult :: Meta ( attr_item)  => { 
471484            let  has_meta_form = attr_item. meta_kind ( ) . is_some ( ) ; 
472485            mk_delimited ( 
473486                attr_item. span ( ) , 
474487                MetaVarKind :: Meta  {  has_meta_form } , 
475488                TokenStream :: from_ast ( attr_item) , 
476489            ) 
477490        } 
478-         MatchedSingle ( ParseNtResult :: Path ( path) )  => { 
491+         ParseNtResult :: Path ( path)  => { 
479492            mk_delimited ( path. span ,  MetaVarKind :: Path ,  TokenStream :: from_ast ( path) ) 
480493        } 
481-         MatchedSingle ( ParseNtResult :: Vis ( vis) )  => { 
494+         ParseNtResult :: Vis ( vis)  => { 
482495            mk_delimited ( vis. span ,  MetaVarKind :: Vis ,  TokenStream :: from_ast ( vis) ) 
483496        } 
484-         MatchedSeq ( ..)  => { 
485-             // We were unable to descend far enough. This is an error. 
486-             return  Err ( dcx. create_err ( MacroVarStillRepeating  {  span :  sp,  ident } ) ) ; 
487-         } 
488497    } ; 
489498
490499    tscx. result . push ( tt) ; 
0 commit comments