Skip to content

Commit 4c7ca3e

Browse files
committed
Convert ApplyAccessNoteRequest to use separate caching
1 parent ec28d62 commit 4c7ca3e

File tree

4 files changed

+27
-4
lines changed

4 files changed

+27
-4
lines changed

include/swift/AST/Decl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2831,6 +2831,9 @@ class ValueDecl : public Decl {
28312831
/// Whether we're in the common case where the ActorIsolationRequest
28322832
/// request returned ActorIsolation::forUnspecified().
28332833
unsigned noActorIsolation : 1;
2834+
2835+
/// Whether we've evaluated the ApplyAccessNoteRequest.
2836+
unsigned accessNoteApplied : 1;
28342837
} LazySemanticInfo = { };
28352838

28362839
friend class DynamicallyReplacedDeclRequest;
@@ -2843,6 +2846,7 @@ class ValueDecl : public Decl {
28432846
friend class CheckRedeclarationRequest;
28442847
friend class ActorIsolationRequest;
28452848
friend class DynamicallyReplacedDeclRequest;
2849+
friend class ApplyAccessNoteRequest;
28462850
friend class Decl;
28472851
SourceLoc getLocFromSource() const { return NameLoc; }
28482852
protected:

include/swift/AST/TypeCheckRequests.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3316,7 +3316,7 @@ class SpecializeAttrTargetDeclRequest
33163316
class ApplyAccessNoteRequest
33173317
: public SimpleRequest<ApplyAccessNoteRequest,
33183318
evaluator::SideEffect(ValueDecl *),
3319-
RequestFlags::Cached> {
3319+
RequestFlags::SeparatelyCached> {
33203320
public:
33213321
using SimpleRequest::SimpleRequest;
33223322

@@ -3326,11 +3326,12 @@ class ApplyAccessNoteRequest
33263326
evaluator::SideEffect evaluate(Evaluator &evaluator, ValueDecl *VD) const;
33273327

33283328
public:
3329-
// Cached.
3329+
// Separate caching.
33303330
bool isCached() const { return true; }
3331+
std::optional<evaluator::SideEffect> getCachedResult() const;
3332+
void cacheResult(evaluator::SideEffect value) const;
33313333
};
33323334

3333-
33343335
class TypeCheckSourceFileRequest
33353336
: public SimpleRequest<
33363337
TypeCheckSourceFileRequest, evaluator::SideEffect(SourceFile *),

include/swift/AST/TypeCheckerTypeIDZone.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ SWIFT_REQUEST(TypeChecker, AbstractGenericSignatureRequest,
2222
bool),
2323
Cached, NoLocationInfo)
2424
SWIFT_REQUEST(TypeChecker, ApplyAccessNoteRequest,
25-
evaluator::SideEffect(ValueDecl *), Cached, NoLocationInfo)
25+
evaluator::SideEffect(ValueDecl *), SeparatelyCached, NoLocationInfo)
2626
SWIFT_REQUEST(TypeChecker, AttachedResultBuilderRequest,
2727
CustomAttr *(ValueDecl *), Cached, NoLocationInfo)
2828
SWIFT_REQUEST(TypeChecker, AttachedPropertyWrapperTypeRequest,

lib/AST/TypeCheckRequests.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,24 @@ void DynamicallyReplacedDeclRequest::cacheResult(ValueDecl *result) const {
376376
decl->getASTContext().evaluator.cacheNonEmptyOutput(*this, std::move(result));
377377
}
378378

379+
//----------------------------------------------------------------------------//
380+
// ApplyAccessNoteRequest computation.
381+
//----------------------------------------------------------------------------//
382+
383+
std::optional<evaluator::SideEffect>
384+
ApplyAccessNoteRequest::getCachedResult() const {
385+
auto *decl = std::get<0>(getStorage());
386+
if (decl->LazySemanticInfo.accessNoteApplied)
387+
return evaluator::SideEffect();
388+
return std::nullopt;
389+
}
390+
391+
392+
void ApplyAccessNoteRequest::cacheResult(evaluator::SideEffect result) const {
393+
auto *decl = std::get<0>(getStorage());
394+
decl->LazySemanticInfo.accessNoteApplied = 1;
395+
}
396+
379397
//----------------------------------------------------------------------------//
380398
// RequirementSignatureRequest computation.
381399
//----------------------------------------------------------------------------//

0 commit comments

Comments
 (0)