Skip to content

Commit 1000c9d

Browse files
committed
Remove some ancillary TypeCheckers
1 parent 301e042 commit 1000c9d

File tree

8 files changed

+31
-29
lines changed

8 files changed

+31
-29
lines changed

lib/Sema/CSApply.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2818,7 +2818,7 @@ namespace {
28182818
//
28192819
// The result is that in Swift 5, 'try?' avoids producing nested optionals.
28202820

2821-
if (!cs.getTypeChecker().getLangOpts().isSwiftVersionAtLeast(5)) {
2821+
if (!cs.getASTContext().LangOpts.isSwiftVersionAtLeast(5)) {
28222822
// Nothing to do for Swift 4 and earlier!
28232823
return simplifyExprType(expr);
28242824
}
@@ -5408,7 +5408,7 @@ Expr *ExprRewriter::coerceCallArguments(Expr *arg, AnyFunctionType *funcType,
54085408
arg, closureType->getResult(),
54095409
locator.withPathElement(ConstraintLocator::AutoclosureResult));
54105410

5411-
convertedArg = cs.getTypeChecker().buildAutoClosureExpr(dc, arg, closureType);
5411+
convertedArg = TypeChecker::buildAutoClosureExpr(dc, arg, closureType);
54125412
cs.cacheExprTypes(convertedArg);
54135413
} else {
54145414
convertedArg = coerceToType(
@@ -7441,14 +7441,14 @@ Expr *ConstraintSystem::applySolution(Solution &solution, Expr *expr,
74417441
if (!skipClosures) {
74427442
bool hadError = false;
74437443
for (auto *closure : walker.getClosuresToTypeCheck())
7444-
hadError |= getTypeChecker().typeCheckClosureBody(closure);
7444+
hadError |= TypeChecker::typeCheckClosureBody(closure);
74457445

74467446
// Tap expressions too; they should or should not be
74477447
// type-checked under the same conditions as closure bodies.
74487448
for (auto tuple : walker.getTapsToTypeCheck()) {
74497449
auto tap = std::get<0>(tuple);
74507450
auto tapDC = std::get<1>(tuple);
7451-
hadError |= getTypeChecker().typeCheckTapBody(tap, tapDC);
7451+
hadError |= TypeChecker::typeCheckTapBody(tap, tapDC);
74527452
}
74537453

74547454
// If any of them failed to type check, bail.

lib/Sema/CSDiagnostics.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4891,7 +4891,6 @@ bool MissingGenericArgumentsFailure::diagnoseParameter(
48914891
void MissingGenericArgumentsFailure::emitGenericSignatureNote(
48924892
Anchor anchor) const {
48934893
auto &cs = getConstraintSystem();
4894-
auto &TC = getTypeChecker();
48954894
auto *paramDC = getDeclContext();
48964895

48974896
if (!paramDC)
@@ -4937,8 +4936,8 @@ void MissingGenericArgumentsFailure::emitGenericSignatureNote(
49374936

49384937
SmallString<64> paramsAsString;
49394938
auto baseType = anchor.get<TypeRepr *>();
4940-
if (TC.getDefaultGenericArgumentsString(paramsAsString, GTD,
4941-
getPreferredType)) {
4939+
if (TypeChecker::getDefaultGenericArgumentsString(paramsAsString, GTD,
4940+
getPreferredType)) {
49424941
auto diagnostic = emitDiagnostic(
49434942
baseType->getLoc(), diag::unbound_generic_parameter_explicit_fix);
49444943

lib/Sema/TypeCheckConstraints.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2314,7 +2314,7 @@ Type TypeChecker::typeCheckParameterDefault(Expr *&defaultValue,
23142314
Expr *appliedSolution(constraints::Solution &solution,
23152315
Expr *expr) override {
23162316
auto &cs = solution.getConstraintSystem();
2317-
auto *closure = cs.getTypeChecker().buildAutoClosureExpr(DC, expr, ParamType);
2317+
auto *closure = TypeChecker::buildAutoClosureExpr(DC, expr, ParamType);
23182318
cs.cacheExprTypes(closure);
23192319
return closure;
23202320
}

lib/Sema/TypeCheckExpr.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,7 @@ Expr *TypeChecker::buildRefExpr(ArrayRef<ValueDecl *> Decls,
619619

620620
Expr *TypeChecker::buildAutoClosureExpr(DeclContext *DC, Expr *expr,
621621
FunctionType *closureType) {
622+
auto &Context = DC->getASTContext();
622623
bool isInDefaultArgumentContext = false;
623624
if (auto *init = dyn_cast<Initializer>(DC))
624625
isInDefaultArgumentContext =
@@ -636,7 +637,9 @@ Expr *TypeChecker::buildAutoClosureExpr(DeclContext *DC, Expr *expr,
636637

637638
closure->setParameterList(ParameterList::createEmpty(Context));
638639

639-
ClosuresWithUncomputedCaptures.push_back(closure);
640+
// FIXME: Remove global type checker dependency.
641+
auto *TC = Context.getLegacyGlobalTypeChecker();
642+
TC->ClosuresWithUncomputedCaptures.push_back(closure);
640643

641644
if (!newClosureType->isEqual(closureType)) {
642645
assert(isInDefaultArgumentContext);

lib/Sema/TypeCheckREPL.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ void REPLChecker::generatePrintOfExpression(StringRef NameStr, Expr *E) {
257257

258258
// FIXME: Remove TypeChecker dependency.
259259
auto &TC = *Context.getLegacyGlobalTypeChecker();
260-
TC.typeCheckClosureBody(CE);
260+
TypeChecker::typeCheckClosureBody(CE);
261261
TC.ClosuresWithUncomputedCaptures.push_back(CE);
262262

263263
auto *TheCall = CallExpr::createImplicit(Context, CE, { E }, { });

lib/Sema/TypeCheckStmt.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -740,15 +740,13 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
740740
return nullptr;
741741
}
742742

743-
// FIXME: Remove TypeChecker dependency.
744-
auto &TC = *Ctx.getLegacyGlobalTypeChecker();
745743
if (TypeChecker::typeCheckPattern(S->getPattern(), DC, options)) {
746744
// FIXME: Handle errors better.
747745
S->getPattern()->setType(ErrorType::get(getASTContext()));
748746
return nullptr;
749747
}
750748

751-
if (TC.typeCheckForEachBinding(DC, S))
749+
if (TypeChecker::typeCheckForEachBinding(DC, S))
752750
return nullptr;
753751

754752
if (auto *Where = S->getWhere()) {
@@ -880,8 +878,8 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
880878
OpaqueValueExpr *elementExpr =
881879
new (getASTContext()) OpaqueValueExpr(S->getInLoc(), nextResultType);
882880
Expr *convertElementExpr = elementExpr;
883-
if (TC.convertToType(convertElementExpr, optPatternType, DC,
884-
S->getPattern())) {
881+
if (TypeChecker::convertToType(convertElementExpr, optPatternType, DC,
882+
S->getPattern())) {
885883
return nullptr;
886884
}
887885
S->setElementExpr(elementExpr);
@@ -2206,9 +2204,11 @@ bool TypeChecker::typeCheckClosureBody(ClosureExpr *closure) {
22062204

22072205
BraceStmt *body = closure->getBody();
22082206

2207+
auto *TC = closure->getASTContext().getLegacyGlobalTypeChecker();
22092208
Optional<FunctionBodyTimer> timer;
2210-
if (DebugTimeFunctionBodies || WarnLongFunctionBodies)
2211-
timer.emplace(closure, DebugTimeFunctionBodies, WarnLongFunctionBodies);
2209+
if (TC->DebugTimeFunctionBodies || TC->WarnLongFunctionBodies)
2210+
timer.emplace(closure, TC->DebugTimeFunctionBodies,
2211+
TC->WarnLongFunctionBodies);
22122212

22132213
bool HadError = StmtChecker(closure).typeCheckBody(body);
22142214
if (body) {

lib/Sema/TypeChecker.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ void swift::performTypeChecking(SourceFile &SF, TopLevelContext &TLC,
406406
if (!Ctx.LangOpts.DisableAvailabilityChecking) {
407407
// Build the type refinement hierarchy for the primary
408408
// file before type checking.
409-
TC.buildTypeRefinementContextHierarchy(SF, StartElem);
409+
TypeChecker::buildTypeRefinementContextHierarchy(SF, StartElem);
410410
}
411411

412412
// Resolve extensions. This has to occur first during type checking,
@@ -418,7 +418,7 @@ void swift::performTypeChecking(SourceFile &SF, TopLevelContext &TLC,
418418
for (auto D : llvm::makeArrayRef(SF.Decls).slice(StartElem)) {
419419
if (auto *TLCD = dyn_cast<TopLevelCodeDecl>(D)) {
420420
// Immediately perform global name-binding etc.
421-
TC.typeCheckTopLevelCodeDecl(TLCD);
421+
TypeChecker::typeCheckTopLevelCodeDecl(TLCD);
422422
TypeChecker::contextualizeTopLevelCode(TLC, TLCD);
423423
} else {
424424
TypeChecker::typeCheckDecl(D);
@@ -428,7 +428,7 @@ void swift::performTypeChecking(SourceFile &SF, TopLevelContext &TLC,
428428
// If we're in REPL mode, inject temporary result variables and other stuff
429429
// that the REPL needs to synthesize.
430430
if (SF.Kind == SourceFileKind::REPL && !Ctx.hadError())
431-
TC.processREPLTopLevel(SF, TLC, StartElem);
431+
TypeChecker::processREPLTopLevel(SF, TLC, StartElem);
432432

433433
typeCheckFunctionsAndExternalDecls(SF, TC);
434434
}
@@ -713,8 +713,8 @@ bool swift::typeCheckAbstractFunctionBodyUntil(AbstractFunctionDecl *AFD,
713713
bool swift::typeCheckTopLevelCodeDecl(TopLevelCodeDecl *TLCD) {
714714
auto &Ctx = static_cast<Decl *>(TLCD)->getASTContext();
715715
DiagnosticSuppression suppression(Ctx.Diags);
716-
TypeChecker &TC = createTypeChecker(Ctx);
717-
TC.typeCheckTopLevelCodeDecl(TLCD);
716+
(void)createTypeChecker(Ctx);
717+
TypeChecker::typeCheckTopLevelCodeDecl(TLCD);
718718
return true;
719719
}
720720

lib/Sema/TypeChecker.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -946,19 +946,19 @@ class TypeChecker final {
946946
static BraceStmt *applyFunctionBuilderBodyTransform(FuncDecl *FD,
947947
BraceStmt *body,
948948
Type builderType);
949-
bool typeCheckClosureBody(ClosureExpr *closure);
949+
static bool typeCheckClosureBody(ClosureExpr *closure);
950950

951-
bool typeCheckTapBody(TapExpr *expr, DeclContext *DC);
951+
static bool typeCheckTapBody(TapExpr *expr, DeclContext *DC);
952952

953953
static Type typeCheckParameterDefault(Expr *&defaultValue, DeclContext *DC,
954954
Type paramType,
955955
bool isAutoClosure = false,
956956
bool canFail = true);
957957

958-
void typeCheckTopLevelCodeDecl(TopLevelCodeDecl *TLCD);
958+
static void typeCheckTopLevelCodeDecl(TopLevelCodeDecl *TLCD);
959959

960-
void processREPLTopLevel(SourceFile &SF, TopLevelContext &TLC,
961-
unsigned StartElem);
960+
static void processREPLTopLevel(SourceFile &SF, TopLevelContext &TLC,
961+
unsigned StartElem);
962962

963963
static void typeCheckDecl(Decl *D);
964964

@@ -1577,8 +1577,8 @@ class TypeChecker final {
15771577

15781578
/// Build implicit autoclosure expression wrapping a given expression.
15791579
/// Given expression represents computed result of the closure.
1580-
Expr *buildAutoClosureExpr(DeclContext *DC, Expr *expr,
1581-
FunctionType *closureType);
1580+
static Expr *buildAutoClosureExpr(DeclContext *DC, Expr *expr,
1581+
FunctionType *closureType);
15821582
/// @}
15831583

15841584
/// Retrieve a specific, known protocol.

0 commit comments

Comments
 (0)