Skip to content

Commit 91f7854

Browse files
authored
Merge pull request swiftlang#62652 from apple/es-pkg-acl
[NFC] Add 'package' access modifier to AccessLevel
2 parents 3cc5628 + bf8f9a8 commit 91f7854

32 files changed

+180
-129
lines changed

include/swift/AST/AccessScope.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ class AccessScope {
9898
}
9999
if (isPackage())
100100
return AS.isPublic();
101-
102101
// If this is public, it can't be less than access level of AS
103102
// so return false
104103
return false;

include/swift/AST/AttrKind.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ enum class AccessLevel : uint8_t {
6060
FilePrivate,
6161
/// Internal access is limited to the current module.
6262
Internal,
63+
/// Package access is not limited, but some capabilities may be
64+
/// restricted outside of the current package containing modules.
65+
/// It's similar to Public in that it's accessible from other modules
66+
/// and subclassable only within the defining module as long as
67+
/// the modules are in the same package.
68+
Package,
6369
/// Public access is not limited, but some capabilities may be
6470
/// restricted outside of the current module.
6571
Public,

include/swift/AST/Decl.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -693,13 +693,14 @@ class alignas(1 << DeclAlignInBits) Decl : public ASTAllocated<Decl> {
693693
NumPathElements : 8
694694
);
695695

696-
SWIFT_INLINE_BITFIELD(ExtensionDecl, Decl, 3+1,
696+
SWIFT_INLINE_BITFIELD(ExtensionDecl, Decl, 4+1,
697697
/// An encoding of the default and maximum access level for this extension.
698+
/// The value 4 corresponds to AccessLevel::Public
698699
///
699700
/// This is encoded as (1 << (maxAccess-1)) | (1 << (defaultAccess-1)),
700701
/// which works because the maximum is always greater than or equal to the
701702
/// default, and 'private' is never used. 0 represents an uncomputed value.
702-
DefaultAndMaxAccessLevel : 3,
703+
DefaultAndMaxAccessLevel : 4,
703704

704705
/// Whether there is are lazily-loaded conformances for this extension.
705706
HasLazyConformances : 1

include/swift/AST/DiagnosticsSema.def

Lines changed: 124 additions & 124 deletions
Large diffs are not rendered by default.

lib/APIDigester/ModuleAnalyzerNodes.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1742,6 +1742,7 @@ SDKContext::shouldIgnore(Decl *D, const Decl* Parent) const {
17421742
case AccessLevel::Private:
17431743
case AccessLevel::FilePrivate:
17441744
return true;
1745+
case AccessLevel::Package:
17451746
case AccessLevel::Public:
17461747
case AccessLevel::Open:
17471748
break;

lib/AST/ASTPrinter.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,9 @@ class PrintAST : public ASTVisitor<PrintAST> {
730730
case AccessLevel::Public:
731731
Printer << tok::kw_public;
732732
break;
733+
case AccessLevel::Package:
734+
Printer.printKeyword("package", Options);
735+
break;
733736
case AccessLevel::Open:
734737
Printer.printKeyword("open", Options);
735738
break;

lib/AST/ASTVerifier.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -941,7 +941,7 @@ class Verifier : public ASTWalker {
941941
PrettyStackTraceDecl debugStack("verifying access", D);
942942
if (!D->getASTContext().isAccessControlDisabled() &&
943943
D->getFormalAccessScope().isPublic() &&
944-
D->getFormalAccess() < AccessLevel::Public) {
944+
D->getFormalAccess() <= AccessLevel::Package) {
945945
Out << "non-public decl has no formal access scope\n";
946946
D->dump(Out);
947947
abort();

lib/AST/AccessRequests.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,8 @@ DefaultAndMaxAccessLevelRequest::evaluate(Evaluator &evaluator,
251251
maxAccess = AccessLevel::Public;
252252
} else if (maxScope->isPublic()) {
253253
maxAccess = AccessLevel::Public;
254+
} else if (maxScope->isPackage()) {
255+
maxAccess = AccessLevel::Package;
254256
} else if (isa<ModuleDecl>(maxScope->getDeclContext())) {
255257
maxAccess = AccessLevel::Internal;
256258
} else {

lib/AST/Attr.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ StringRef swift::getAccessLevelSpelling(AccessLevel value) {
7575
case AccessLevel::Private: return "private";
7676
case AccessLevel::FilePrivate: return "fileprivate";
7777
case AccessLevel::Internal: return "internal";
78+
case AccessLevel::Package: return "package";
7879
case AccessLevel::Public: return "public";
7980
case AccessLevel::Open: return "open";
8081
}

lib/AST/Decl.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3652,6 +3652,7 @@ AccessLevel ValueDecl::getEffectiveAccess() const {
36523652
switch (effectiveAccess) {
36533653
case AccessLevel::Open:
36543654
break;
3655+
case AccessLevel::Package:
36553656
case AccessLevel::Public:
36563657
case AccessLevel::Internal:
36573658
if (getModuleContext()->isTestingEnabled() ||
@@ -3774,6 +3775,7 @@ getAccessScopeForFormalAccess(const ValueDecl *VD,
37743775
: AccessLimitKind::None);
37753776
case AccessLevel::Internal:
37763777
return AccessScope(resultDC->getParentModule());
3778+
case AccessLevel::Package:
37773779
case AccessLevel::Public:
37783780
case AccessLevel::Open:
37793781
return AccessScope::getPublic();
@@ -3923,6 +3925,7 @@ static bool checkAccess(const DeclContext *useDC, const ValueDecl *VD,
39233925
auto *useSF = dyn_cast<SourceFile>(useFile);
39243926
return useSF && useSF->hasTestableOrPrivateImport(access, sourceModule);
39253927
}
3928+
case AccessLevel::Package:
39263929
case AccessLevel::Public:
39273930
case AccessLevel::Open:
39283931
return true;

0 commit comments

Comments
 (0)