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, _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits