mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Remove SimpleRequest::breakCycle
This patch removes the need for Request objects to provide a default cycle-breaking value, instead opting to return llvm::Expected so clients must handle a cycle failure explicitly. Currently, all clients do the 'default' behavior, but this opens the possibility for future requests to handle failures explicitly.
This commit is contained in:
committed by
Harlan Haskins
parent
be0e1643d6
commit
5a6985f39e
@@ -2168,8 +2168,9 @@ resolveTypeDeclsToNominal(Evaluator &evaluator,
|
||||
if (!typealiases.insert(typealias).second)
|
||||
continue;
|
||||
|
||||
auto underlyingTypeReferences
|
||||
= evaluator(UnderlyingTypeDeclsReferencedRequest{typealias});
|
||||
auto underlyingTypeReferences = evaluateOrDefault(evaluator,
|
||||
UnderlyingTypeDeclsReferencedRequest{typealias}, {});
|
||||
|
||||
auto underlyingNominalReferences
|
||||
= resolveTypeDeclsToNominal(evaluator, ctx, underlyingTypeReferences,
|
||||
modulesFound, anyObject, typealiases);
|
||||
@@ -2443,12 +2444,13 @@ DirectlyReferencedTypeDecls UnderlyingTypeDeclsReferencedRequest::evaluate(
|
||||
}
|
||||
|
||||
/// Evaluate a superclass declaration request.
|
||||
ClassDecl *SuperclassDeclRequest::evaluate(Evaluator &evaluator,
|
||||
NominalTypeDecl *subject) const {
|
||||
llvm::Expected<ClassDecl *>
|
||||
SuperclassDeclRequest::evaluate(Evaluator &evaluator,
|
||||
NominalTypeDecl *subject) const {
|
||||
for (unsigned i : indices(subject->getInherited())) {
|
||||
// Find the inherited declarations referenced at this position.
|
||||
auto inheritedTypes =
|
||||
evaluator(InheritedDeclsReferencedRequest{subject, i});
|
||||
auto inheritedTypes = evaluateOrDefault(evaluator,
|
||||
InheritedDeclsReferencedRequest{subject, i}, {});
|
||||
|
||||
// Resolve those type declarations to nominal type declarations.
|
||||
SmallVector<ModuleDecl *, 2> modulesFound;
|
||||
@@ -2467,8 +2469,9 @@ ClassDecl *SuperclassDeclRequest::evaluate(Evaluator &evaluator,
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
NominalTypeDecl *ExtendedNominalRequest::evaluate(Evaluator &evaluator,
|
||||
ExtensionDecl *ext) const {
|
||||
llvm::Expected<NominalTypeDecl *>
|
||||
ExtendedNominalRequest::evaluate(Evaluator &evaluator,
|
||||
ExtensionDecl *ext) const {
|
||||
DirectlyReferencedTypeDecls referenced;
|
||||
ASTContext &ctx = ext->getASTContext();
|
||||
|
||||
@@ -2504,7 +2507,8 @@ void swift::getDirectlyInheritedNominalTypeDecls(
|
||||
: extDecl->getASTContext();
|
||||
|
||||
// Find inherited declarations.
|
||||
auto referenced = ctx.evaluator(InheritedDeclsReferencedRequest{decl, i});
|
||||
auto referenced = evaluateOrDefault(ctx.evaluator,
|
||||
InheritedDeclsReferencedRequest{decl, i}, {});
|
||||
|
||||
// Resolve those type declarations to nominal type declarations.
|
||||
SmallVector<ModuleDecl *, 2> modulesFound;
|
||||
|
||||
Reference in New Issue
Block a user