@@ -1408,7 +1408,7 @@ class CaseStmt final
1408
1408
1409
1409
// / Switch statement.
1410
1410
class SwitchStmt final : public LabeledStmt,
1411
- private llvm::TrailingObjects<SwitchStmt, ASTNode > {
1411
+ private llvm::TrailingObjects<SwitchStmt, CaseStmt * > {
1412
1412
friend TrailingObjects;
1413
1413
1414
1414
SourceLoc SwitchLoc, LBraceLoc, RBraceLoc;
@@ -1431,16 +1431,13 @@ class SwitchStmt final : public LabeledStmt,
1431
1431
public:
1432
1432
// / Allocate a new SwitchStmt in the given ASTContext.
1433
1433
static SwitchStmt *create (LabeledStmtInfo LabelInfo, SourceLoc SwitchLoc,
1434
- Expr *SubjectExpr,
1435
- SourceLoc LBraceLoc,
1436
- ArrayRef<ASTNode> Cases,
1437
- SourceLoc RBraceLoc,
1438
- SourceLoc EndLoc,
1439
- ASTContext &C);
1434
+ Expr *SubjectExpr, SourceLoc LBraceLoc,
1435
+ ArrayRef<CaseStmt *> Cases, SourceLoc RBraceLoc,
1436
+ SourceLoc EndLoc, ASTContext &C);
1440
1437
1441
1438
static SwitchStmt *createImplicit (LabeledStmtInfo LabelInfo,
1442
- Expr *SubjectExpr, ArrayRef<ASTNode> Cases,
1443
- ASTContext &C) {
1439
+ Expr *SubjectExpr,
1440
+ ArrayRef<CaseStmt *> Cases, ASTContext &C) {
1444
1441
return SwitchStmt::create (LabelInfo, /* SwitchLoc=*/ SourceLoc (), SubjectExpr,
1445
1442
/* LBraceLoc=*/ SourceLoc (), Cases,
1446
1443
/* RBraceLoc=*/ SourceLoc (), /* EndLoc=*/ SourceLoc (),
@@ -1463,27 +1460,10 @@ class SwitchStmt final : public LabeledStmt,
1463
1460
Expr *getSubjectExpr () const { return SubjectExpr; }
1464
1461
void setSubjectExpr (Expr *e) { SubjectExpr = e; }
1465
1462
1466
- ArrayRef<ASTNode> getRawCases () const {
1467
- return {getTrailingObjects<ASTNode>(), static_cast <size_t >(Bits.SwitchStmt .CaseCount )};
1468
- }
1469
-
1470
- private:
1471
- struct AsCaseStmtWithSkippingNonCaseStmts {
1472
- AsCaseStmtWithSkippingNonCaseStmts () {}
1473
- std::optional<CaseStmt *> operator ()(const ASTNode &N) const {
1474
- if (auto *CS = llvm::dyn_cast_or_null<CaseStmt>(N.dyn_cast <Stmt*>()))
1475
- return CS;
1476
- return std::nullopt;
1477
- }
1478
- };
1479
-
1480
- public:
1481
- using AsCaseStmtRange = OptionalTransformRange<ArrayRef<ASTNode>,
1482
- AsCaseStmtWithSkippingNonCaseStmts>;
1483
-
1484
1463
// / Get the list of case clauses.
1485
- AsCaseStmtRange getCases () const {
1486
- return AsCaseStmtRange (getRawCases (), AsCaseStmtWithSkippingNonCaseStmts ());
1464
+ ArrayRef<CaseStmt *> getCases () const {
1465
+ return {getTrailingObjects<CaseStmt *>(),
1466
+ static_cast <size_t >(Bits.SwitchStmt .CaseCount )};
1487
1467
}
1488
1468
1489
1469
// / Retrieve the complete set of branches for this switch statement.
0 commit comments