Skip to content

Commit 528519c

Browse files
committed
Sema: Refactor computeLoweredProperties() to not call TypeChecker::checkConformance()
1 parent 28f2621 commit 528519c

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

lib/Sema/TypeCheckStorage.cpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -157,21 +157,30 @@ static void computeLoweredProperties(NominalTypeDecl *decl,
157157
if (classDecl->isActor()) {
158158
ASTContext &ctx = decl->getASTContext();
159159

160-
if (auto actorProto = ctx.getProtocol(KnownProtocolKind::Actor)) {
161-
SmallVector<ProtocolConformance *, 1> conformances;
162-
classDecl->lookupConformance(actorProto, conformances);
163-
for (auto conformance : conformances)
164-
TypeChecker::checkConformance(conformance->getRootNormalConformance());
165-
}
166-
167-
// If this is a distributed actor, synthesize its special stored properties.
168-
if (classDecl->isDistributedActor()) {
169-
if (auto actorProto = ctx.getProtocol(KnownProtocolKind::DistributedActor)) {
160+
auto evaluateConformance = [&](KnownProtocolKind Kind) {
161+
if (auto actorProto = ctx.getProtocol(Kind)) {
170162
SmallVector<ProtocolConformance *, 1> conformances;
171163
classDecl->lookupConformance(actorProto, conformances);
172-
for (auto conformance : conformances)
173-
TypeChecker::checkConformance(conformance->getRootNormalConformance());
164+
for (auto conformance : conformances) {
165+
// FIXME: This is too much. Instead, we should force the witnesses.
166+
// that we actually need.
167+
168+
auto *normal = conformance->getRootNormalConformance();
169+
evaluateOrDefault(ctx.evaluator,
170+
ResolveTypeWitnessesRequest{normal},
171+
evaluator::SideEffect());
172+
evaluateOrDefault(ctx.evaluator,
173+
ResolveValueWitnessesRequest{normal},
174+
evaluator::SideEffect());
175+
}
174176
}
177+
};
178+
179+
evaluateConformance(KnownProtocolKind::Actor);
180+
181+
// If this is a distributed actor, synthesize its special stored properties.
182+
if (classDecl->isDistributedActor()) {
183+
evaluateConformance(KnownProtocolKind::DistributedActor);
175184
}
176185
}
177186
}

0 commit comments

Comments
 (0)