Skip to content

Commit 1578ab5

Browse files
committed
RequirementMachine: Refactor requests to not be downstream of the GenericSignatureBuilder
This will make it easier to remove the GenericSignatureBuilder (which still won't happen for a little while).
1 parent 1fc998a commit 1578ab5

File tree

6 files changed

+498
-221
lines changed

6 files changed

+498
-221
lines changed

include/swift/AST/Decl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4389,6 +4389,7 @@ class ProtocolDecl final : public NominalTypeDecl {
43894389
friend class ProtocolDependenciesRequest;
43904390
friend class RequirementSignatureRequest;
43914391
friend class RequirementSignatureRequestRQM;
4392+
friend class RequirementSignatureRequestGSB;
43924393
friend class ProtocolRequiresClassRequest;
43934394
friend class ExistentialConformsToSelfRequest;
43944395
friend class ExistentialRequiresAnyRequest;

include/swift/AST/TypeCheckRequests.h

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,27 @@ class RequirementSignatureRequestRQM :
493493
bool isCached() const { return true; }
494494
};
495495

496+
/// Compute a protocol's requirement signature using the GenericSignatureBuilder.
497+
/// This is temporary; once the GenericSignatureBuilder goes away this will
498+
/// be removed.
499+
class RequirementSignatureRequestGSB :
500+
public SimpleRequest<RequirementSignatureRequestGSB,
501+
RequirementSignature(ProtocolDecl *),
502+
RequestFlags::Cached> {
503+
public:
504+
using SimpleRequest::SimpleRequest;
505+
506+
private:
507+
friend SimpleRequest;
508+
509+
// Evaluation.
510+
RequirementSignature
511+
evaluate(Evaluator &evaluator, ProtocolDecl *proto) const;
512+
513+
public:
514+
bool isCached() const { return true; }
515+
};
516+
496517
/// Compute the requirements that describe a protocol.
497518
class RequirementSignatureRequest :
498519
public SimpleRequest<RequirementSignatureRequest,
@@ -1793,6 +1814,37 @@ class AbstractGenericSignatureRequestRQM :
17931814
}
17941815
};
17951816

1817+
/// Build a generic signature using the GenericSignatureBuilder. This is temporary;
1818+
/// once the GenericSignatureBuilder goes away this will be removed.
1819+
class AbstractGenericSignatureRequestGSB :
1820+
public SimpleRequest<AbstractGenericSignatureRequestGSB,
1821+
GenericSignatureWithError (const GenericSignatureImpl *,
1822+
SmallVector<GenericTypeParamType *, 2>,
1823+
SmallVector<Requirement, 2>),
1824+
RequestFlags::Cached> {
1825+
public:
1826+
using SimpleRequest::SimpleRequest;
1827+
1828+
private:
1829+
friend SimpleRequest;
1830+
1831+
// Evaluation.
1832+
GenericSignatureWithError
1833+
evaluate(Evaluator &evaluator,
1834+
const GenericSignatureImpl *baseSignature,
1835+
SmallVector<GenericTypeParamType *, 2> addedParameters,
1836+
SmallVector<Requirement, 2> addedRequirements) const;
1837+
1838+
public:
1839+
// Separate caching.
1840+
bool isCached() const { return true; }
1841+
1842+
/// Abstract generic signature requests never have source-location info.
1843+
SourceLoc getNearestLoc() const {
1844+
return SourceLoc();
1845+
}
1846+
};
1847+
17961848
class InferredGenericSignatureRequest :
17971849
public SimpleRequest<InferredGenericSignatureRequest,
17981850
GenericSignatureWithError (ModuleDecl *,
@@ -1876,6 +1928,48 @@ class InferredGenericSignatureRequestRQM :
18761928
void noteCycleStep(DiagnosticEngine &diags) const;
18771929
};
18781930

