Skip to content

Commit 7848b4f

Browse files
committed
Sema: Remove usages of AbstractTypeParamDecl::getSuperclass()/getConformedProtocols()
1 parent 472c863 commit 7848b4f

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

lib/Sema/CSRanking.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -238,33 +238,38 @@ static bool isDeclMoreConstrainedThan(ValueDecl *decl1, ValueDecl *decl2) {
238238
if (decl1->getKind() != decl2->getKind() || isa<TypeDecl>(decl1))
239239
return false;
240240

241-
GenericParamList *gp1 = nullptr, *gp2 = nullptr;
241+
bool bothGeneric = false;
242+
GenericSignature sig1, sig2;
242243

243244
auto func1 = dyn_cast<FuncDecl>(decl1);
244245
auto func2 = dyn_cast<FuncDecl>(decl2);
245246
if (func1 && func2) {
246-
gp1 = func1->getGenericParams();
247-
gp2 = func2->getGenericParams();
247+
bothGeneric = func1->isGeneric() && func2->isGeneric();
248+
249+
sig1 = func1->getGenericSignature();
250+
sig2 = func2->getGenericSignature();
248251
}
249252

250253
auto subscript1 = dyn_cast<SubscriptDecl>(decl1);
251254
auto subscript2 = dyn_cast<SubscriptDecl>(decl2);
252255
if (subscript1 && subscript2) {
253-
gp1 = subscript1->getGenericParams();
254-
gp2 = subscript2->getGenericParams();
256+
bothGeneric = subscript1->isGeneric() && subscript2->isGeneric();
257+
258+
sig1 = subscript1->getGenericSignature();
259+
sig2 = subscript2->getGenericSignature();
255260
}
256261

257-
if (gp1 && gp2) {
258-
auto params1 = gp1->getParams();
259-
auto params2 = gp2->getParams();
262+
if (bothGeneric) {
263+
auto params1 = sig1.getInnermostGenericParams();
264+
auto params2 = sig2.getInnermostGenericParams();
260265

261266
if (params1.size() == params2.size()) {
262267
for (size_t i = 0; i < params1.size(); i++) {
263268
auto p1 = params1[i];
264269
auto p2 = params2[i];
265270

266-
int np1 = static_cast<int>(p1->getConformingProtocols().size());
267-
int np2 = static_cast<int>(p2->getConformingProtocols().size());
271+
int np1 = static_cast<int>(sig1->getRequiredProtocols(p1).size());
272+
int np2 = static_cast<int>(sig2->getRequiredProtocols(p2).size());
268273
int aDelta = np1 - np2;
269274

270275
if (aDelta)

0 commit comments

Comments
 (0)