@@ -2781,10 +2781,12 @@ static bool checkAccessUsingAccessScopes(const DeclContext *useDC,
2781
2781
// /
2782
2782
// / See ValueDecl::isAccessibleFrom for a description of \p forConformance.
2783
2783
static bool checkAccess (const DeclContext *useDC, const ValueDecl *VD,
2784
- AccessLevel access, bool forConformance) {
2784
+ bool forConformance,
2785
+ llvm::function_ref<AccessLevel()> getAccessLevel) {
2785
2786
if (VD->getASTContext ().isAccessControlDisabled ())
2786
2787
return true ;
2787
2788
2789
+ auto access = getAccessLevel ();
2788
2790
auto *sourceDC = VD->getDeclContext ();
2789
2791
2790
2792
if (!forConformance) {
@@ -2846,8 +2848,8 @@ static bool checkAccess(const DeclContext *useDC, const ValueDecl *VD,
2846
2848
2847
2849
bool ValueDecl::isAccessibleFrom (const DeclContext *useDC,
2848
2850
bool forConformance) const {
2849
- auto access = getFormalAccess ();
2850
- bool result = checkAccess (useDC, this , access, forConformance );
2851
+ bool result = checkAccess (useDC, this , forConformance,
2852
+ [&]() { return getFormalAccess (); } );
2851
2853
2852
2854
// For everything outside of protocols and operators, we should get the same
2853
2855
// result using either implementation of checkAccess, because useDC must
@@ -2856,9 +2858,9 @@ bool ValueDecl::isAccessibleFrom(const DeclContext *useDC,
2856
2858
// because we're finding internal operators within private types. Fortunately
2857
2859
// we have a requirement that a member operator take the enclosing type as an
2858
2860
// argument, so it won't ever match.
2859
- assert (getDeclContext ()->getSelfProtocolDecl () ||
2860
- isOperator () ||
2861
- result == checkAccessUsingAccessScopes (useDC, this , access ));
2861
+ assert (getDeclContext ()->getSelfProtocolDecl () || isOperator () ||
2862
+ result ==
2863
+ checkAccessUsingAccessScopes (useDC, this , getFormalAccess () ));
2862
2864
2863
2865
return result;
2864
2866
}
@@ -2876,8 +2878,8 @@ bool AbstractStorageDecl::isSetterAccessibleFrom(const DeclContext *DC,
2876
2878
if (isa<ParamDecl>(this ))
2877
2879
return true ;
2878
2880
2879
- auto access = getSetterFormalAccess ();
2880
- return checkAccess (DC, this , access, forConformance );
2881
+ return checkAccess (DC, this , forConformance,
2882
+ [&]() { return getSetterFormalAccess (); } );
2881
2883
}
2882
2884
2883
2885
void ValueDecl::copyFormalAccessFrom (const ValueDecl *source,
0 commit comments