Skip to content

Commit 642f58d

Browse files
committed
Make checkUnsupportedProtocolType a static member
1 parent 5f3b1da commit 642f58d

File tree

4 files changed

+40
-34
lines changed

4 files changed

+40
-34
lines changed

lib/Sema/MiscDiagnostics.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2918,11 +2918,11 @@ void swift::performAbstractFuncDeclDiagnostics(TypeChecker &TC,
29182918
}
29192919

29202920
// Perform MiscDiagnostics on Switch Statements.
2921-
static void checkSwitch(TypeChecker &TC, const SwitchStmt *stmt) {
2921+
static void checkSwitch(ASTContext &ctx, const SwitchStmt *stmt) {
29222922
// We want to warn about "case .Foo, .Bar where 1 != 100:" since the where
29232923
// clause only applies to the second case, and this is surprising.
29242924
for (auto cs : stmt->getCases()) {
2925-
TC.checkUnsupportedProtocolType(cs);
2925+
TypeChecker::checkUnsupportedProtocolType(ctx, cs);
29262926

29272927
// The case statement can have multiple case items, each can have a where.
29282928
// If we find a "where", and there is a preceding item without a where, and
@@ -2949,25 +2949,25 @@ static void checkSwitch(TypeChecker &TC, const SwitchStmt *stmt) {
29492949
if (prevLoc.isInvalid() || thisLoc.isInvalid())
29502950
continue;
29512951

2952-
auto &SM = TC.Context.SourceMgr;
2952+
auto &SM = ctx.SourceMgr;
29532953
auto prevLineCol = SM.getLineAndColumn(prevLoc);
29542954
if (SM.getLineNumber(thisLoc) != prevLineCol.first)
29552955
continue;
2956-
2957-
TC.diagnose(items[i].getWhereLoc(), diag::where_on_one_item)
2956+
2957+
ctx.Diags.diagnose(items[i].getWhereLoc(), diag::where_on_one_item)
29582958
.highlight(items[i].getPattern()->getSourceRange())
29592959
.highlight(where->getSourceRange());
29602960

29612961
// Whitespace it out to the same column as the previous item.
29622962
std::string whitespace(prevLineCol.second-1, ' ');
2963-
TC.diagnose(thisLoc, diag::add_where_newline)
2963+
ctx.Diags.diagnose(thisLoc, diag::add_where_newline)
29642964
.fixItInsert(thisLoc, "\n"+whitespace);
29652965

29662966
auto whereRange = SourceRange(items[i].getWhereLoc(),
29672967
where->getEndLoc());
29682968
auto charRange = Lexer::getCharSourceRangeFromSourceRange(SM, whereRange);
29692969
auto whereText = SM.extractText(charRange);
2970-
TC.diagnose(prevLoc, diag::duplicate_where)
2970+
ctx.Diags.diagnose(prevLoc, diag::duplicate_where)
29712971
.fixItInsertAfter(items[i-1].getEndLoc(), " " + whereText.str())
29722972
.highlight(items[i-1].getSourceRange());
29732973
}
@@ -3999,10 +3999,10 @@ void swift::performSyntacticExprDiagnostics(TypeChecker &TC, const Expr *E,
39993999
}
40004000

40014001
void swift::performStmtDiagnostics(TypeChecker &TC, const Stmt *S) {
4002-
TC.checkUnsupportedProtocolType(const_cast<Stmt *>(S));
4002+
TypeChecker::checkUnsupportedProtocolType(TC.Context, const_cast<Stmt *>(S));
40034003

40044004
if (auto switchStmt = dyn_cast<SwitchStmt>(S))
4005-
checkSwitch(TC, switchStmt);
4005+
checkSwitch(TC.Context, switchStmt);
40064006

40074007
checkStmtConditionTrailingClosure(TC, S);
40084008

lib/Sema/TypeCheckDecl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2241,7 +2241,7 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
22412241

22422242
DeclVisitor<DeclChecker>::visit(decl);
22432243

2244-
TC.checkUnsupportedProtocolType(decl);
2244+
TypeChecker::checkUnsupportedProtocolType(decl);
22452245

22462246
if (auto VD = dyn_cast<ValueDecl>(decl)) {
22472247
auto &Context = TC.Context;

lib/Sema/TypeCheckType.cpp

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3384,13 +3384,13 @@ namespace {
33843384
class UnsupportedProtocolVisitor
33853385
: public TypeReprVisitor<UnsupportedProtocolVisitor>, public ASTWalker
33863386
{
3387-
TypeChecker &TC;
3387+
ASTContext &Ctx;
33883388
bool checkStatements;
33893389
bool hitTopStmt;
33903390

33913391
public:
3392-
UnsupportedProtocolVisitor(TypeChecker &tc, bool checkStatements)
3393-
: TC(tc), checkStatements(checkStatements), hitTopStmt(false) { }
3392+
UnsupportedProtocolVisitor(ASTContext &ctx, bool checkStatements)
3393+
: Ctx(ctx), checkStatements(checkStatements), hitTopStmt(false) { }
33943394

33953395
bool walkToTypeReprPre(TypeRepr *T) override {
33963396
if (T->isInvalid())
@@ -3429,8 +3429,8 @@ class UnsupportedProtocolVisitor
34293429
auto comp = T->getComponentRange().back();
34303430
if (auto *proto = dyn_cast_or_null<ProtocolDecl>(comp->getBoundDecl())) {
34313431
if (!proto->existentialTypeSupported()) {
3432-
TC.diagnose(comp->getIdLoc(), diag::unsupported_existential_type,
3433-
proto->getName());
3432+
Ctx.Diags.diagnose(comp->getIdLoc(), diag::unsupported_existential_type,
3433+
proto->getName());
34343434
T->setInvalid();
34353435
}
34363436
} else if (auto *alias = dyn_cast_or_null<TypeAliasDecl>(comp->getBoundDecl())) {
@@ -3446,8 +3446,9 @@ class UnsupportedProtocolVisitor
34463446
if (protoDecl->existentialTypeSupported())
34473447
continue;
34483448

3449-
TC.diagnose(comp->getIdLoc(), diag::unsupported_existential_type,
3450-
protoDecl->getName());
3449+
Ctx.Diags.diagnose(comp->getIdLoc(),
3450+
diag::unsupported_existential_type,
3451+
protoDecl->getName());
34513452
T->setInvalid();
34523453
}
34533454
}
@@ -3474,49 +3475,52 @@ void TypeChecker::checkUnsupportedProtocolType(Decl *decl) {
34743475
if (!decl || decl->isInvalid())
34753476
return;
34763477

3478+
auto &ctx = decl->getASTContext();
34773479
if (auto *protocolDecl = dyn_cast<ProtocolDecl>(decl))
3478-
checkUnsupportedProtocolType(protocolDecl->getTrailingWhereClause());
3480+
checkUnsupportedProtocolType(ctx, protocolDecl->getTrailingWhereClause());
34793481
else if (auto *genericDecl = dyn_cast<GenericTypeDecl>(decl))
3480-
checkUnsupportedProtocolType(genericDecl->getGenericParams());
3482+
checkUnsupportedProtocolType(ctx, genericDecl->getGenericParams());
34813483
else if (auto *assocType = dyn_cast<AssociatedTypeDecl>(decl))
3482-
checkUnsupportedProtocolType(assocType->getTrailingWhereClause());
3484+
checkUnsupportedProtocolType(ctx, assocType->getTrailingWhereClause());
34833485
else if (auto *extDecl = dyn_cast<ExtensionDecl>(decl))
3484-
checkUnsupportedProtocolType(extDecl->getTrailingWhereClause());
3486+
checkUnsupportedProtocolType(ctx, extDecl->getTrailingWhereClause());
34853487
else if (auto *subscriptDecl = dyn_cast<SubscriptDecl>(decl))
3486-
checkUnsupportedProtocolType(subscriptDecl->getGenericParams());
3488+
checkUnsupportedProtocolType(ctx, subscriptDecl->getGenericParams());
34873489
else if (auto *funcDecl = dyn_cast<AbstractFunctionDecl>(decl)) {
34883490
if (!isa<AccessorDecl>(funcDecl))
3489-
checkUnsupportedProtocolType(funcDecl->getGenericParams());
3491+
checkUnsupportedProtocolType(ctx, funcDecl->getGenericParams());
34903492
}
34913493

34923494
if (isa<TypeDecl>(decl) || isa<ExtensionDecl>(decl))
34933495
return;
34943496

3495-
UnsupportedProtocolVisitor visitor(*this, /*checkStatements=*/false);
3497+
UnsupportedProtocolVisitor visitor(ctx, /*checkStatements=*/false);
34963498
decl->walk(visitor);
34973499
}
34983500

3499-
void TypeChecker::checkUnsupportedProtocolType(Stmt *stmt) {
3501+
void TypeChecker::checkUnsupportedProtocolType(ASTContext &ctx, Stmt *stmt) {
35003502
if (!stmt)
35013503
return;
35023504

3503-
UnsupportedProtocolVisitor visitor(*this, /*checkStatements=*/true);
3505+
UnsupportedProtocolVisitor visitor(ctx, /*checkStatements=*/true);
35043506
stmt->walk(visitor);
35053507
}
35063508

3507-
void TypeChecker::checkUnsupportedProtocolType(TrailingWhereClause *whereClause) {
3509+
void TypeChecker::checkUnsupportedProtocolType(
3510+
ASTContext &ctx, TrailingWhereClause *whereClause) {
35083511
if (whereClause == nullptr)
35093512
return;
35103513

3511-
UnsupportedProtocolVisitor visitor(*this, /*checkStatements=*/false);
3514+
UnsupportedProtocolVisitor visitor(ctx, /*checkStatements=*/false);
35123515
visitor.visitRequirements(whereClause->getRequirements());
35133516
}
35143517

3515-
void TypeChecker::checkUnsupportedProtocolType(GenericParamList *genericParams) {
3518+
void TypeChecker::checkUnsupportedProtocolType(
3519+
ASTContext &ctx, GenericParamList *genericParams) {
35163520
if (genericParams == nullptr)
35173521
return;
35183522

3519-
UnsupportedProtocolVisitor visitor(*this, /*checkStatements=*/false);
3523+
UnsupportedProtocolVisitor visitor(ctx, /*checkStatements=*/false);
35203524
visitor.visitRequirements(genericParams->getRequirements());
35213525
}
35223526

lib/Sema/TypeChecker.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -783,18 +783,20 @@ class TypeChecker final : public LazyResolver {
783783
TypeResolutionOptions options);
784784

785785
/// Check for unsupported protocol types in the given declaration.
786-
void checkUnsupportedProtocolType(Decl *decl);
786+
static void checkUnsupportedProtocolType(Decl *decl);
787787

788788
/// Check for unsupported protocol types in the given statement.
789-
void checkUnsupportedProtocolType(Stmt *stmt);
789+
static void checkUnsupportedProtocolType(ASTContext &ctx, Stmt *stmt);
790790

791791
/// Check for unsupported protocol types in the given generic requirement
792792
/// list.
793-
void checkUnsupportedProtocolType(TrailingWhereClause *whereClause);
793+
static void checkUnsupportedProtocolType(ASTContext &ctx,
794+
TrailingWhereClause *whereClause);
794795

795796
/// Check for unsupported protocol types in the given generic requirement
796797
/// list.
797-
void checkUnsupportedProtocolType(GenericParamList *genericParams);
798+
static void checkUnsupportedProtocolType(ASTContext &ctx,
799+
GenericParamList *genericParams);
798800

799801
/// Expose TypeChecker's handling of GenericParamList to SIL parsing.
800802
static GenericEnvironment *

0 commit comments

Comments
 (0)