1931+
/// Build a generic signature using the GenericSignatureBuilder. This is temporary;
1932+
/// once the GenericSignatureBuilder goes away this will be removed.
1933+
class InferredGenericSignatureRequestGSB :
1934+
public SimpleRequest<InferredGenericSignatureRequestGSB,
1935+
GenericSignatureWithError (ModuleDecl *,
1936+
const GenericSignatureImpl *,
1937+
GenericParamList *,
1938+
WhereClauseOwner,
1939+
SmallVector<Requirement, 2>,
1940+
SmallVector<TypeLoc, 2>,
1941+
bool),
1942+
RequestFlags::Cached> {
1943+
public:
1944+
using SimpleRequest::SimpleRequest;
1945+
1946+
private:
1947+
friend SimpleRequest;
1948+
1949+
// Evaluation.
1950+
GenericSignatureWithError
1951+
evaluate(Evaluator &evaluator,
1952+
ModuleDecl *parentModule,
1953+
const GenericSignatureImpl *baseSignature,
1954+
GenericParamList *genericParams,
1955+
WhereClauseOwner whereClause,
1956+
SmallVector<Requirement, 2> addedRequirements,
1957+
SmallVector<TypeLoc, 2> inferenceSources,
1958+
bool allowConcreteGenericParams) const;
1959+
1960+
public:
1961+
// Separate caching.
1962+
bool isCached() const { return true; }
1963+
1964+
/// Inferred generic signature requests don't have source-location info.
1965+
SourceLoc getNearestLoc() const {
1966+
return SourceLoc();
1967+
}
1968+
1969+
// Cycle handling.
1970+
void noteCycleStep(DiagnosticEngine &diags) const;
1971+
};
1972+
18791973
void simple_display(llvm::raw_ostream &out, const TypeLoc source);
18801974

18811975
class ExtendedTypeRequest

include/swift/AST/TypeCheckerTypeIDZone.def

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ SWIFT_REQUEST(TypeChecker, AbstractGenericSignatureRequestRQM,
2525
SmallVector<GenericTypeParamType *, 2>,
2626
SmallVector<Requirement, 2>),
2727
Cached, NoLocationInfo)
28+
SWIFT_REQUEST(TypeChecker, AbstractGenericSignatureRequestGSB,
29+
GenericSignatureWithError (const GenericSignatureImpl *,
30+
SmallVector<GenericTypeParamType *, 2>,
31+
SmallVector<Requirement, 2>),
32+
Cached, NoLocationInfo)
2833
SWIFT_REQUEST(TypeChecker, ApplyAccessNoteRequest,
2934
evaluator::SideEffect(ValueDecl *), Cached, NoLocationInfo)
3035
SWIFT_REQUEST(TypeChecker, AttachedResultBuilderRequest,
@@ -192,6 +197,14 @@ SWIFT_REQUEST(TypeChecker, InferredGenericSignatureRequestRQM,
192197
SmallVector<Requirement, 2>,
193198
SmallVector<TypeLoc, 2>, bool),
194199
Cached, NoLocationInfo)
200+
SWIFT_REQUEST(TypeChecker, InferredGenericSignatureRequestGSB,
201+
GenericSignatureWithError (ModuleDecl *,
202+
const GenericSignatureImpl *,
203+
GenericParamList *,
204+
WhereClauseOwner,
205+
SmallVector<Requirement, 2>,
206+
SmallVector<TypeLoc, 2>, bool),
207+
Cached, NoLocationInfo)
195208
SWIFT_REQUEST(TypeChecker, DistributedModuleIsAvailableRequest,
196209
bool(ModuleDecl *), Cached, NoLocationInfo)
197210
SWIFT_REQUEST(TypeChecker, InheritedTypeRequest,
@@ -288,6 +301,9 @@ SWIFT_REQUEST(TypeChecker, ProtocolDependenciesRequest,
288301
SWIFT_REQUEST(TypeChecker, RequirementSignatureRequestRQM,
289302
RequirementSignature(ProtocolDecl *), Cached,
290303
NoLocationInfo)
304+
SWIFT_REQUEST(TypeChecker, RequirementSignatureRequestGSB,
305+
RequirementSignature(ProtocolDecl *), Cached,
306+
NoLocationInfo)
291307
SWIFT_REQUEST(TypeChecker, RequirementSignatureRequest,
292308
RequirementSignature(ProtocolDecl *), SeparatelyCached,
293309
NoLocationInfo)

0 commit comments

Comments
 (0)