Skip to content

Commit 7061eda

Browse files
authored
Rollup merge of #95531 - petrochenkov:metacount, r=nnethercote
expand: Do not count metavar declarations on RHS of `macro_rules` They are 0 by definition there. Addresses #95425 (comment) r? `@nnethercote`
2 parents 6facf7a + 9ab4f73 commit 7061eda

File tree

2 files changed

+10
-15
lines changed

2 files changed

+10
-15
lines changed

compiler/rustc_expand/src/mbe/macro_parser.rs

+6-12
Original file line numberDiff line numberDiff line change
@@ -263,18 +263,12 @@ crate type NamedParseResult = ParseResult<FxHashMap<MacroRulesNormalizedIdent, N
263263
pub(super) fn count_metavar_decls(matcher: &[TokenTree]) -> usize {
264264
matcher
265265
.iter()
266-
.map(|tt| {
267-
match tt {
268-
TokenTree::Delimited(_, delim) => count_metavar_decls(delim.inner_tts()),
269-
TokenTree::MetaVar(..) => 0,
270-
TokenTree::MetaVarDecl(..) => 1,
271-
// RHS meta-variable expressions eventually end-up here. `0` is returned to inform
272-
// that no meta-variable was found, because "meta-variables" != "meta-variable
273-
// expressions".
274-
TokenTree::MetaVarExpr(..) => 0,
275-
TokenTree::Sequence(_, seq) => seq.num_captures,
276-
TokenTree::Token(..) => 0,
277-
}
266+
.map(|tt| match tt {
267+
TokenTree::MetaVarDecl(..) => 1,
268+
TokenTree::Sequence(_, seq) => seq.num_captures,
269+
TokenTree::Delimited(_, delim) => count_metavar_decls(delim.inner_tts()),
270+
TokenTree::Token(..) => 0,
271+
TokenTree::MetaVar(..) | TokenTree::MetaVarExpr(..) => unreachable!(),
278272
})
279273
.sum()
280274
}

compiler/rustc_expand/src/mbe/quoted.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::mbe::macro_parser;
1+
use crate::mbe::macro_parser::count_metavar_decls;
22
use crate::mbe::{Delimited, KleeneOp, KleeneToken, MetaVarExpr, SequenceRepetition, TokenTree};
33

44
use rustc_ast::token::{self, Token};
@@ -211,14 +211,15 @@ fn parse_tree(
211211
let (separator, kleene) =
212212
parse_sep_and_kleene_op(&mut trees, delim_span.entire(), sess);
213213
// Count the number of captured "names" (i.e., named metavars)
214-
let name_captures = macro_parser::count_metavar_decls(&sequence);
214+
let num_captures =
215+
if parsing_patterns { count_metavar_decls(&sequence) } else { 0 };
215216
TokenTree::Sequence(
216217
delim_span,
217218
Lrc::new(SequenceRepetition {
218219
tts: sequence,
219220
separator,
220221
kleene,
221-
num_captures: name_captures,
222+
num_captures,
222223
}),
223224
)
224225
}

0 commit comments

Comments
 (0)