mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Merge pull request #4579 from aleksgapp/sr-2209-access-scope
[SR-2209] Add real AccessScope type.
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "swift/AST/Decl.h"
|
||||
#include "swift/AST/AccessScope.h"
|
||||
#include "swift/AST/ArchetypeBuilder.h"
|
||||
#include "swift/AST/AST.h"
|
||||
#include "swift/AST/ASTContext.h"
|
||||
@@ -1873,18 +1874,13 @@ Accessibility ValueDecl::getFormalAccessImpl(const DeclContext *useDC) const {
|
||||
return getFormalAccess();
|
||||
}
|
||||
|
||||
const DeclContext *
|
||||
ValueDecl::getFormalAccessScope(const DeclContext *useDC) const {
|
||||
AccessScope ValueDecl::getFormalAccessScope(const DeclContext *useDC) const {
|
||||
const DeclContext *result = getDeclContext();
|
||||
Accessibility access = getFormalAccess(useDC);
|
||||
|
||||
while (!result->isModuleScopeContext()) {
|
||||
if (result->isLocalContext())
|
||||
return result;
|
||||
|
||||
if (access == Accessibility::Private) {
|
||||
return result;
|
||||
}
|
||||
if (result->isLocalContext() || access == Accessibility::Private)
|
||||
return AccessScope(result, true);
|
||||
|
||||
if (auto enclosingNominal = dyn_cast<NominalTypeDecl>(result)) {
|
||||
access = std::min(access, enclosingNominal->getFormalAccess(useDC));
|
||||
@@ -1909,15 +1905,15 @@ ValueDecl::getFormalAccessScope(const DeclContext *useDC) const {
|
||||
case Accessibility::Private:
|
||||
case Accessibility::FilePrivate:
|
||||
assert(result->isModuleScopeContext());
|
||||
return result;
|
||||
return AccessScope(result, access == Accessibility::Private);
|
||||
case Accessibility::Internal:
|
||||
return result->getParentModule();
|
||||
return AccessScope(result->getParentModule());
|
||||
case Accessibility::Public:
|
||||
case Accessibility::Open:
|
||||
return nullptr;
|
||||
return AccessScope::getPublic();
|
||||
}
|
||||
|
||||
return result;
|
||||
llvm_unreachable("unknown accessibility level");
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user