1- use  crate :: base:: ExtCtxt ; 
21use  crate :: errors:: { 
32    CountRepetitionMisplaced ,  MetaVarExprUnrecognizedVar ,  MetaVarsDifSeqMatchers ,  MustRepeatOnce , 
43    NoSyntaxVarsExprRepeat ,  VarStillRepeating , 
@@ -9,12 +8,13 @@ use rustc_ast::mut_visit::{self, MutVisitor};
98use  rustc_ast:: token:: { self ,  Delimiter ,  Token ,  TokenKind } ; 
109use  rustc_ast:: tokenstream:: { DelimSpacing ,  DelimSpan ,  Spacing ,  TokenStream ,  TokenTree } ; 
1110use  rustc_data_structures:: fx:: FxHashMap ; 
12- use  rustc_errors:: { pluralize,  Diag ,  PResult } ; 
11+ use  rustc_errors:: { pluralize,  Diag ,  DiagCtxt ,   PResult } ; 
1312use  rustc_parse:: parser:: ParseNtResult ; 
1413use  rustc_span:: hygiene:: { LocalExpnId ,  Transparency } ; 
1514use  rustc_span:: symbol:: { sym,  Ident ,  MacroRulesNormalizedIdent } ; 
1615use  rustc_span:: { with_metavar_spans,  Span ,  SyntaxContext } ; 
1716
17+ use  rustc_session:: parse:: ParseSess ; 
1818use  smallvec:: { smallvec,  SmallVec } ; 
1919use  std:: mem; 
2020
@@ -99,11 +99,12 @@ impl<'a> Iterator for Frame<'a> {
9999/// 
100100/// Along the way, we do some additional error checking. 
101101pub ( super )  fn  transcribe < ' a > ( 
102-     cx :  & ExtCtxt < ' a > , 
102+     psess :  & ' a   ParseSess , 
103103    interp :  & FxHashMap < MacroRulesNormalizedIdent ,  NamedMatch > , 
104104    src :  & mbe:: Delimited , 
105105    src_span :  DelimSpan , 
106106    transparency :  Transparency , 
107+     expand_id :  LocalExpnId , 
107108)  -> PResult < ' a ,  TokenStream >  { 
108109    // Nothing for us to transcribe... 
109110    if  src. tts . is_empty ( )  { 
@@ -137,8 +138,9 @@ pub(super) fn transcribe<'a>(
137138    // again, and we are done transcribing. 
138139    let  mut  result:  Vec < TokenTree >  = Vec :: new ( ) ; 
139140    let  mut  result_stack = Vec :: new ( ) ; 
140-     let  mut  marker = Marker ( cx . current_expansion . id ,  transparency,  Default :: default ( ) ) ; 
141+     let  mut  marker = Marker ( expand_id ,  transparency,  Default :: default ( ) ) ; 
141142
143+     let  dcx = & psess. dcx ; 
142144    loop  { 
143145        // Look at the last frame on the stack. 
144146        // If it still has a TokenTree we have not looked at yet, use that tree. 
@@ -201,19 +203,17 @@ pub(super) fn transcribe<'a>(
201203            seq @ mbe:: TokenTree :: Sequence ( _,  seq_rep)  => { 
202204                match  lockstep_iter_size ( seq,  interp,  & repeats)  { 
203205                    LockstepIterSize :: Unconstrained  => { 
204-                         return  Err ( cx
205-                             . dcx ( ) 
206-                             . create_err ( NoSyntaxVarsExprRepeat  {  span :  seq. span ( )  } ) ) ; 
206+                         return  Err ( dcx. create_err ( NoSyntaxVarsExprRepeat  {  span :  seq. span ( )  } ) ) ; 
207207                    } 
208208
209209                    LockstepIterSize :: Contradiction ( msg)  => { 
210210                        // FIXME: this really ought to be caught at macro definition time... It 
211211                        // happens when two meta-variables are used in the same repetition in a 
212212                        // sequence, but they come from different sequence matchers and repeat 
213213                        // different amounts. 
214-                         return  Err ( cx 
215-                             . dcx ( ) 
216-                              . create_err ( MetaVarsDifSeqMatchers   {   span :  seq . span ( ) ,  msg  } ) ) ; 
214+                         return  Err ( 
215+                             dcx. create_err ( MetaVarsDifSeqMatchers   {   span :  seq . span ( ) ,  msg  } ) 
216+                         ) ; 
217217                    } 
218218
219219                    LockstepIterSize :: Constraint ( len,  _)  => { 
@@ -227,9 +227,7 @@ pub(super) fn transcribe<'a>(
227227                                // FIXME: this really ought to be caught at macro definition 
228228                                // time... It happens when the Kleene operator in the matcher and 
229229                                // the body for the same meta-variable do not match. 
230-                                 return  Err ( cx
231-                                     . dcx ( ) 
232-                                     . create_err ( MustRepeatOnce  {  span :  sp. entire ( )  } ) ) ; 
230+                                 return  Err ( dcx. create_err ( MustRepeatOnce  {  span :  sp. entire ( )  } ) ) ; 
233231                            } 
234232                        }  else  { 
235233                            // 0 is the initial counter (we have done 0 repetitions so far). `len` 
@@ -274,7 +272,7 @@ pub(super) fn transcribe<'a>(
274272                        MatchedSingle ( ParseNtResult :: Tt ( tt) )  => { 
275273                            // `tt`s are emitted into the output stream directly as "raw tokens", 
276274                            // without wrapping them into groups. 
277-                             maybe_use_metavar_location ( cx ,  & stack,  sp,  tt,  & mut  marker) 
275+                             maybe_use_metavar_location ( psess ,  & stack,  sp,  tt,  & mut  marker) 
278276                        } 
279277                        MatchedSingle ( ParseNtResult :: Ident ( ident,  is_raw) )  => { 
280278                            marker. visit_span ( & mut  sp) ; 
@@ -295,7 +293,7 @@ pub(super) fn transcribe<'a>(
295293                        } 
296294                        MatchedSeq ( ..)  => { 
297295                            // We were unable to descend far enough. This is an error. 
298-                             return  Err ( cx . dcx ( ) . create_err ( VarStillRepeating  {  span :  sp,  ident } ) ) ; 
296+                             return  Err ( dcx. create_err ( VarStillRepeating  {  span :  sp,  ident } ) ) ; 
299297                        } 
300298                    } ; 
301299                    result. push ( tt) 
@@ -314,7 +312,7 @@ pub(super) fn transcribe<'a>(
314312
315313            // Replace meta-variable expressions with the result of their expansion. 
316314            mbe:: TokenTree :: MetaVarExpr ( sp,  expr)  => { 
317-                 transcribe_metavar_expr ( cx ,  expr,  interp,  & mut  marker,  & repeats,  & mut  result,  sp) ?; 
315+                 transcribe_metavar_expr ( dcx ,  expr,  interp,  & mut  marker,  & repeats,  & mut  result,  sp) ?; 
318316            } 
319317
320318            // If we are entering a new delimiter, we push its contents to the `stack` to be 
@@ -374,7 +372,7 @@ pub(super) fn transcribe<'a>(
374372///   combine with each other and not with tokens outside of the sequence. 
375373/// - The metavariable span comes from a different crate, then we prefer the more local span. 
376374fn  maybe_use_metavar_location ( 
377-     cx :  & ExtCtxt < ' _ > , 
375+     psess :  & ParseSess , 
378376    stack :  & [ Frame < ' _ > ] , 
379377    mut  metavar_span :  Span , 
380378    orig_tt :  & TokenTree , 
@@ -412,7 +410,7 @@ fn maybe_use_metavar_location(
412410                && insert ( mspans,  dspan. entire ( ) ,  metavar_span) 
413411        } ) , 
414412    } ; 
415-     if  no_collision || cx . source_map ( ) . is_imported ( metavar_span)  { 
413+     if  no_collision || psess . source_map ( ) . is_imported ( metavar_span)  { 
416414        return  orig_tt. clone ( ) ; 
417415    } 
418416
@@ -573,7 +571,7 @@ fn lockstep_iter_size(
573571/// * `[ $( ${count(foo, 1)} ),* ]` will return an error because `${count(foo, 1)}` is 
574572///   declared inside a single repetition and the index `1` implies two nested repetitions. 
575573fn  count_repetitions < ' a > ( 
576-     cx :  & ExtCtxt < ' a > , 
574+     dcx :  & ' a   DiagCtxt , 
577575    depth_user :  usize , 
578576    mut  matched :  & NamedMatch , 
579577    repeats :  & [ ( usize ,  usize ) ] , 
@@ -610,7 +608,7 @@ fn count_repetitions<'a>(
610608        . and_then ( |el| el. checked_sub ( repeats. len ( ) ) ) 
611609        . unwrap_or_default ( ) ; 
612610    if  depth_user > depth_max { 
613-         return  Err ( out_of_bounds_err ( cx ,  depth_max + 1 ,  sp. entire ( ) ,  "count" ) ) ; 
611+         return  Err ( out_of_bounds_err ( dcx ,  depth_max + 1 ,  sp. entire ( ) ,  "count" ) ) ; 
614612    } 
615613
616614    // `repeats` records all of the nested levels at which we are currently 
@@ -626,15 +624,15 @@ fn count_repetitions<'a>(
626624    } 
627625
628626    if  let  MatchedSingle ( _)  = matched { 
629-         return  Err ( cx . dcx ( ) . create_err ( CountRepetitionMisplaced  {  span :  sp. entire ( )  } ) ) ; 
627+         return  Err ( dcx. create_err ( CountRepetitionMisplaced  {  span :  sp. entire ( )  } ) ) ; 
630628    } 
631629
632630    count ( depth_user,  depth_max,  matched) 
633631} 
634632
635633/// Returns a `NamedMatch` item declared on the LHS given an arbitrary [Ident] 
636634fn  matched_from_ident < ' ctx ,  ' interp ,  ' rslt > ( 
637-     cx :  & ExtCtxt < ' ctx > , 
635+     dcx :  & ' ctx   DiagCtxt , 
638636    ident :  Ident , 
639637    interp :  & ' interp  FxHashMap < MacroRulesNormalizedIdent ,  NamedMatch > , 
640638)  -> PResult < ' ctx ,  & ' rslt  NamedMatch > 
@@ -643,12 +641,12 @@ where
643641{ 
644642    let  span = ident. span ; 
645643    let  key = MacroRulesNormalizedIdent :: new ( ident) ; 
646-     interp. get ( & key) . ok_or_else ( || cx . dcx ( ) . create_err ( MetaVarExprUnrecognizedVar  {  span,  key } ) ) 
644+     interp. get ( & key) . ok_or_else ( || dcx. create_err ( MetaVarExprUnrecognizedVar  {  span,  key } ) ) 
647645} 
648646
649647/// Used by meta-variable expressions when an user input is out of the actual declared bounds. For 
650648/// example, index(999999) in an repetition of only three elements. 
651- fn  out_of_bounds_err < ' a > ( cx :  & ExtCtxt < ' a > ,  max :  usize ,  span :  Span ,  ty :  & str )  -> Diag < ' a >  { 
649+ fn  out_of_bounds_err < ' a > ( dcx :  & ' a   DiagCtxt ,  max :  usize ,  span :  Span ,  ty :  & str )  -> Diag < ' a >  { 
652650    let  msg = if  max == 0  { 
653651        format ! ( 
654652            "meta-variable expression `{ty}` with depth parameter \  
@@ -660,11 +658,11 @@ fn out_of_bounds_err<'a>(cx: &ExtCtxt<'a>, max: usize, span: Span, ty: &str) ->
660658
661659        ) 
662660    } ; 
663-     cx . dcx ( ) . struct_span_err ( span,  msg) 
661+     dcx. struct_span_err ( span,  msg) 
664662} 
665663
666664fn  transcribe_metavar_expr < ' a > ( 
667-     cx :  & ExtCtxt < ' a > , 
665+     dcx :  & ' a   DiagCtxt , 
668666    expr :  & MetaVarExpr , 
669667    interp :  & FxHashMap < MacroRulesNormalizedIdent ,  NamedMatch > , 
670668    marker :  & mut  Marker , 
@@ -679,8 +677,8 @@ fn transcribe_metavar_expr<'a>(
679677    } ; 
680678    match  * expr { 
681679        MetaVarExpr :: Count ( original_ident,  depth)  => { 
682-             let  matched = matched_from_ident ( cx ,  original_ident,  interp) ?; 
683-             let  count = count_repetitions ( cx ,  depth,  matched,  repeats,  sp) ?; 
680+             let  matched = matched_from_ident ( dcx ,  original_ident,  interp) ?; 
681+             let  count = count_repetitions ( dcx ,  depth,  matched,  repeats,  sp) ?; 
684682            let  tt = TokenTree :: token_alone ( 
685683                TokenKind :: lit ( token:: Integer ,  sym:: integer ( count) ,  None ) , 
686684                visited_span ( ) , 
@@ -689,7 +687,7 @@ fn transcribe_metavar_expr<'a>(
689687        } 
690688        MetaVarExpr :: Ignore ( original_ident)  => { 
691689            // Used to ensure that `original_ident` is present in the LHS 
692-             let  _ = matched_from_ident ( cx ,  original_ident,  interp) ?; 
690+             let  _ = matched_from_ident ( dcx ,  original_ident,  interp) ?; 
693691        } 
694692        MetaVarExpr :: Index ( depth)  => match  repeats. iter ( ) . nth_back ( depth)  { 
695693            Some ( ( index,  _) )  => { 
@@ -698,7 +696,7 @@ fn transcribe_metavar_expr<'a>(
698696                    visited_span ( ) , 
699697                ) ) ; 
700698            } 
701-             None  => return  Err ( out_of_bounds_err ( cx ,  repeats. len ( ) ,  sp. entire ( ) ,  "index" ) ) , 
699+             None  => return  Err ( out_of_bounds_err ( dcx ,  repeats. len ( ) ,  sp. entire ( ) ,  "index" ) ) , 
702700        } , 
703701        MetaVarExpr :: Len ( depth)  => match  repeats. iter ( ) . nth_back ( depth)  { 
704702            Some ( ( _,  length) )  => { 
@@ -707,7 +705,7 @@ fn transcribe_metavar_expr<'a>(
707705                    visited_span ( ) , 
708706                ) ) ; 
709707            } 
710-             None  => return  Err ( out_of_bounds_err ( cx ,  repeats. len ( ) ,  sp. entire ( ) ,  "len" ) ) , 
708+             None  => return  Err ( out_of_bounds_err ( dcx ,  repeats. len ( ) ,  sp. entire ( ) ,  "len" ) ) , 
711709        } , 
712710    } 
713711    Ok ( ( ) ) 
0 commit comments