Skip to content

Commit b8d0cf3

Browse files
committed
[NFC] Only Resolve TypeReprs If Given a RequirementRepr
Resolve the written type instead of the semantic type since that's the only data these requests will have access to once RequirementRepr is made completely syntactic.
1 parent 68d2d82 commit b8d0cf3

File tree

2 files changed

+14
-34
lines changed

2 files changed

+14
-34
lines changed

lib/AST/NameLookup.cpp

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -857,8 +857,6 @@ SelfBoundsFromWhereClauseRequest::evaluate(
857857
if (auto identTypeRepr = dyn_cast<SimpleIdentTypeRepr>(typeRepr))
858858
isSelfLHS = (identTypeRepr->getNameRef().getBaseIdentifier() ==
859859
ctx.Id_Self);
860-
} else if (Type type = req.getSubject()) {
861-
isSelfLHS = type->isEqual(dc->getSelfInterfaceType());
862860
}
863861
if (!isSelfLHS)
864862
continue;
@@ -867,8 +865,6 @@ SelfBoundsFromWhereClauseRequest::evaluate(
867865
DirectlyReferencedTypeDecls rhsDecls;
868866
if (auto typeRepr = req.getConstraintRepr()) {
869867
rhsDecls = directReferencesForTypeRepr(evaluator, ctx, typeRepr, lookupDC);
870-
} else if (Type type = req.getConstraint()) {
871-
rhsDecls = directReferencesForType(type);
872868
}
873869

874870
SmallVector<ModuleDecl *, 2> modulesFound;
@@ -899,30 +895,24 @@ TypeDeclsFromWhereClauseRequest::evaluate(Evaluator &evaluator,
899895
ASTContext &ctx = ext->getASTContext();
900896

901897
TinyPtrVector<TypeDecl *> result;
898+
auto resolve = [&](TypeRepr *typeRepr) {
899+
auto decls = directReferencesForTypeRepr(evaluator, ctx, typeRepr, ext);
900+
result.insert(result.end(), decls.begin(), decls.end());
901+
};
902902
for (const auto &req : ext->getGenericParams()->getTrailingRequirements()) {
903-
auto resolve = [&](TypeLoc loc) {
904-
DirectlyReferencedTypeDecls decls;
905-
if (auto *typeRepr = loc.getTypeRepr())
906-
decls = directReferencesForTypeRepr(evaluator, ctx, typeRepr, ext);
907-
else if (Type type = loc.getType())
908-
decls = directReferencesForType(type);
909-
910-
result.insert(result.end(), decls.begin(), decls.end());
911-
};
912-
913903
switch (req.getKind()) {
914904
case RequirementReprKind::TypeConstraint:
915-
resolve(req.getSubjectLoc());
916-
resolve(req.getConstraintLoc());
905+
resolve(req.getSubjectRepr());
906+
resolve(req.getConstraintRepr());
917907
break;
918908

919909
case RequirementReprKind::SameType:
920-
resolve(req.getFirstTypeLoc());
921-
resolve(req.getSecondTypeLoc());
910+
resolve(req.getFirstTypeRepr());
911+
resolve(req.getSecondTypeRepr());
922912
break;
923913

924914
case RequirementReprKind::LayoutConstraint:
925-
resolve(req.getSubjectLoc());
915+
resolve(req.getSubjectRepr());
926916
break;
927917
}
928918
}

lib/Sema/TypeCheckGeneric.cpp

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -931,21 +931,11 @@ RequirementRequest::evaluate(Evaluator &evaluator,
931931
llvm_unreachable("No clients care about this. Use mapTypeIntoContext()");
932932
}
933933

934-
auto resolveType = [&](TypeLoc &typeLoc) -> Type {
935-
Type result;
936-
if (auto typeRepr = typeLoc.getTypeRepr())
937-
result = resolution->resolveType(typeRepr);
938-
else
939-
result = typeLoc.getType();
940-
941-
return result ? result : ErrorType::get(owner.dc->getASTContext());
942-
};
943-
944934
auto &reqRepr = getRequirement();
945935
switch (reqRepr.getKind()) {
946936
case RequirementReprKind::TypeConstraint: {
947-
Type subject = resolveType(reqRepr.getSubjectLoc());
948-
Type constraint = resolveType(reqRepr.getConstraintLoc());
937+
Type subject = resolution->resolveType(reqRepr.getSubjectRepr());
938+
Type constraint = resolution->resolveType(reqRepr.getConstraintRepr());
949939
return Requirement(constraint->getClassOrBoundGenericClass()
950940
? RequirementKind::Superclass
951941
: RequirementKind::Conformance,
@@ -954,12 +944,12 @@ RequirementRequest::evaluate(Evaluator &evaluator,
954944

955945
case RequirementReprKind::SameType:
956946
return Requirement(RequirementKind::SameType,
957-
resolveType(reqRepr.getFirstTypeLoc()),
958-
resolveType(reqRepr.getSecondTypeLoc()));
947+
resolution->resolveType(reqRepr.getFirstTypeRepr()),
948+
resolution->resolveType(reqRepr.getSecondTypeRepr()));
959949

960950
case RequirementReprKind::LayoutConstraint:
961951
return Requirement(RequirementKind::Layout,
962-
resolveType(reqRepr.getSubjectLoc()),
952+
resolution->resolveType(reqRepr.getSubjectRepr()),
963953
reqRepr.getLayoutConstraint());
964954
}
965955
llvm_unreachable("unhandled kind");

0 commit comments

Comments
 (0)