Skip to content

Commit d197f9d

Browse files
committed
[NFC] Make RequirementRequest Cached
In preparation for the removal of the TypeLocs here, cache down the resulting Requirement from a RequirementRepr.
1 parent b8d0cf3 commit d197f9d

File tree

3 files changed

+3
-59
lines changed

3 files changed

+3
-59
lines changed

include/swift/AST/TypeCheckRequests.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ class RequirementRequest :
441441
public SimpleRequest<RequirementRequest,
442442
Requirement(WhereClauseOwner, unsigned,
443443
TypeResolutionStage),
444-
RequestFlags::SeparatelyCached> {
444+
RequestFlags::Cached> {
445445
public:
446446
using SimpleRequest::SimpleRequest;
447447

@@ -464,10 +464,8 @@ class RequirementRequest :
464464
// Cycle handling.
465465
void noteCycleStep(DiagnosticEngine &diags) const;
466466

467-
// Separate caching.
467+
// Caching.
468468
bool isCached() const;
469-
Optional<Requirement> getCachedResult() const;
470-
void cacheResult(Requirement value) const;
471469
};
472470

473471
/// Generate the USR for the given declaration.

include/swift/AST/TypeCheckerTypeIDZone.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ SWIFT_REQUEST(TypeChecker, ProtocolRequiresClassRequest, bool(ProtocolDecl *),
176176
SeparatelyCached, NoLocationInfo)
177177
SWIFT_REQUEST(TypeChecker, RequirementRequest,
178178
Requirement(WhereClauseOwner, unsigned, TypeResolutionStage),
179-
SeparatelyCached, HasNearestLocation)
179+
Cached, HasNearestLocation)
180180
SWIFT_REQUEST(TypeChecker, RequirementSignatureRequest,
181181
ArrayRef<Requirement>(ProtocolDecl *), SeparatelyCached,
182182
NoLocationInfo)

lib/AST/TypeCheckRequests.cpp

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -459,60 +459,6 @@ bool RequirementRequest::isCached() const {
459459
return std::get<2>(getStorage()) == TypeResolutionStage::Interface;
460460
}
461461

462-
Optional<Requirement> RequirementRequest::getCachedResult() const {
463-
auto &reqRepr = getRequirement();
464-
switch (reqRepr.getKind()) {
465-
case RequirementReprKind::TypeConstraint:
466-
if (!reqRepr.getSubjectLoc().wasValidated() ||
467-
!reqRepr.getConstraintLoc().wasValidated())
468-
return None;
469-
470-
return Requirement(reqRepr.getConstraint()->getClassOrBoundGenericClass()
471-
? RequirementKind::Superclass
472-
: RequirementKind::Conformance,
473-
reqRepr.getSubject(),
474-
reqRepr.getConstraint());
475-
476-
case RequirementReprKind::SameType:
477-
if (!reqRepr.getFirstTypeLoc().wasValidated() ||
478-
!reqRepr.getSecondTypeLoc().wasValidated())
479-
return None;
480-
481-
return Requirement(RequirementKind::SameType, reqRepr.getFirstType(),
482-
reqRepr.getSecondType());
483-
484-
case RequirementReprKind::LayoutConstraint:
485-
if (!reqRepr.getSubjectLoc().wasValidated())
486-
return None;
487-
488-
return Requirement(RequirementKind::Layout, reqRepr.getSubject(),
489-
reqRepr.getLayoutConstraint());
490-
}
491-
llvm_unreachable("unhandled kind");
492-
}
493-
494-
void RequirementRequest::cacheResult(Requirement value) const {
495-
auto &reqRepr = getRequirement();
496-
switch (value.getKind()) {
497-
case RequirementKind::Conformance:
498-
case RequirementKind::Superclass:
499-
reqRepr.getSubjectLoc().setType(value.getFirstType());
500-
reqRepr.getConstraintLoc().setType(value.getSecondType());
501-
break;
502-
503-
case RequirementKind::SameType:
504-
reqRepr.getFirstTypeLoc().setType(value.getFirstType());
505-
reqRepr.getSecondTypeLoc().setType(value.getSecondType());
506-
break;
507-
508-
case RequirementKind::Layout:
509-
reqRepr.getSubjectLoc().setType(value.getFirstType());
510-
reqRepr.getLayoutConstraintLoc()
511-
.setLayoutConstraint(value.getLayoutConstraint());
512-
break;
513-
}
514-
}
515-
516462
//----------------------------------------------------------------------------//
517463
// DefaultTypeRequest.
518464
//----------------------------------------------------------------------------//

0 commit comments

Comments
 (0)