[clang] 4075a36 - [clang][NFC] Convert `Parser::CastParseKind` to scoped enum
Vlad Serebrennikov via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 29 20:48:43 PDT 2025
Author: Vlad Serebrennikov
Date: 2025-04-30T06:48:37+03:00
New Revision: 4075a3698a3fdda3a77ce2456e3bfefbc0f0c56e
URL: https://github.com/llvm/llvm-project/commit/4075a3698a3fdda3a77ce2456e3bfefbc0f0c56e
DIFF: https://github.com/llvm/llvm-project/commit/4075a3698a3fdda3a77ce2456e3bfefbc0f0c56e.diff
LOG: [clang][NFC] Convert `Parser::CastParseKind` to scoped enum
Added:
Modified:
clang/include/clang/Parse/Parser.h
clang/lib/Parse/ParseExpr.cpp
clang/lib/Parse/ParseExprCXX.cpp
clang/lib/Parse/ParseOpenMP.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h
index 3a5e42e60fae8..5248cb2219d73 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -104,6 +104,9 @@ enum class ObjCTypeQual {
/// TypeCastState - State whether an expression is or may be a type cast.
enum class TypeCastState { NotTypeCast = 0, MaybeTypeCast, IsTypeCast };
+/// Control what ParseCastExpression will parse.
+enum class CastParseKind { AnyCastExpr = 0, UnaryExprOnly, PrimaryExprOnly };
+
/// Parser - This implements a parser for the C family of languages. After
/// parsing units of the grammar, productions are invoked to handle whatever has
/// been read.
@@ -1888,14 +1891,7 @@ class Parser : public CodeCompletionHandler {
ExprResult ParseExpressionWithLeadingExtension(SourceLocation ExtLoc);
- ExprResult ParseRHSOfBinaryExpression(ExprResult LHS,
- prec::Level MinPrec);
- /// Control what ParseCastExpression will parse.
- enum CastParseKind {
- AnyCastExpr = 0,
- UnaryExprOnly,
- PrimaryExprOnly
- };
+ ExprResult ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec);
bool isRevertibleTypeTrait(const IdentifierInfo *Id,
clang::tok::TokenKind *Kind = nullptr);
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 2013386a1ea53..8c821ef0c95bf 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp
@@ -157,7 +157,7 @@ Parser::ParseExpressionWithLeadingExtension(SourceLocation ExtLoc) {
// Silence extension warnings in the sub-expression
ExtensionRAIIObject O(Diags);
- LHS = ParseCastExpression(AnyCastExpr);
+ LHS = ParseCastExpression(CastParseKind::AnyCastExpr);
}
if (!LHS.isInvalid())
@@ -181,9 +181,9 @@ ExprResult Parser::ParseAssignmentExpression(TypeCastState isTypeCast) {
if (Tok.is(tok::kw_co_yield))
return ParseCoyieldExpression();
- ExprResult LHS = ParseCastExpression(AnyCastExpr,
- /*isAddressOfOperand=*/false,
- isTypeCast);
+ ExprResult LHS =
+ ParseCastExpression(CastParseKind::AnyCastExpr,
+ /*isAddressOfOperand=*/false, isTypeCast);
return ParseRHSOfBinaryExpression(LHS, prec::Assignment);
}
@@ -195,8 +195,9 @@ ExprResult Parser::ParseConditionalExpression() {
return ExprError();
}
- ExprResult LHS = ParseCastExpression(
- AnyCastExpr, /*isAddressOfOperand=*/false, TypeCastState::NotTypeCast);
+ ExprResult LHS = ParseCastExpression(CastParseKind::AnyCastExpr,
+ /*isAddressOfOperand=*/false,
+ TypeCastState::NotTypeCast);
return ParseRHSOfBinaryExpression(LHS, prec::Conditional);
}
@@ -227,7 +228,8 @@ Parser::ParseConstantExpressionInExprEvalContext(TypeCastState isTypeCast) {
Sema::ExpressionEvaluationContext::ConstantEvaluated &&
"Call this function only if your ExpressionEvaluationContext is "
"already ConstantEvaluated");
- ExprResult LHS(ParseCastExpression(AnyCastExpr, false, isTypeCast));
+ ExprResult LHS(
+ ParseCastExpression(CastParseKind::AnyCastExpr, false, isTypeCast));
ExprResult Res(ParseRHSOfBinaryExpression(LHS, prec::Conditional));
return Actions.ActOnConstantExpression(Res);
}
@@ -273,8 +275,8 @@ ExprResult Parser::ParseArrayBoundExpression() {
ExprResult Parser::ParseCaseExpression(SourceLocation CaseLoc) {
EnterExpressionEvaluationContext ConstantEvaluated(
Actions, Sema::ExpressionEvaluationContext::ConstantEvaluated);
- ExprResult LHS(
- ParseCastExpression(AnyCastExpr, false, TypeCastState::NotTypeCast));
+ ExprResult LHS(ParseCastExpression(CastParseKind::AnyCastExpr, false,
+ TypeCastState::NotTypeCast));
ExprResult Res(ParseRHSOfBinaryExpression(LHS, prec::Conditional));
return Actions.ActOnCaseExpr(CaseLoc, Res);
}
@@ -288,7 +290,7 @@ ExprResult Parser::ParseCaseExpression(SourceLocation CaseLoc) {
ExprResult Parser::ParseConstraintExpression() {
EnterExpressionEvaluationContext ConstantEvaluated(
Actions, Sema::ExpressionEvaluationContext::Unevaluated);
- ExprResult LHS(ParseCastExpression(AnyCastExpr));
+ ExprResult LHS(ParseCastExpression(CastParseKind::AnyCastExpr));
ExprResult Res(ParseRHSOfBinaryExpression(LHS, prec::LogicalOr));
if (Res.isUsable() && !Actions.CheckConstraintExpression(Res.get())) {
Actions.CorrectDelayedTyposInExpr(Res);
@@ -313,7 +315,7 @@ Parser::ParseConstraintLogicalAndExpression(bool IsTrailingRequiresClause) {
bool NotPrimaryExpression = false;
auto ParsePrimary = [&]() {
ExprResult E =
- ParseCastExpression(PrimaryExprOnly,
+ ParseCastExpression(CastParseKind::PrimaryExprOnly,
/*isAddressOfOperand=*/false,
/*isTypeCast=*/TypeCastState::NotTypeCast,
/*isVectorLiteral=*/false, &NotPrimaryExpression);
@@ -592,7 +594,7 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
} else if (getLangOpts().CPlusPlus && NextTokPrec <= prec::Conditional)
RHS = ParseAssignmentExpression();
else
- RHS = ParseCastExpression(AnyCastExpr);
+ RHS = ParseCastExpression(CastParseKind::AnyCastExpr);
if (RHS.isInvalid()) {
// FIXME: Errors generated by the delayed typo correction should be
@@ -1452,7 +1454,8 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
// an ambiguous cast expression, such as "(T())++", then we recurse to
// determine whether the '++' is prefix or postfix.
Res = ParseCastExpression(
- getLangOpts().CPlusPlus ? UnaryExprOnly : AnyCastExpr,
+ getLangOpts().CPlusPlus ? CastParseKind::UnaryExprOnly
+ : CastParseKind::AnyCastExpr,
/*isAddressOfOperand*/ false, NotCastExpr, TypeCastState::NotTypeCast);
if (NotCastExpr) {
// If we return with NotCastExpr = true, we must not consume any tokens,
@@ -1478,7 +1481,8 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
SourceLocation SavedLoc = ConsumeToken();
PreferredType.enterUnary(Actions, Tok.getLocation(), tok::amp, SavedLoc);
- Res = ParseCastExpression(AnyCastExpr, /*isAddressOfOperand=*/true);
+ Res = ParseCastExpression(CastParseKind::AnyCastExpr,
+ /*isAddressOfOperand=*/true);
if (!Res.isInvalid()) {
Expr *Arg = Res.get();
Res = Actions.ActOnUnaryOp(getCurScope(), SavedLoc, SavedKind, Arg);
@@ -1500,7 +1504,7 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
*NotPrimaryExpression = true;
SourceLocation SavedLoc = ConsumeToken();
PreferredType.enterUnary(Actions, Tok.getLocation(), SavedKind, SavedLoc);
- Res = ParseCastExpression(AnyCastExpr);
+ Res = ParseCastExpression(CastParseKind::AnyCastExpr);
if (!Res.isInvalid()) {
Expr *Arg = Res.get();
Res = Actions.ActOnUnaryOp(getCurScope(), SavedLoc, SavedKind, Arg,
@@ -1515,7 +1519,7 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
if (NotPrimaryExpression)
*NotPrimaryExpression = true;
SourceLocation CoawaitLoc = ConsumeToken();
- Res = ParseCastExpression(AnyCastExpr);
+ Res = ParseCastExpression(CastParseKind::AnyCastExpr);
if (!Res.isInvalid())
Res = Actions.ActOnCoawaitExpr(getCurScope(), CoawaitLoc, Res.get());
return Res;
@@ -1527,7 +1531,7 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
*NotPrimaryExpression = true;
ExtensionRAIIObject O(Diags); // Use RAII to do this.
SourceLocation SavedLoc = ConsumeToken();
- Res = ParseCastExpression(AnyCastExpr);
+ Res = ParseCastExpression(CastParseKind::AnyCastExpr);
if (!Res.isInvalid())
Res = Actions.ActOnUnaryOp(getCurScope(), SavedLoc, SavedKind, Res.get());
return Res;
@@ -1921,7 +1925,7 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
// are compiling for OpenCL, we need to return an error as this implies
// that the address of the function is being taken, which is illegal in CL.
- if (ParseKind == PrimaryExprOnly)
+ if (ParseKind == CastParseKind::PrimaryExprOnly)
// This is strictly a primary-expression - no postfix-expr pieces should be
// parsed.
return Res;
@@ -2515,10 +2519,10 @@ Parser::ParseExprAfterUnaryExprOrTypeTrait(const Token &OpTok,
Tok.isOneOf(tok::kw_sizeof, tok::kw___datasizeof, tok::kw___alignof,
tok::kw_alignof, tok::kw__Alignof, tok::kw__Countof))
Actions.runWithSufficientStackSpace(Tok.getLocation(), [&] {
- Operand = ParseCastExpression(UnaryExprOnly);
+ Operand = ParseCastExpression(CastParseKind::UnaryExprOnly);
});
else
- Operand = ParseCastExpression(UnaryExprOnly);
+ Operand = ParseCastExpression(CastParseKind::UnaryExprOnly);
} else {
// If it starts with a '(', we know that it is either a parenthesized
// type-name, or it is a unary-expression that starts with a compound
@@ -3177,7 +3181,7 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
RParenLoc = T.getCloseLocation();
PreferredType.enterTypeCast(Tok.getLocation(), Ty.get().get());
- ExprResult SubExpr = ParseCastExpression(AnyCastExpr);
+ ExprResult SubExpr = ParseCastExpression(CastParseKind::AnyCastExpr);
if (Ty.isInvalid() || SubExpr.isInvalid())
return ExprError();
@@ -3259,11 +3263,11 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
// Parse the cast-expression that follows it next.
// isVectorLiteral = true will make sure we don't parse any
// Postfix expression yet
- Result =
- ParseCastExpression(/*isUnaryExpression=*/AnyCastExpr,
- /*isAddressOfOperand=*/false,
- /*isTypeCast=*/TypeCastState::IsTypeCast,
- /*isVectorLiteral=*/true);
+ Result = ParseCastExpression(
+ /*isUnaryExpression=*/CastParseKind::AnyCastExpr,
+ /*isAddressOfOperand=*/false,
+ /*isTypeCast=*/TypeCastState::IsTypeCast,
+ /*isVectorLiteral=*/true);
if (!Result.isInvalid()) {
Result = Actions.ActOnCastExpr(getCurScope(), OpenLoc,
@@ -3312,9 +3316,10 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
PreferredType.enterTypeCast(Tok.getLocation(), CastTy.get());
// Parse the cast-expression that follows it next.
// TODO: For cast expression with CastTy.
- Result = ParseCastExpression(/*isUnaryExpression=*/AnyCastExpr,
- /*isAddressOfOperand=*/false,
- /*isTypeCast=*/TypeCastState::IsTypeCast);
+ Result = ParseCastExpression(
+ /*isUnaryExpression=*/CastParseKind::AnyCastExpr,
+ /*isAddressOfOperand=*/false,
+ /*isTypeCast=*/TypeCastState::IsTypeCast);
if (!Result.isInvalid()) {
Result = Actions.ActOnCastExpr(getCurScope(), OpenLoc,
DeclaratorInfo, CastTy,
diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp
index 400d5354fd7cc..a11af84274dc1 100644
--- a/clang/lib/Parse/ParseExprCXX.cpp
+++ b/clang/lib/Parse/ParseExprCXX.cpp
@@ -3597,7 +3597,7 @@ Parser::ParseCXXDeleteExpression(bool UseGlobal, SourceLocation Start) {
return ExprError();
}
- ExprResult Operand(ParseCastExpression(AnyCastExpr));
+ ExprResult Operand(ParseCastExpression(CastParseKind::AnyCastExpr));
if (Operand.isInvalid())
return Operand;
@@ -4132,8 +4132,8 @@ Parser::ParseCXXAmbiguousParenExpression(ParenParseOption &ExprType,
// If it is not a cast-expression, NotCastExpr will be true and no token
// will be consumed.
ColonProt.restore();
- Result = ParseCastExpression(AnyCastExpr, false /*isAddressofOperand*/,
- NotCastExpr,
+ Result = ParseCastExpression(CastParseKind::AnyCastExpr,
+ false /*isAddressofOperand*/, NotCastExpr,
// type-id has priority.
TypeCastState::IsTypeCast);
}
diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp
index 72e808f5fac9a..6fe2137435cd3 100644
--- a/clang/lib/Parse/ParseOpenMP.cpp
+++ b/clang/lib/Parse/ParseOpenMP.cpp
@@ -3552,7 +3552,8 @@ ExprResult Parser::ParseOpenMPParensExpr(StringRef ClauseName,
return ExprError();
SourceLocation ELoc = Tok.getLocation();
- ExprResult LHS(ParseCastExpression(AnyCastExpr, IsAddressOfOperand,
+ ExprResult LHS(ParseCastExpression(CastParseKind::AnyCastExpr,
+ IsAddressOfOperand,
TypeCastState::NotTypeCast));
ExprResult Val(ParseRHSOfBinaryExpression(LHS, prec::Conditional));
Val = Actions.ActOnFinishFullExpr(Val.get(), ELoc, /*DiscardedValue*/ false);
@@ -3704,7 +3705,7 @@ bool Parser::ParseOMPInteropInfo(OMPInteropInfo &InteropInfo,
while (Tok.isNot(tok::r_paren)) {
SourceLocation Loc = Tok.getLocation();
- ExprResult LHS = ParseCastExpression(AnyCastExpr);
+ ExprResult LHS = ParseCastExpression(CastParseKind::AnyCastExpr);
ExprResult PTExpr = Actions.CorrectDelayedTyposInExpr(
ParseRHSOfBinaryExpression(LHS, prec::Conditional));
PTExpr = Actions.ActOnFinishFullExpr(PTExpr.get(), Loc,
@@ -4188,8 +4189,8 @@ OMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind,
Kind == OMPC_grainsize || Kind == OMPC_num_tasks;
if (NeedAnExpression) {
SourceLocation ELoc = Tok.getLocation();
- ExprResult LHS(
- ParseCastExpression(AnyCastExpr, false, TypeCastState::NotTypeCast));
+ ExprResult LHS(ParseCastExpression(CastParseKind::AnyCastExpr, false,
+ TypeCastState::NotTypeCast));
Val = ParseRHSOfBinaryExpression(LHS, prec::Conditional);
Val =
Actions.ActOnFinishFullExpr(Val.get(), ELoc, /*DiscardedValue*/ false);
@@ -4480,7 +4481,7 @@ ExprResult Parser::ParseOpenMPIteratorsExpr() {
ColonProtectionRAIIObject ColonRAII(*this);
// Parse <begin>
SourceLocation Loc = Tok.getLocation();
- ExprResult LHS = ParseCastExpression(AnyCastExpr);
+ ExprResult LHS = ParseCastExpression(CastParseKind::AnyCastExpr);
ExprResult Begin = Actions.CorrectDelayedTyposInExpr(
ParseRHSOfBinaryExpression(LHS, prec::Conditional));
Begin = Actions.ActOnFinishFullExpr(Begin.get(), Loc,
@@ -4492,7 +4493,7 @@ ExprResult Parser::ParseOpenMPIteratorsExpr() {
// Parse <end>
Loc = Tok.getLocation();
- LHS = ParseCastExpression(AnyCastExpr);
+ LHS = ParseCastExpression(CastParseKind::AnyCastExpr);
ExprResult End = Actions.CorrectDelayedTyposInExpr(
ParseRHSOfBinaryExpression(LHS, prec::Conditional));
End = Actions.ActOnFinishFullExpr(End.get(), Loc,
@@ -4506,7 +4507,7 @@ ExprResult Parser::ParseOpenMPIteratorsExpr() {
SecColonLoc = ConsumeToken();
// Parse <step>
Loc = Tok.getLocation();
- LHS = ParseCastExpression(AnyCastExpr);
+ LHS = ParseCastExpression(CastParseKind::AnyCastExpr);
Step = Actions.CorrectDelayedTyposInExpr(
ParseRHSOfBinaryExpression(LHS, prec::Conditional));
Step = Actions.ActOnFinishFullExpr(Step.get(), Loc,
More information about the cfe-commits
mailing list