Macros: match const { ... } with expr nonterminal in edition 2024

Co-authored-by: Eric Holk <eric@theincredibleholk.org>
Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
This commit is contained in:
Vincenzo Palazzo 2024-04-16 20:47:10 +02:00 committed by Eric Holk
parent 73303c3b45
commit a55d06323a
No known key found for this signature in database
GPG key ID: 8EA6B43ED4CE0911
4 changed files with 80 additions and 1 deletions

View file

@ -3,6 +3,7 @@ use rustc_ast::token::{self, Delimiter, Nonterminal, Nonterminal::*, Nonterminal
use rustc_ast::HasTokens;
use rustc_ast_pretty::pprust;
use rustc_errors::PResult;
use rustc_span::edition::Edition;
use rustc_span::symbol::{kw, Ident};
use crate::errors::UnexpectedNonterminal;
@ -37,13 +38,19 @@ impl<'a> Parser<'a> {
}
match kind {
NonterminalKind::Expr | NonterminalKind::Expr2021 => {
NonterminalKind::Expr2021 => {
token.can_begin_expr()
// This exception is here for backwards compatibility.
&& !token.is_keyword(kw::Let)
// This exception is here for backwards compatibility.
&& !token.is_keyword(kw::Const)
}
NonterminalKind::Expr => {
token.can_begin_expr()
// This exception is here for backwards compatibility.
&& !token.is_keyword(kw::Let)
&& (token.span.edition() >= Edition::Edition2024 || !token.is_keyword(kw::Const))
}
NonterminalKind::Ty => token.can_begin_type(),
NonterminalKind::Ident => get_macro_ident(token).is_some(),
NonterminalKind::Literal => token.can_begin_literal_maybe_minus(),