@@ -1408,7 +1408,7 @@ class CaseStmt final
14081408
14091409// / Switch statement.
14101410class SwitchStmt final : public LabeledStmt,
1411- private llvm::TrailingObjects<SwitchStmt, ASTNode > {
1411+ private llvm::TrailingObjects<SwitchStmt, CaseStmt * > {
14121412 friend TrailingObjects;
14131413
14141414 SourceLoc SwitchLoc, LBraceLoc, RBraceLoc;
@@ -1431,16 +1431,13 @@ class SwitchStmt final : public LabeledStmt,
14311431public:
14321432 // / Allocate a new SwitchStmt in the given ASTContext.
14331433 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);
14401437
14411438 static SwitchStmt *createImplicit (LabeledStmtInfo LabelInfo,
1442- Expr *SubjectExpr, ArrayRef<ASTNode> Cases,
1443- ASTContext &C) {
1439+ Expr *SubjectExpr,
1440+ ArrayRef<CaseStmt *> Cases, ASTContext &C) {
14441441 return SwitchStmt::create (LabelInfo, /* SwitchLoc=*/ SourceLoc (), SubjectExpr,
14451442 /* LBraceLoc=*/ SourceLoc (), Cases,
14461443 /* RBraceLoc=*/ SourceLoc (), /* EndLoc=*/ SourceLoc (),
@@ -1463,27 +1460,10 @@ class SwitchStmt final : public LabeledStmt,
14631460 Expr *getSubjectExpr () const { return SubjectExpr; }
14641461 void setSubjectExpr (Expr *e) { SubjectExpr = e; }
14651462
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-
14841463 // / 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 )};
14871467 }
14881468
14891469 // / Retrieve the complete set of branches for this switch statement.
0 commit comments