Skip to content

Commit 4075a36

Browse files
committed
[clang][NFC] Convert Parser::CastParseKind to scoped enum
1 parent dc87d21 commit 4075a36

File tree

4 files changed

+49
-47
lines changed

4 files changed

+49
-47
lines changed

clang/include/clang/Parse/Parser.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ enum class ObjCTypeQual {
104104
/// TypeCastState - State whether an expression is or may be a type cast.
105105
enum class TypeCastState { NotTypeCast = 0, MaybeTypeCast, IsTypeCast };
106106

107+
/// Control what ParseCastExpression will parse.
108+
enum class CastParseKind { AnyCastExpr = 0, UnaryExprOnly, PrimaryExprOnly };
109+
107110
/// Parser - This implements a parser for the C family of languages. After
108111
/// parsing units of the grammar, productions are invoked to handle whatever has
109112
/// been read.
@@ -1888,14 +1891,7 @@ class Parser : public CodeCompletionHandler {
18881891

18891892
ExprResult ParseExpressionWithLeadingExtension(SourceLocation ExtLoc);
18901893

1891-
ExprResult ParseRHSOfBinaryExpression(ExprResult LHS,
1892-
prec::Level MinPrec);
1893-
/// Control what ParseCastExpression will parse.
1894-
enum CastParseKind {
1895-
AnyCastExpr = 0,
1896-
UnaryExprOnly,
1897-
PrimaryExprOnly
1898-
};
1894+
ExprResult ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec);
18991895

19001896
bool isRevertibleTypeTrait(const IdentifierInfo *Id,
19011897
clang::tok::TokenKind *Kind = nullptr);

clang/lib/Parse/ParseExpr.cpp

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ Parser::ParseExpressionWithLeadingExtension(SourceLocation ExtLoc) {
157157
// Silence extension warnings in the sub-expression
158158
ExtensionRAIIObject O(Diags);
159159

160-
LHS = ParseCastExpression(AnyCastExpr);
160+
LHS = ParseCastExpression(CastParseKind::AnyCastExpr);
161161
}
162162

163163
if (!LHS.isInvalid())
@@ -181,9 +181,9 @@ ExprResult Parser::ParseAssignmentExpression(TypeCastState isTypeCast) {
181181
if (Tok.is(tok::kw_co_yield))
182182
return ParseCoyieldExpression();
183183

184-
ExprResult LHS = ParseCastExpression(AnyCastExpr,
185-
/*isAddressOfOperand=*/false,
186-
isTypeCast);
184+
ExprResult LHS =
185+
ParseCastExpression(CastParseKind::AnyCastExpr,
186+
/*isAddressOfOperand=*/false, isTypeCast);
187187
return ParseRHSOfBinaryExpression(LHS, prec::Assignment);
188188
}
189189

@@ -195,8 +195,9 @@ ExprResult Parser::ParseConditionalExpression() {
195195
return ExprError();
196196
}
197197

198-
ExprResult LHS = ParseCastExpression(
199-
AnyCastExpr, /*isAddressOfOperand=*/false, TypeCastState::NotTypeCast);
198+
ExprResult LHS = ParseCastExpression(CastParseKind::AnyCastExpr,
199+
/*isAddressOfOperand=*/false,
200+
TypeCastState::NotTypeCast);
200201
return ParseRHSOfBinaryExpression(LHS, prec::Conditional);
201202
}
202203

