Skip to content

Commit 48718a4

Browse files
committed
Merge all pattern kinds into a single AST node
1 parent fc78491 commit 48718a4

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

clang/lib/Sema/SemaExpand.cpp

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,21 @@ static auto InitListContainsPack(const InitListExpr *ILE) {
4747
[](const Expr *E) { return isa<PackExpansionExpr>(E); });
4848
}
4949

50-
static bool HasDependentSize(const CXXExpansionStmtPattern* pattern) {
51-
if (isa<CXXEnumeratingExpansionStmtPattern>(pattern)) {
50+
static bool HasDependentSize(const CXXExpansionStmtPattern *Pattern) {
51+
switch (Pattern->getKind()) {
52+
case CXXExpansionStmtPattern::ExpansionStmtKind::Enumerating: {
5253
auto *SelectExpr = cast<CXXExpansionInitListSelectExpr>(
53-
pattern->getExpansionVariable()->getInit());
54+
Pattern->getExpansionVariable()->getInit());
5455
return InitListContainsPack(SelectExpr->getRangeExpr());
5556
}
5657

57-
llvm_unreachable("Invalid expansion statement class");
58+
case CXXExpansionStmtPattern::ExpansionStmtKind::Iterating:
59+
case CXXExpansionStmtPattern::ExpansionStmtKind::Destructuring:
60+
case CXXExpansionStmtPattern::ExpansionStmtKind::Dependent:
61+
llvm_unreachable("TODO");
62+
}
63+
64+
llvm_unreachable("invalid pattern kind");
5865
}
5966

6067
CXXExpansionStmtDecl *
@@ -134,9 +141,9 @@ StmtResult Sema::ActOnCXXExpansionStmtPattern(
134141
StmtResult Sema::BuildCXXEnumeratingExpansionStmtPattern(
135142
Decl *ESD, Stmt *Init, Stmt *ExpansionVar, SourceLocation LParenLoc,
136143
SourceLocation ColonLoc, SourceLocation RParenLoc) {
137-
return new (Context) CXXEnumeratingExpansionStmtPattern(
138-
cast<CXXExpansionStmtDecl>(ESD), Init, cast<DeclStmt>(ExpansionVar),
139-
LParenLoc, ColonLoc, RParenLoc);
144+
return CXXExpansionStmtPattern::CreateEnumerating(
145+
Context, cast<CXXExpansionStmtDecl>(ESD), Init,
146+
cast<DeclStmt>(ExpansionVar), LParenLoc, ColonLoc, RParenLoc);
140147
}
141148

142149
StmtResult Sema::FinishCXXExpansionStmt(Stmt *Exp, Stmt *Body) {
@@ -161,15 +168,14 @@ StmtResult Sema::FinishCXXExpansionStmt(Stmt *Exp, Stmt *Body) {
161168
if (Expansion->getInit())
162169
Shared.push_back(Expansion->getInit());
163170

164-
assert(isa<CXXEnumeratingExpansionStmtPattern>(Expansion) && "TODO");
171+
assert(Expansion->isEnumerating() && "TODO");
165172

166173
// Return an empty statement if the range is empty.
167174
if (*NumInstantiations == 0) {
168175
Expansion->getDecl()->setInstantiations(
169176
CXXExpansionStmtInstantiation::Create(
170177
Context, Expansion->getBeginLoc(), Expansion->getEndLoc(),
171-
/*Instantiations=*/{}, Shared,
172-
isa<CXXDestructuringExpansionStmtPattern>(Expansion)));
178+
/*Instantiations=*/{}, Shared, Expansion->isDestructuring()));
173179
return Expansion;
174180
}
175181

@@ -207,7 +213,7 @@ StmtResult Sema::FinishCXXExpansionStmt(Stmt *Exp, Stmt *Body) {
207213

208214
auto *InstantiationsStmt = CXXExpansionStmtInstantiation::Create(
209215
Context, Expansion->getBeginLoc(), Expansion->getEndLoc(), Instantiations,
210-
Shared, isa<CXXDestructuringExpansionStmtPattern>(Expansion));
216+
Shared, Expansion->isDestructuring());
211217

212218
Expansion->getDecl()->setInstantiations(InstantiationsStmt);
213219
return Expansion;
@@ -233,7 +239,7 @@ std::optional<uint64_t>
233239
Sema::ComputeExpansionSize(CXXExpansionStmtPattern *Expansion) {
234240
assert(!HasDependentSize(Expansion));
235241

236-
if (isa<CXXEnumeratingExpansionStmtPattern>(Expansion))
242+
if (Expansion->isEnumerating())
237243
return cast<CXXExpansionInitListSelectExpr>(
238244
Expansion->getExpansionVariable()->getInit())
239245
->getRangeExpr()

0 commit comments

Comments
 (0)