Skip to content

Commit 61fd649

Browse files
committed
[AST] Eliminate ForStmt
RIP
1 parent b754b9e commit 61fd649

13 files changed

+0
-215
lines changed

Diff for: include/swift/AST/Stmt.h

-52
Original file line numberDiff line numberDiff line change
@@ -706,58 +706,6 @@ class RepeatWhileStmt : public LabeledStmt {
706706
static bool classof(const Stmt *S) {return S->getKind() == StmtKind::RepeatWhile;}
707707
};
708708

709-
/// ForStmt - for statement. After type-checking, the condition is of
710-
/// type Builtin.Int1. Note that the condition is optional. If not present,
711-
/// it always evaluates to true. The Initializer and Increment are also
712-
/// optional.
713-
class ForStmt : public LabeledStmt {
714-
SourceLoc ForLoc, Semi1Loc, Semi2Loc;
715-
NullablePtr<Expr> Initializer;
716-
ArrayRef<Decl*> InitializerVarDecls;
717-
NullablePtr<Expr> Cond;
718-
NullablePtr<Expr> Increment;
719-
Stmt *Body;
720-
721-
public:
722-
ForStmt(LabeledStmtInfo LabelInfo, SourceLoc ForLoc,
723-
NullablePtr<Expr> Initializer,
724-
ArrayRef<Decl*> InitializerVarDecls,
725-
SourceLoc Semi1Loc, NullablePtr<Expr> Cond, SourceLoc Semi2Loc,
726-
NullablePtr<Expr> Increment,
727-
Stmt *Body,
728-
Optional<bool> implicit = None)
729-
: LabeledStmt(StmtKind::For, getDefaultImplicitFlag(implicit, ForLoc),
730-
LabelInfo),
731-
ForLoc(ForLoc), Semi1Loc(Semi1Loc),
732-
Semi2Loc(Semi2Loc), Initializer(Initializer),
733-
InitializerVarDecls(InitializerVarDecls),
734-
Cond(Cond), Increment(Increment), Body(Body) {
735-
}
736-
737-
SourceLoc getStartLoc() const { return getLabelLocOrKeywordLoc(ForLoc); }
738-
SourceLoc getEndLoc() const { return Body->getEndLoc(); }
739-
740-
SourceLoc getFirstSemicolonLoc() const { return Semi1Loc; }
741-
SourceLoc getSecondSemicolonLoc() const { return Semi2Loc; }
742-
743-
NullablePtr<Expr> getInitializer() const { return Initializer; }
744-
void setInitializer(Expr *V) { Initializer = V; }
745-
746-
ArrayRef<Decl*> getInitializerVarDecls() const { return InitializerVarDecls; }
747-
void setInitializerVarDecls(ArrayRef<Decl*> D) { InitializerVarDecls = D; }
748-
749-
NullablePtr<Expr> getCond() const { return Cond; }
750-
void setCond(NullablePtr<Expr> C) { Cond = C; }
751-
752-
NullablePtr<Expr> getIncrement() const { return Increment; }
753-
void setIncrement(Expr *V) { Increment = V; }
754-
755-
Stmt *getBody() const { return Body; }
756-
void setBody(Stmt *s) { Body = s; }
757-
758-
static bool classof(const Stmt *S) { return S->getKind() == StmtKind::For; }
759-
};
760-
761709
/// ForEachStmt - foreach statement that iterates over the elements in a
762710
/// container.
763711
///

Diff for: include/swift/AST/StmtNodes.def

-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ ABSTRACT_STMT(Labeled, Stmt)
5252
LABELED_STMT(Do, LabeledStmt)
5353
LABELED_STMT(DoCatch, LabeledStmt)
5454
LABELED_STMT(RepeatWhile, LabeledStmt)
55-
LABELED_STMT(For, LabeledStmt)
5655
LABELED_STMT(ForEach, LabeledStmt)
5756
LABELED_STMT(Switch, LabeledStmt)
5857
STMT_RANGE(Labeled, If, Switch)

Diff for: lib/AST/ASTDumper.cpp