@@ -227,7 +228,8 @@ Parser::ParseConstantExpressionInExprEvalContext(TypeCastState isTypeCast) {
227228
Sema::ExpressionEvaluationContext::ConstantEvaluated &&
228229
"Call this function only if your ExpressionEvaluationContext is "
229230
"already ConstantEvaluated");
230-
ExprResult LHS(ParseCastExpression(AnyCastExpr, false, isTypeCast));
231+
ExprResult LHS(
232+
ParseCastExpression(CastParseKind::AnyCastExpr, false, isTypeCast));
231233
ExprResult Res(ParseRHSOfBinaryExpression(LHS, prec::Conditional));
232234
return Actions.ActOnConstantExpression(Res);
233235
}
@@ -273,8 +275,8 @@ ExprResult Parser::ParseArrayBoundExpression() {
273275
ExprResult Parser::ParseCaseExpression(SourceLocation CaseLoc) {
274276
EnterExpressionEvaluationContext ConstantEvaluated(
275277
Actions, Sema::ExpressionEvaluationContext::ConstantEvaluated);
276-
ExprResult LHS(
277-
ParseCastExpression(AnyCastExpr, false, TypeCastState::NotTypeCast));
278+
ExprResult LHS(ParseCastExpression(CastParseKind::AnyCastExpr, false,
279+
TypeCastState::NotTypeCast));
278280
ExprResult Res(ParseRHSOfBinaryExpression(LHS, prec::Conditional));
279281
return Actions.ActOnCaseExpr(CaseLoc, Res);
280282
}
@@ -288,7 +290,7 @@ ExprResult Parser::ParseCaseExpression(SourceLocation CaseLoc) {
288290
ExprResult Parser::ParseConstraintExpression() {
289291
EnterExpressionEvaluationContext ConstantEvaluated(
290292
Actions, Sema::ExpressionEvaluationContext::Unevaluated);
291-
ExprResult LHS(ParseCastExpression(AnyCastExpr));
293+
ExprResult LHS(ParseCastExpression(CastParseKind::AnyCastExpr));
292294
ExprResult Res(ParseRHSOfBinaryExpression(LHS, prec::LogicalOr));
293295
if (Res.isUsable() && !Actions.CheckConstraintExpression(Res.get())) {
294296
Actions.CorrectDelayedTyposInExpr(Res);
@@ -313,7 +315,7 @@ Parser::ParseConstraintLogicalAndExpression(bool IsTrailingRequiresClause) {
313315
bool NotPrimaryExpression = false;
314316
auto ParsePrimary = [&]() {
315317
ExprResult E =
316-
ParseCastExpression(PrimaryExprOnly,
318+
ParseCastExpression(CastParseKind::PrimaryExprOnly,
317319
/*isAddressOfOperand=*/false,
318320
/*isTypeCast=*/TypeCastState::NotTypeCast,
319321
/*isVectorLiteral=*/false, &NotPrimaryExpression);
@@ -592,7 +594,7 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
592594
} else if (getLangOpts().CPlusPlus && NextTokPrec <= prec::Conditional)
593595
RHS = ParseAssignmentExpression();
594596
else
595-
RHS = ParseCastExpression(AnyCastExpr);
597+
RHS = ParseCastExpression(CastParseKind::AnyCastExpr);
596598

597599
if (RHS.isInvalid()) {
598600
// FIXME: Errors generated by the delayed typo correction should be
@@ -1452,7 +1454,8 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
14521454
// an ambiguous cast expression, such as "(T())++", then we recurse to
14531455
// determine whether the '++' is prefix or postfix.
14541456
Res = ParseCastExpression(
1455-
getLangOpts().CPlusPlus ? UnaryExprOnly : AnyCastExpr,
1457+
getLangOpts().CPlusPlus ? CastParseKind::UnaryExprOnly
1458+
: CastParseKind::AnyCastExpr,
14561459
/*isAddressOfOperand*/ false, NotCastExpr, TypeCastState::NotTypeCast);
14571460
if (NotCastExpr) {
14581461
// If we return with NotCastExpr = true, we must not consume any tokens,
@@ -1478,7 +1481,8 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
14781481
SourceLocation SavedLoc = ConsumeToken();
14791482
PreferredType.enterUnary(Actions, Tok.getLocation(), tok::amp, SavedLoc);
14801483

1481-
Res = ParseCastExpression(AnyCastExpr, /*isAddressOfOperand=*/true);
1484+
Res = ParseCastExpression(CastParseKind::AnyCastExpr,
1485+
/*isAddressOfOperand=*/true);
14821486
if (!Res.isInvalid()) {
14831487
Expr *Arg = Res.get();
14841488
Res = Actions.ActOnUnaryOp(getCurScope(), SavedLoc, SavedKind, Arg);
@@ -1500,7 +1504,7 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
15001504
*NotPrimaryExpression = true;
15011505
SourceLocation SavedLoc = ConsumeToken();
15021506
PreferredType.enterUnary(Actions, Tok.getLocation(), SavedKind, SavedLoc);
1503-
Res = ParseCastExpression(AnyCastExpr);
1507+
Res = ParseCastExpression(CastParseKind::AnyCastExpr);
15041508
if (!Res.isInvalid()) {
15051509
Expr *Arg = Res.get();
15061510
Res = Actions.ActOnUnaryOp(getCurScope(), SavedLoc, SavedKind, Arg,
@@ -1515,7 +1519,7 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
15151519
if (NotPrimaryExpression)
15161520
*NotPrimaryExpression = true;
15171521
SourceLocation CoawaitLoc = ConsumeToken();
1518-
Res = ParseCastExpression(AnyCastExpr);
1522+
Res = ParseCastExpression(CastParseKind::AnyCastExpr);
15191523
if (!Res.isInvalid())
15201524
Res = Actions.ActOnCoawaitExpr(getCurScope(), CoawaitLoc, Res.get());
15211525
return Res;
@@ -1527,7 +1531,7 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
15271531
*NotPrimaryExpression = true;
15281532
ExtensionRAIIObject O(Diags); // Use RAII to do this.
15291533
SourceLocation SavedLoc = ConsumeToken();
1530-
Res = ParseCastExpression(AnyCastExpr);
1534+
Res = ParseCastExpression(CastParseKind::AnyCastExpr);
15311535
if (!Res.isInvalid())
15321536
Res = Actions.ActOnUnaryOp(getCurScope(), SavedLoc, SavedKind, Res.get());
15331537
return Res;
@@ -1921,7 +1925,7 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
19211925
// are compiling for OpenCL, we need to return an error as this implies
19221926
// that the address of the function is being taken, which is illegal in CL.
19231927

1924-
if (ParseKind == PrimaryExprOnly)
1928+
if (ParseKind == CastParseKind::PrimaryExprOnly)
19251929
// This is strictly a primary-expression - no postfix-expr pieces should be
19261930
// parsed.
19271931
return Res;
@@ -2515,10 +2519,10 @@ Parser::ParseExprAfterUnaryExprOrTypeTrait(const Token &OpTok,
25152519
Tok.isOneOf(tok::kw_sizeof, tok::kw___datasizeof, tok::kw___alignof,
25162520
tok::kw_alignof, tok::kw__Alignof, tok::kw__Countof))
25172521
Actions.runWithSufficientStackSpace(Tok.getLocation(), [&] {
2518-
Operand = ParseCastExpression(UnaryExprOnly);
2522+
Operand = ParseCastExpression(CastParseKind::UnaryExprOnly);
25192523
});
25202524
else
2521-
Operand = ParseCastExpression(UnaryExprOnly);
2525+
Operand = ParseCastExpression(CastParseKind::UnaryExprOnly);
25222526
} else {
25232527
// If it starts with a '(', we know that it is either a parenthesized
25242528
// type-name, or it is a unary-expression that starts with a compound
@@ -3177,7 +3181,7 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
31773181
RParenLoc = T.getCloseLocation();
31783182

31793183
PreferredType.enterTypeCast(Tok.getLocation(), Ty.get().get());
3180-
ExprResult SubExpr = ParseCastExpression(AnyCastExpr);
3184+
ExprResult SubExpr = ParseCastExpression(CastParseKind::AnyCastExpr);
31813185

31823186
if (Ty.isInvalid() || SubExpr.isInvalid())
31833187
return ExprError();
@@ -3259,11 +3263,11 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
32593263
// Parse the cast-expression that follows it next.
32603264
// isVectorLiteral = true will make sure we don't parse any
32613265
// Postfix expression yet
3262-
Result =
3263-
ParseCastExpression(/*isUnaryExpression=*/AnyCastExpr,
3264-
/*isAddressOfOperand=*/false,
3265-
/*isTypeCast=*/TypeCastState::IsTypeCast,
3266-
/*isVectorLiteral=*/true);
3266+
Result = ParseCastExpression(
3267+
/*isUnaryExpression=*/CastParseKind::AnyCastExpr,
3268+
/*isAddressOfOperand=*/false,
3269+
/*isTypeCast=*/TypeCastState::IsTypeCast,
3270+
/*isVectorLiteral=*/true);
32673271

32683272
if (!Result.isInvalid()) {
32693273
Result = Actions.ActOnCastExpr(getCurScope(), OpenLoc,
@@ -3312,9 +3316,10 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
33123316
PreferredType.enterTypeCast(Tok.getLocation(), CastTy.get());
33133317
// Parse the cast-expression that follows it next.
33143318
// TODO: For cast expression with CastTy.
3315-
Result = ParseCastExpression(/*isUnaryExpression=*/AnyCastExpr,
3316-
/*isAddressOfOperand=*/false,
3317-
/*isTypeCast=*/TypeCastState::IsTypeCast);
3319+
Result = ParseCastExpression(
3320+
/*isUnaryExpression=*/CastParseKind::AnyCastExpr,
3321+
/*isAddressOfOperand=*/false,
3322+
/*isTypeCast=*/TypeCastState::IsTypeCast);
33183323
if (!Result.isInvalid()) {
33193324
Result = Actions.ActOnCastExpr(getCurScope(), OpenLoc,
33203325
DeclaratorInfo, CastTy,

clang/lib/Parse/ParseExprCXX.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3597,7 +3597,7 @@ Parser::ParseCXXDeleteExpression(bool UseGlobal, SourceLocation Start) {
35973597
return ExprError();
35983598
}
35993599

3600-
ExprResult Operand(ParseCastExpression(AnyCastExpr));
3600+
ExprResult Operand(ParseCastExpression(CastParseKind::AnyCastExpr));
36013601
if (Operand.isInvalid())
36023602
return Operand;
36033603

@@ -4132,8 +4132,8 @@ Parser::ParseCXXAmbiguousParenExpression(ParenParseOption &ExprType,
41324132
// If it is not a cast-expression, NotCastExpr will be true and no token
41334133
// will be consumed.
41344134
ColonProt.restore();
4135-
Result = ParseCastExpression(AnyCastExpr, false /*isAddressofOperand*/,
4136-
NotCastExpr,
4135+
Result = ParseCastExpression(CastParseKind::AnyCastExpr,
4136+
false /*isAddressofOperand*/, NotCastExpr,
41374137
// type-id has priority.
41384138
TypeCastState::IsTypeCast);
41394139
}

clang/lib/Parse/ParseOpenMP.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3552,7 +3552,8 @@ ExprResult Parser::ParseOpenMPParensExpr(StringRef ClauseName,
35523552
return ExprError();
35533553

35543554
SourceLocation ELoc = Tok.getLocation();
3555-
ExprResult LHS(ParseCastExpression(AnyCastExpr, IsAddressOfOperand,
3555+
ExprResult LHS(ParseCastExpression(CastParseKind::AnyCastExpr,
3556+
IsAddressOfOperand,
35563557
TypeCastState::NotTypeCast));
35573558
ExprResult Val(ParseRHSOfBinaryExpression(LHS, prec::Conditional));
35583559
Val = Actions.ActOnFinishFullExpr(Val.get(), ELoc, /*DiscardedValue*/ false);
@@ -3704,7 +3705,7 @@ bool Parser::ParseOMPInteropInfo(OMPInteropInfo &InteropInfo,
37043705

37053706
while (Tok.isNot(tok::r_paren)) {
37063707
SourceLocation Loc = Tok.getLocation();
3707-
ExprResult LHS = ParseCastExpression(AnyCastExpr);
3708+
ExprResult LHS = ParseCastExpression(CastParseKind::AnyCastExpr);
37083709
ExprResult PTExpr = Actions.CorrectDelayedTyposInExpr(
37093710
ParseRHSOfBinaryExpression(LHS, prec::Conditional));
37103711
PTExpr = Actions.ActOnFinishFullExpr(PTExpr.get(), Loc,
@@ -4188,8 +4189,8 @@ OMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind,
41884189
Kind == OMPC_grainsize || Kind == OMPC_num_tasks;
41894190
if (NeedAnExpression) {
41904191
SourceLocation ELoc = Tok.getLocation();
4191-
ExprResult LHS(
4192-
ParseCastExpression(AnyCastExpr, false, TypeCastState::NotTypeCast));
4192+
ExprResult LHS(ParseCastExpression(CastParseKind::AnyCastExpr, false,
4193+
TypeCastState::NotTypeCast));
41934194
Val = ParseRHSOfBinaryExpression(LHS, prec::Conditional);
41944195
Val =
41954196
Actions.ActOnFinishFullExpr(Val.get(), ELoc, /*DiscardedValue*/ false);
@@ -4480,7 +4481,7 @@ ExprResult Parser::ParseOpenMPIteratorsExpr() {
44804481
ColonProtectionRAIIObject ColonRAII(*this);
44814482
// Parse <begin>
44824483
SourceLocation Loc = Tok.getLocation();
4483-
ExprResult LHS = ParseCastExpression(AnyCastExpr);
4484+
ExprResult LHS = ParseCastExpression(CastParseKind::AnyCastExpr);
44844485
ExprResult Begin = Actions.CorrectDelayedTyposInExpr(
44854486
ParseRHSOfBinaryExpression(LHS, prec::Conditional));
44864487
Begin = Actions.ActOnFinishFullExpr(Begin.get(), Loc,
@@ -4492,7 +4493,7 @@ ExprResult Parser::ParseOpenMPIteratorsExpr() {
44924493

44934494
// Parse <end>
44944495
Loc = Tok.getLocation();
4495-
LHS = ParseCastExpression(AnyCastExpr);
4496+
LHS = ParseCastExpression(CastParseKind::AnyCastExpr);
44964497
ExprResult End = Actions.CorrectDelayedTyposInExpr(
44974498
ParseRHSOfBinaryExpression(LHS, prec::Conditional));
44984499
End = Actions.ActOnFinishFullExpr(End.get(), Loc,
@@ -4506,7 +4507,7 @@ ExprResult Parser::ParseOpenMPIteratorsExpr() {
45064507
SecColonLoc = ConsumeToken();
45074508
// Parse <step>
45084509
Loc = Tok.getLocation();
4509-
LHS = ParseCastExpression(AnyCastExpr);
4510+
LHS = ParseCastExpression(CastParseKind::AnyCastExpr);
45104511
Step = Actions.CorrectDelayedTyposInExpr(
45114512
ParseRHSOfBinaryExpression(LHS, prec::Conditional));
45124513
Step = Actions.ActOnFinishFullExpr(Step.get(), Loc,

0 commit comments

Comments
 (0)