diff options
| author | Dylan DPC <99973273+Dylan-DPC@users.noreply.github.com> | 2022-03-22 19:07:33 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-22 19:07:33 +0100 |
| commit | 7c380939517de8f3bddd2ed850a6dfdd6d8fcb49 (patch) | |
| tree | 31839e7e6af4c9a02adfe6cc6a2756162213590d | |
| parent | 3ea44938e21f0de8ae7d4f6399a8a30f97867c70 (diff) | |
| parent | 74e7313e0e425260da26a61e8ee8bbf80a65f014 (diff) | |
| download | rust-7c380939517de8f3bddd2ed850a6dfdd6d8fcb49.tar.gz rust-7c380939517de8f3bddd2ed850a6dfdd6d8fcb49.zip | |
Rollup merge of #95188 - c410-f3r:aqui-vamos-nos, r=petrochenkov
[`macro-metavar-expr`] Fix generated tokens hygiene Only uses `Marker` on generated tokens -> https://github.com/rust-lang/rust/issues/83527#issuecomment-1074439425) I really don't know how to test this PR r? `@petrochenkov`
| -rw-r--r-- | compiler/rustc_expand/src/mbe/transcribe.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/compiler/rustc_expand/src/mbe/transcribe.rs b/compiler/rustc_expand/src/mbe/transcribe.rs index 5ec63739cf5..e8a1e61376f 100644 --- a/compiler/rustc_expand/src/mbe/transcribe.rs +++ b/compiler/rustc_expand/src/mbe/transcribe.rs @@ -257,7 +257,7 @@ pub(super) fn transcribe<'a>( // Replace meta-variable expressions with the result of their expansion. mbe::TokenTree::MetaVarExpr(sp, expr) => { - transcribe_metavar_expr(cx, expr, interp, &repeats, &mut result, &sp)?; + transcribe_metavar_expr(cx, expr, interp, &mut marker, &repeats, &mut result, &sp)?; } // If we are entering a new delimiter, we push its contents to the `stack` to be @@ -513,17 +513,23 @@ fn transcribe_metavar_expr<'a>( cx: &ExtCtxt<'a>, expr: MetaVarExpr, interp: &FxHashMap<MacroRulesNormalizedIdent, NamedMatch>, + marker: &mut Marker, repeats: &[(usize, usize)], result: &mut Vec<TreeAndSpacing>, sp: &DelimSpan, ) -> PResult<'a, ()> { + let mut visited_span = || { + let mut span = sp.entire(); + marker.visit_span(&mut span); + span + }; match expr { MetaVarExpr::Count(original_ident, depth_opt) => { let matched = matched_from_ident(cx, original_ident, interp)?; let count = count_repetitions(cx, depth_opt, matched, &repeats, sp)?; let tt = TokenTree::token( TokenKind::lit(token::Integer, sym::integer(count), None), - sp.entire(), + visited_span(), ); result.push(tt.into()); } @@ -536,7 +542,7 @@ fn transcribe_metavar_expr<'a>( result.push( TokenTree::token( TokenKind::lit(token::Integer, sym::integer(*index), None), - sp.entire(), + visited_span(), ) .into(), ); @@ -548,7 +554,7 @@ fn transcribe_metavar_expr<'a>( result.push( TokenTree::token( TokenKind::lit(token::Integer, sym::integer(*length), None), - sp.entire(), + visited_span(), ) .into(), ); |
