Detect attempts to expand a macro to a match arm again

Because a macro invocation can expand to a never pattern, we can't rule
out a `arm!(),` arm at parse time. Instead we detect that case at
expansion time, if the macro tries to output a pattern followed by `=>`.
This commit is contained in:
Nadrieril 2023-11-27 00:50:51 +01:00
parent 80bdcbf50a
commit 0bfebc6105
8 changed files with 27 additions and 29 deletions

View file

@ -155,11 +155,7 @@ impl<'a> Parser<'a> {
Err(err) => return Err(err),
};
if rc == RecoverComma::Yes && !first_pat.could_be_never_pattern() {
self.maybe_recover_unexpected_comma(
first_pat.span,
matches!(first_pat.kind, PatKind::MacCall(_)),
rt,
)?;
self.maybe_recover_unexpected_comma(first_pat.span, rt)?;
}
// If the next token is not a `|`,
@ -201,7 +197,7 @@ impl<'a> Parser<'a> {
err
})?;
if rc == RecoverComma::Yes && !pat.could_be_never_pattern() {
self.maybe_recover_unexpected_comma(pat.span, false, rt)?;
self.maybe_recover_unexpected_comma(pat.span, rt)?;
}
pats.push(pat);
}