Skip to content

Commit 12de029

Browse files
committed
ASTBridging: Bridge swift::AccessLevel directly
1 parent cf09773 commit 12de029

File tree

4 files changed

+27
-51
lines changed

4 files changed

+27
-51
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -901,21 +901,13 @@ void BridgedAvailableAttr_setIsGroupedWithWildcard(BridgedAvailableAttr cAttr);
901901
SWIFT_NAME("BridgedAvailableAttr.setIsGroupTerminator(self:)")
902902
void BridgedAvailableAttr_setIsGroupTerminator(BridgedAvailableAttr cAttr);
903903

904-
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedAccessLevel {
905-
BridgedAccessLevelPrivate,
906-
BridgedAccessLevelFilePrivate,
907-
BridgedAccessLevelInternal,
908-
BridgedAccessLevelPackage,
909-
BridgedAccessLevelPublic,
910-
BridgedAccessLevelOpen,
911-
BridgedAccessLevelNone,
912-
};
904+
BRIDGED_OPTIONAL(swift::AccessLevel, AccessLevel)
913905

914906
SWIFT_NAME("BridgedAccessControlAttr.createParsed(_:range:accessLevel:)")
915907
BridgedAccessControlAttr
916908
BridgedAccessControlAttr_createParsed(BridgedASTContext cContext,
917909
BridgedSourceRange cRange,
918-
BridgedAccessLevel cAccessLevel);
910+
swift::AccessLevel accessLevel);
919911

920912
SWIFT_NAME("BridgedAlignmentAttr.createParsed(_:atLoc:range:value:)")
921913
BridgedAlignmentAttr
@@ -981,7 +973,7 @@ SWIFT_NAME("BridgedDocumentationAttr.createParsed(_:atLoc:range:metadata:"
981973
BridgedDocumentationAttr BridgedDocumentationAttr_createParsed(
982974
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
983975
BridgedSourceRange cRange, BridgedStringRef cMetadata,
984-
BridgedAccessLevel cAccessLevel);
976+
BridgedOptionalAccessLevel accessLevel);
985977

986978
SWIFT_NAME(
987979
"BridgedDynamicReplacementAttr.createParsed(_:atLoc:attrNameLoc:lParenLoc:"
@@ -1351,7 +1343,7 @@ SWIFT_NAME("BridgedSetterAccessAttr.createParsed(_:range:accessLevel:)")
13511343
BridgedSetterAccessAttr
13521344
BridgedSetterAccessAttr_createParsed(BridgedASTContext cContext,
13531345
BridgedSourceRange cRange,
1354-
BridgedAccessLevel cAccessLevel);
1346+
swift::AccessLevel accessLevel);
13551347

