@@ -297,7 +297,6 @@ static void tryDiagnoseUnnecessaryCastOverOptionSet(ASTContext &Ctx,
297
297
namespace {
298
298
class StmtChecker : public StmtVisitor <StmtChecker, Stmt*> {
299
299
public:
300
- TypeChecker &TC;
301
300
ASTContext &Ctx;
302
301
303
302
// / This is the current function or closure being checked.
@@ -374,16 +373,16 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
374
373
}
375
374
};
376
375
377
- StmtChecker (TypeChecker &TC, AbstractFunctionDecl *AFD)
378
- : TC(TC), Ctx(AFD->getASTContext ()), TheFunc(AFD), DC(AFD), IsREPL(false ),
376
+ StmtChecker (AbstractFunctionDecl *AFD)
377
+ : Ctx(AFD->getASTContext ()), TheFunc(AFD), DC(AFD), IsREPL(false ),
379
378
IsBraceStmtFromTopLevelDecl(false ) {}
380
379
381
- StmtChecker (TypeChecker &TC, ClosureExpr *TheClosure)
382
- : TC(TC), Ctx(TheClosure->getASTContext ()), TheFunc(TheClosure),
380
+ StmtChecker (ClosureExpr *TheClosure)
381
+ : Ctx(TheClosure->getASTContext ()), TheFunc(TheClosure),
383
382
DC(TheClosure), IsREPL(false ), IsBraceStmtFromTopLevelDecl(false ) {}
384
383
385
- StmtChecker (TypeChecker &TC, DeclContext *DC)
386
- : TC(TC), Ctx(DC->getASTContext ()), TheFunc(), DC(DC), IsREPL(false ),
384
+ StmtChecker (DeclContext *DC)
385
+ : Ctx(DC->getASTContext ()), TheFunc(), DC(DC), IsREPL(false ),
387
386
IsBraceStmtFromTopLevelDecl(false ) {
388
387
if (const SourceFile *SF = DC->getParentSourceFile ())
389
388
if (SF->Kind == SourceFileKind::REPL)
@@ -545,6 +544,8 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
545
544
}
546
545
}
547
546
547
+ // FIXME: Remove TypeChecker dependency.
548
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
548
549
auto exprTy = TC.typeCheckExpression (E, DC, TypeLoc::withoutLoc (ResultTy),
549
550
ctp,
550
551
options);
@@ -606,6 +607,8 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
606
607
contextTypePurpose = CTP_YieldByValue;
607
608
}
608
609
610
+ // FIXME: Remove TypeChecker dependency.
611
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
609
612
TC.typeCheckExpression (exprToCheck, DC,
610
613
TypeLoc::withoutLoc (contextType),
611
614
contextTypePurpose);
@@ -637,20 +640,28 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
637
640
Type exnType = getASTContext ().getErrorDecl ()->getDeclaredType ();
638
641
if (!exnType) return TS;
639
642
643
+ // FIXME: Remove TypeChecker dependency.
644
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
640
645
TC.typeCheckExpression (E, DC, TypeLoc::withoutLoc (exnType), CTP_ThrowStmt);
641
646
TS->setSubExpr (E);
642
647
643
648
return TS;
644
649
}
645
650
646
651
Stmt *visitPoundAssertStmt (PoundAssertStmt *PA) {
652
+ // FIXME: Remove TypeChecker dependency.
653
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
654
+
647
655
Expr *C = PA->getCondition ();
648
656
TC.typeCheckCondition (C, DC);
649
657
PA->setCondition (C);
650
658
return PA;
651
659
}
652
660
653
661
Stmt *visitDeferStmt (DeferStmt *DS) {
662
+ // FIXME: Remove TypeChecker dependency.
663
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
664
+
654
665
TC.typeCheckDecl (DS->getTempDecl ());
655
666
656
667
Expr *theCall = DS->getCallExpr ();
@@ -661,6 +672,9 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
661
672
}
662
673
663
674
Stmt *visitIfStmt (IfStmt *IS) {
675
+ // FIXME: Remove TypeChecker dependency.
676
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
677
+
664
678
StmtCondition C = IS->getCond ();
665
679
TC.typeCheckStmtCondition (C, DC, diag::if_always_true);
666
680
IS->setCond (C);
@@ -680,6 +694,9 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
680
694
}
681
695
682
696
Stmt *visitGuardStmt (GuardStmt *GS) {
697
+ // FIXME: Remove TypeChecker dependency.
698
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
699
+
683
700
StmtCondition C = GS->getCond ();
684
701
TC.typeCheckStmtCondition (C, DC, diag::guard_always_succeeds);
685
702
GS->setCond (C);
@@ -701,6 +718,9 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
701
718
}
702
719
703
720
Stmt *visitWhileStmt (WhileStmt *WS) {
721
+ // FIXME: Remove TypeChecker dependency.
722
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
723
+
704
724
StmtCondition C = WS->getCond ();
705
725
TC.typeCheckStmtCondition (C, DC, diag::while_always_true);
706
726
WS->setCond (C);
@@ -719,7 +739,10 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
719
739
typeCheckStmt (S);
720
740
RWS->setBody (S);
721
741
}
722
-
742
+
743
+ // FIXME: Remove TypeChecker dependency.
744
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
745
+
723
746
Expr *E = RWS->getCond ();
724
747
TC.typeCheckCondition (E, DC);
725
748
RWS->setCond (E);
@@ -738,7 +761,9 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
738
761
S->getPattern ()->setType (ErrorType::get (getASTContext ()));
739
762
return nullptr ;
740
763
}
741
-
764
+
765
+ // FIXME: Remove TypeChecker dependency.
766
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
742
767
if (TC.typeCheckPattern (S->getPattern (), DC, options)) {
743
768
// FIXME: Handle errors better.
744
769
S->getPattern ()->setType (ErrorType::get (getASTContext ()));
@@ -1081,6 +1106,9 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
1081
1106
return ;
1082
1107
}
1083
1108
1109
+ // FIXME: Remove TypeChecker dependency.
1110
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
1111
+
1084
1112
pattern = newPattern;
1085
1113
// Coerce the pattern to the subject's type.
1086
1114
TypeResolutionOptions patternOptions (TypeResolverContext::InExpression);
@@ -1281,6 +1309,9 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
1281
1309
}
1282
1310
1283
1311
Stmt *visitSwitchStmt (SwitchStmt *switchStmt) {
1312
+ // FIXME: Remove TypeChecker dependency.
1313
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
1314
+
1284
1315
// Type-check the subject expression.
1285
1316
Expr *subjectExpr = switchStmt->getSubjectExpr ();
1286
1317
auto resultTy = TC.typeCheckExpression (subjectExpr, DC);
@@ -1436,6 +1467,9 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
1436
1467
}
1437
1468
1438
1469
void checkCatchStmt (CatchStmt *S) {
1470
+ // FIXME: Remove TypeChecker dependency.
1471
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
1472
+
1439
1473
// Check the catch pattern.
1440
1474
TC.typeCheckCatchPattern (S, DC);
1441
1475
@@ -1804,6 +1838,8 @@ Stmt *StmtChecker::visitBraceStmt(BraceStmt *BS) {
1804
1838
}
1805
1839
}
1806
1840
1841
+ // FIXME: Remove TypeChecker dependencies below.
1842
+ auto &TC = *Ctx.getLegacyGlobalTypeChecker ();
1807
1843
for (auto &elem : BS->getElements ()) {
1808
1844
if (auto *SubExpr = elem.dyn_cast <Expr*>()) {
1809
1845
SourceLoc Loc = SubExpr->getStartLoc ();
@@ -2150,7 +2186,7 @@ TypeCheckFunctionBodyUntilRequest::evaluate(Evaluator &evaluator,
2150
2186
if (ctx.LangOpts .EnableASTScopeLookup )
2151
2187
ASTScope::expandFunctionBody (AFD);
2152
2188
2153
- StmtChecker SC (tc, AFD);
2189
+ StmtChecker SC (AFD);
2154
2190
SC.EndTypeCheckLoc = endTypeCheckLoc;
2155
2191
bool hadError = SC.typeCheckBody (body);
2156
2192
@@ -2203,7 +2239,7 @@ bool TypeChecker::typeCheckClosureBody(ClosureExpr *closure) {
2203
2239
if (DebugTimeFunctionBodies || WarnLongFunctionBodies)
2204
2240
timer.emplace (closure, DebugTimeFunctionBodies, WarnLongFunctionBodies);
2205
2241
2206
- bool HadError = StmtChecker (* this , closure).typeCheckBody (body);
2242
+ bool HadError = StmtChecker (closure).typeCheckBody (body);
2207
2243
if (body) {
2208
2244
closure->setBody (body, closure->hasSingleExpressionBody ());
2209
2245
}
@@ -2214,7 +2250,7 @@ bool TypeChecker::typeCheckTapBody(TapExpr *expr, DeclContext *DC) {
2214
2250
// We intentionally use typeCheckStmt instead of typeCheckBody here
2215
2251
// because we want to contextualize TapExprs with the body they're in.
2216
2252
BraceStmt *body = expr->getBody ();
2217
- bool HadError = StmtChecker (* this , DC).typeCheckStmt (body);
2253
+ bool HadError = StmtChecker (DC).typeCheckStmt (body);
2218
2254
if (body) {
2219
2255
expr->setBody (body);
2220
2256
}
@@ -2226,7 +2262,7 @@ void TypeChecker::typeCheckTopLevelCodeDecl(TopLevelCodeDecl *TLCD) {
2226
2262
// because we want to contextualize all the TopLevelCode
2227
2263
// declarations simultaneously.
2228
2264
BraceStmt *Body = TLCD->getBody ();
2229
- StmtChecker (* this , TLCD).typeCheckStmt (Body);
2265
+ StmtChecker (TLCD).typeCheckStmt (Body);
2230
2266
TLCD->setBody (Body);
2231
2267
checkTopLevelErrorHandling (TLCD);
2232
2268
performTopLevelDeclDiagnostics (TLCD);
0 commit comments