-29
Original file line numberDiff line numberDiff line change
@@ -1458,35 +1458,6 @@ class PrintStmt : public StmtVisitor<PrintStmt> {
14581458
printRec(S->getCond());
14591459
PrintWithColorRAII(OS, ParenthesisColor) << ')';
14601460
}
1461-
void visitForStmt(ForStmt *S) {
1462-
printCommon(S, "for_stmt") << '\n';
1463-
if (!S->getInitializerVarDecls().empty()) {
1464-
for (auto D : S->getInitializerVarDecls()) {
1465-
printRec(D);
1466-
OS << '\n';
1467-
}
1468-
} else if (auto *Initializer = S->getInitializer().getPtrOrNull()) {
1469-
printRec(Initializer);
1470-
OS << '\n';
1471-
} else {
1472-
OS.indent(Indent+2) << "<null initializer>\n";
1473-
}
1474-
1475-
if (auto *Cond = S->getCond().getPtrOrNull())
1476-
printRec(Cond);
1477-
else
1478-
OS.indent(Indent+2) << "<null condition>";
1479-
OS << '\n';
1480-
1481-
if (auto *Increment = S->getIncrement().getPtrOrNull()) {
1482-
printRec(Increment);
1483-
} else {
1484-
OS.indent(Indent+2) << "<null increment>";
1485-
}
1486-
OS << '\n';
1487-
printRec(S->getBody());
1488-
PrintWithColorRAII(OS, ParenthesisColor) << ')';
1489-
}
14901461
void visitForEachStmt(ForEachStmt *S) {
14911462
printCommon(S, "for_each_stmt") << '\n';
14921463
printRec(S->getPattern());

Diff for: lib/AST/ASTPrinter.cpp

-13
Original file line numberDiff line numberDiff line change
@@ -2932,19 +2932,6 @@ void PrintAST::visitCatchStmt(CatchStmt *stmt) {
29322932
visit(stmt->getBody());
29332933
}
29342934

2935-
void PrintAST::visitForStmt(ForStmt *stmt) {
2936-
Printer << tok::kw_for << " (";
2937-
// FIXME: print initializer
2938-
Printer << "; ";
2939-
if (stmt->getCond().isNonNull()) {
2940-
// FIXME: print cond
2941-
}
2942-
Printer << "; ";
2943-
// FIXME: print increment
2944-
Printer << ") ";
2945-
visit(stmt->getBody());
2946-
}
2947-
29482935
void PrintAST::visitForEachStmt(ForEachStmt *stmt) {
29492936
Printer << tok::kw_for << " ";
29502937
printPattern(stmt->getPattern());

Diff for: lib/AST/ASTScope.cpp

-3
Original file line numberDiff line numberDiff line change
@@ -1078,9 +1078,6 @@ ASTScope *ASTScope::createIfNeeded(const ASTScope *parent, Stmt *stmt) {
10781078
case StmtKind::RepeatWhile:
10791079
return new (ctx) ASTScope(parent, cast<RepeatWhileStmt>(stmt));
10801080

1081-
case StmtKind::For:
1082-
llvm_unreachable("Parser doesn't produce ForStmt anymore");
1083-
10841081
case StmtKind::ForEach:
10851082
return new (ctx) ASTScope(ASTScopeKind::ForEachStmt, parent,
10861083
cast<ForEachStmt>(stmt));

Diff for: lib/AST/ASTWalker.cpp

-35
Original file line numberDiff line numberDiff line change
@@ -1369,41 +1369,6 @@ Stmt *Traversal::visitRepeatWhileStmt(RepeatWhileStmt *RWS) {
13691369
return RWS;
13701370
}
13711371

1372-
Stmt *Traversal::visitForStmt(ForStmt *FS) {
1373-
// Visit any var decls in the initializer.
1374-
for (auto D : FS->getInitializerVarDecls())
1375-
if (doIt(D))
1376-
return nullptr;
1377-
1378-
if (auto *Initializer = FS->getInitializer().getPtrOrNull()) {
1379-
if (Expr *E = doIt(Initializer))
1380-
FS->setInitializer(E);
1381-
else
1382-
return nullptr;
1383-
}
1384-
1385-
if (auto *Cond = FS->getCond().getPtrOrNull()) {
1386-
if (Expr *E2 = doIt(Cond))
1387-
FS->setCond(E2);
1388-
else
1389-
return nullptr;
1390-
1391-
}
1392-
1393-
if (auto *Increment = FS->getIncrement().getPtrOrNull()) {
1394-
if (Expr *E = doIt(Increment))
1395-
FS->setIncrement(E);
1396-
else
1397-
return nullptr;
1398-
}
1399-
1400-
if (Stmt *S = doIt(FS->getBody()))
1401-
FS->setBody(S);
1402-
else
1403-
return nullptr;
1404-
return FS;
1405-
}
1406-
14071372
Stmt *Traversal::visitForEachStmt(ForEachStmt *S) {
14081373
if (Pattern *P = S->getPattern()) {
14091374
if ((P = doIt(P)))

Diff for: lib/AST/LegacyASTTransformer.cpp

-7
Original file line numberDiff line numberDiff line change
@@ -536,13 +536,6 @@ LegacyASTTransformer::visitRepeatWhileStmt(RepeatWhileStmt *S,
536536
return getUnknownStmt(S);
537537
}
538538

539-
RC<SyntaxData>
540-
LegacyASTTransformer::visitForStmt(ForStmt *S,
541-
const SyntaxData *Parent,
542-
const CursorIndex IndexInParent) {
543-
return getUnknownStmt(S);
544-
}
545-
546539
RC<SyntaxData>
547540
LegacyASTTransformer::visitForEachStmt(ForEachStmt *S,
548541
const SyntaxData *Parent,

Diff for: lib/AST/NameLookupImpl.h

-9
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,6 @@ class FindLocalVal : public StmtVisitor<FindLocalVal> {
165165
visit(S->getBody());
166166
}
167167

168-
void visitForStmt(ForStmt *S) {
169-
if (!isReferencePointInRange(S->getSourceRange()))
170-
return;
171-
visit(S->getBody());
172-
for (Decl *D : S->getInitializerVarDecls()) {
173-
if (auto *VD = dyn_cast<ValueDecl>(D))
174-
checkValueDecl(VD, DeclVisibilityKind::LocalVariable);
175-
}
176-
}
177168
void visitForEachStmt(ForEachStmt *S) {
178169
if (!isReferencePointInRange(S->getSourceRange()))
179170
return;

Diff for: lib/AST/Stmt.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,6 @@ bool LabeledStmt::isPossibleContinueTarget() const {
187187
case StmtKind::Do:
188188
case StmtKind::DoCatch:
189189
case StmtKind::RepeatWhile:
190-
case StmtKind::For:
191190
case StmtKind::ForEach:
192191
case StmtKind::While:
193192
return true;
@@ -209,7 +208,6 @@ bool LabeledStmt::requiresLabelOnJump() const {
209208
return true;
210209

211210
case StmtKind::RepeatWhile:
212-
case StmtKind::For:
213211
case StmtKind::ForEach:
214212
case StmtKind::Switch:
215213
case StmtKind::While:

Diff for: lib/SILGen/SILGenStmt.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -730,10 +730,6 @@ void StmtEmitter::visitRepeatWhileStmt(RepeatWhileStmt *S) {
730730
SGF.BreakContinueDestStack.pop_back();
731731
}
732732

733-
void StmtEmitter::visitForStmt(ForStmt *S) {
734-
llvm_unreachable("c-style for loop is always a semantic error");
735-
}
736-
737733
void StmtEmitter::visitForEachStmt(ForEachStmt *S) {
738734
// Emit the 'iterator' variable that we'll be using for iteration.
739735
LexicalScope OuterForScope(SGF, CleanupLocation(S));

Diff for: lib/Sema/PCMacro.cpp

-14
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,6 @@ class Instrumenter : InstrumenterBase {
6262
case StmtKind::RepeatWhile: {
6363
return transformRepeatWhileStmt(cast<RepeatWhileStmt>(S));
6464
}
65-
case StmtKind::For: {
66-
return transformForStmt(cast<ForStmt>(S));
67-
}
6865
case StmtKind::ForEach: {
6966
return transformForEachStmt(cast<ForEachStmt>(S));
7067
}
@@ -187,17 +184,6 @@ class Instrumenter : InstrumenterBase {
187184
return RWS;
188185
}
189186

190-
ForStmt *transformForStmt(ForStmt *FS) {
191-
if (Stmt *B = FS->getBody()) {
192-
Stmt *NB = transformStmt(B);
193-
if (NB != B) {
194-
FS->setBody(NB);
195-
}
196-
}
197-
198-
return FS;
199-
}
200-
201187
ForEachStmt *transformForEachStmt(ForEachStmt *FES) {
202188
if (BraceStmt *B = FES->getBody()) {
203189
BraceStmt *NB = transformBraceStmt(B);

Diff for: lib/Sema/PlaygroundTransform.cpp

-15
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,6 @@ class Instrumenter : InstrumenterBase {
138138
TargetKindSetter TKS(BracePairs, BracePair::TargetKinds::Break);
139139
return transformRepeatWhileStmt(cast<RepeatWhileStmt>(S));
140140
}
141-
case StmtKind::For: {
142-
TargetKindSetter TKS(BracePairs, BracePair::TargetKinds::Break);
143-
return transformForStmt(cast<ForStmt>(S));
144-
}
145141
case StmtKind::ForEach: {
146142
TargetKindSetter TKS(BracePairs, BracePair::TargetKinds::Break);
147143
return transformForEachStmt(cast<ForEachStmt>(S));
@@ -205,17 +201,6 @@ class Instrumenter : InstrumenterBase {
205201
return RWS;
206202
}
207203

208-
ForStmt *transformForStmt(ForStmt *FS) {
209-
if (Stmt *B = FS->getBody()) {
210-
Stmt *NB = transformStmt(B);
211-
if (NB != B) {
212-
FS->setBody(NB);
213-
}
214-
}
215-
216-
return FS;
217-
}
218-
219204
ForEachStmt *transformForEachStmt(ForEachStmt *FES) {
220205
if (BraceStmt *B = FES->getBody()) {
221206
BraceStmt *NB = transformBraceStmt(B);

Diff for: lib/Sema/TypeCheckStmt.cpp

-31
Original file line numberDiff line numberDiff line change
@@ -544,37 +544,6 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
544544
RWS->setCond(E);
545545
return RWS;
546546
}
547-
Stmt *visitForStmt(ForStmt *FS) {
548-
// Type check any var decls in the initializer.
549-
for (auto D : FS->getInitializerVarDecls())
550-
TC.typeCheckDecl(D, /*isFirstPass*/false);
551-
552-
if (auto *Initializer = FS->getInitializer().getPtrOrNull()) {
553-
TC.typeCheckExpression(Initializer, DC, TypeLoc(), CTP_Unused,
554-
TypeCheckExprFlags::IsDiscarded);
555-
FS->setInitializer(Initializer);
556-
TC.checkIgnoredExpr(Initializer);
557-
}
558-
559-
if (auto *Cond = FS->getCond().getPtrOrNull()) {
560-
TC.typeCheckCondition(Cond, DC);
561-
FS->setCond(Cond);
562-
}
563-
564-
if (auto *Increment = FS->getIncrement().getPtrOrNull()) {
565-
TC.typeCheckExpression(Increment, DC, TypeLoc(), CTP_Unused,
566-
TypeCheckExprFlags::IsDiscarded);
567-
FS->setIncrement(Increment);
568-
TC.checkIgnoredExpr(Increment);
569-
}
570-
571-
AddLabeledStmt loopNest(*this, FS);
572-
Stmt *S = FS->getBody();
573-
typeCheckStmt(S);
574-
FS->setBody(S);
575-
576-
return FS;
577-
}
578547

579548
Stmt *visitForEachStmt(ForEachStmt *S) {
580549
TypeResolutionOptions options;

0 commit comments

Comments
 (0)