13561348
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedSpecializationKind : uint8_t {
13571349
BridgedSpecializationKindFull,

include/swift/AST/AttrKind.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,24 +51,24 @@ llvm::StringRef getAssociativitySpelling(Associativity value);
5151
/// Access control levels.
5252
// These are used in diagnostics and with < and similar operations,
5353
// so please do not reorder existing values.
54-
enum class AccessLevel : uint8_t {
54+
enum class ENUM_EXTENSIBILITY_ATTR(closed) AccessLevel : uint8_t {
5555
/// Private access is limited to the current scope.
56-
Private = 0,
56+
Private SWIFT_NAME("private") = 0,
5757
/// File-private access is limited to the current file.
58-
FilePrivate,
58+
FilePrivate SWIFT_NAME("fileprivate"),
5959
/// Internal access is limited to the current module.
60-
Internal,
60+
Internal SWIFT_NAME("internal"),
6161
/// Package access is not limited, but some capabilities may be
6262
/// restricted outside of the current package containing modules.
6363
/// It's similar to Public in that it's accessible from other modules
6464
/// and subclassable only within the defining module as long as
6565
/// the modules are in the same package.
66-
Package,
66+
Package SWIFT_NAME("package"),
6767
/// Public access is not limited, but some capabilities may be
6868
/// restricted outside of the current module.
69-
Public,
69+
Public SWIFT_NAME("public"),
7070
/// Open access is not limited, and all capabilities are unrestricted.
71-
Open,
71+
Open SWIFT_NAME("open"),
7272
};
7373

7474
/// Returns the in-source spelling of the given access level.

lib/AST/Bridging/DeclAttributeBridging.cpp

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -152,26 +152,6 @@ void BridgedAvailableAttr_setIsGroupTerminator(BridgedAvailableAttr cAttr) {
152152
cAttr.unbridged()->setIsGroupTerminator();
153153
}
154154

155-
static std::optional<AccessLevel> unbridge(BridgedAccessLevel level) {
156-
switch (level) {
157-
case BridgedAccessLevelPrivate:
158-
return AccessLevel::Private;
159-
case BridgedAccessLevelFilePrivate:
160-
return AccessLevel::FilePrivate;
161-
case BridgedAccessLevelInternal:
162-
return AccessLevel::Internal;
163-
case BridgedAccessLevelPackage:
164-
return AccessLevel::Package;
165-
case BridgedAccessLevelPublic:
166-
return AccessLevel::Public;
167-
case BridgedAccessLevelOpen:
168-
return AccessLevel::Open;
169-
case BridgedAccessLevelNone:
170-
return std::nullopt;
171-
}
172-
llvm_unreachable("unhandled BridgedAccessLevel");
173-
}
174-
175155
BridgedABIAttr BridgedABIAttr_createParsed(BridgedASTContext cContext,
176156
BridgedSourceLoc atLoc,
177157
BridgedSourceRange range,
@@ -185,9 +165,9 @@ BridgedABIAttr BridgedABIAttr_createParsed(BridgedASTContext cContext,
185165
BridgedAccessControlAttr
186166
BridgedAccessControlAttr_createParsed(BridgedASTContext cContext,
187167
BridgedSourceRange cRange,
188-
BridgedAccessLevel cAccessLevel) {
168+
swift::AccessLevel accessLevel) {
189169
return new (cContext.unbridged()) AccessControlAttr(
190-
/*atLoc=*/{}, cRange.unbridged(), unbridge(cAccessLevel).value());
170+
/*atLoc=*/{}, cRange.unbridged(), accessLevel);
191171
}
192172

193173
BridgedAlignmentAttr
@@ -306,10 +286,14 @@ BridgedDynamicReplacementAttr BridgedDynamicReplacementAttr_createParsed(
306286
BridgedDocumentationAttr BridgedDocumentationAttr_createParsed(
307287
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
308288
BridgedSourceRange cRange, BridgedStringRef cMetadata,
309-
BridgedAccessLevel cAccessLevel) {
289+
BridgedOptionalAccessLevel accessLevel) {
290+
std::optional<swift::AccessLevel> optAccessLevel;
291+
if (accessLevel.getHasValue()) {
292+
optAccessLevel.emplace(accessLevel.getValue());
293+
}
310294
return new (cContext.unbridged()) DocumentationAttr(
311295
cAtLoc.unbridged(), cRange.unbridged(), cMetadata.unbridged(),
312-
unbridge(cAccessLevel), /*implicit=*/false);
296+
optAccessLevel, /*implicit=*/false);
313297
}
314298

315299
static EffectsKind unbridged(BridgedEffectsKind kind) {
@@ -808,9 +792,9 @@ BridgedSemanticsAttr BridgedSemanticsAttr_createParsed(
808792
BridgedSetterAccessAttr
809793
BridgedSetterAccessAttr_createParsed(BridgedASTContext cContext,
810794
BridgedSourceRange cRange,
811-
BridgedAccessLevel cAccessLevel) {
795+
swift::AccessLevel accessLevel) {
812796
return new (cContext.unbridged()) SetterAccessAttr(
813-
/*atLoc=*/{}, cRange.unbridged(), unbridge(cAccessLevel).value());
797+
/*atLoc=*/{}, cRange.unbridged(), accessLevel);
814798
}
815799

816800
static SpecializeAttr::SpecializationKind

lib/ASTGen/Sources/ASTGen/DeclAttrs.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -767,13 +767,13 @@ extension ASTGenVisitor {
767767
return nil
768768
}
769769

770-
var visibility: BridgedAccessLevel = .none
770+
var visibility: swift.AccessLevel?
771771
var metadata: BridgedStringRef? = nil
772772

773773
while let arg = args.popFirst() {
774774
switch arg.label.rawText {
775775
case "visibility":
776-
guard visibility == .none else {
776+
guard visibility == nil else {
777777
// TODO: Diagnose duplicated 'visibility" arguments
778778
continue
779779
}
@@ -787,7 +787,7 @@ extension ASTGenVisitor {
787787
case .package: visibility = .package
788788
case .internal: visibility = .internal
789789
case .private: visibility = .private
790-
case .fileprivate: visibility = .filePrivate
790+
case .fileprivate: visibility = .fileprivate
791791
default:
792792
// TODO: Diagnose
793793
continue
@@ -821,7 +821,7 @@ extension ASTGenVisitor {
821821
atLoc: self.generateSourceLoc(node.atSign),
822822
range: self.generateAttrSourceRange(node),
823823
metadata: metadata ?? "",
824-
accessLevel: visibility
824+
accessLevel: visibility == nil ? .init() : .init(visibility!)
825825
)
826826
}
827827

@@ -2395,7 +2395,7 @@ extension ASTGenVisitor {
23952395
case .private:
23962396
return self.generateAccessControlAttr(declModifier: node, level: .private)
23972397
case .fileprivate:
2398-
return self.generateAccessControlAttr(declModifier: node, level: .filePrivate)
2398+
return self.generateAccessControlAttr(declModifier: node, level: .fileprivate)
23992399
case .internal:
24002400
return self.generateAccessControlAttr(declModifier: node, level: .internal)
24012401
case .package:
@@ -2423,7 +2423,7 @@ extension ASTGenVisitor {
24232423
}
24242424
}
24252425

2426-
func generateAccessControlAttr(declModifier node: DeclModifierSyntax, level: BridgedAccessLevel)
2426+
func generateAccessControlAttr(declModifier node: DeclModifierSyntax, level: swift.AccessLevel)
24272427
-> BridgedDeclAttribute?
24282428
{
24292429
if let detail = node.detail {

0 commit comments

Comments
 (0)