Skip to content

Commit d978d53

Browse files
committed
[ASTGen] Adopt AvailabilityDomainOrIdentifier scheme
Aligning with libParse
1 parent cc14548 commit d978d53

File tree

7 files changed

+156
-103
lines changed

7 files changed

+156
-103
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ template<typename T> class ArrayRef;
3434

3535
namespace swift {
3636
class AvailabilityDomain;
37+
class AvailabilityDomainOrIdentifier;
3738
class Argument;
3839
class ASTContext;
3940
struct ASTNode;
@@ -668,6 +669,10 @@ enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedPlatformKind : size_t {
668669
SWIFT_NAME("BridgedPlatformKind.init(from:)")
669670
BridgedPlatformKind BridgedPlatformKind_fromString(BridgedStringRef cStr);
670671

672+
SWIFT_NAME("BridgedPlatformKind.init(from:)")
673+
BridgedPlatformKind
674+
BridgedPlatformKind_fromIdentifier(BridgedIdentifier cIdent);
675+
671676
swift::PlatformKind unbridge(BridgedPlatformKind cPlatform);
672677

673678
SWIFT_NAME("BridgedAvailabilityMacroMap.has(self:name:)")
@@ -691,19 +696,39 @@ struct BridgedAvailabilityMacroDefinition {
691696
BridgedArrayRef specs;
692697
};
693698

694-
struct BridgedAvailabilityDomain;
699+
struct BridgedAvailabilityDomainOrIdentifier {
700+
void *_Nullable opaque;
701+
702+
BridgedAvailabilityDomainOrIdentifier() : opaque(nullptr) {};
703+
BRIDGED_INLINE BridgedAvailabilityDomainOrIdentifier(
704+
swift::AvailabilityDomainOrIdentifier domain);
705+
BRIDGED_INLINE swift::AvailabilityDomainOrIdentifier unbridged() const;
706+
};
707+
708+
SWIFT_NAME("getter:BridgedAvailabilityDomainOrIdentifier.isDomain(self:)")
709+
BRIDGED_INLINE bool BridgedAvailabilityDomainOrIdentifier_isDomain(
710+
BridgedAvailabilityDomainOrIdentifier cVal);
711+
712+
SWIFT_NAME("getter:BridgedAvailabilityDomainOrIdentifier.asIdentifier(self:)")
713+
BRIDGED_INLINE BridgedIdentifier
714+
BridgedAvailabilityDomainOrIdentifier_getAsIdentifier(
715+
BridgedAvailabilityDomainOrIdentifier cVal);
695716

696717
SWIFT_NAME("BridgedAvailabilitySpec.createWildcard(_:loc:)")
697718
BridgedAvailabilitySpec
698719
BridgedAvailabilitySpec_createWildcard(BridgedASTContext cContext,
699720
BridgedSourceLoc cLoc);
700721

701-
SWIFT_NAME("BridgedAvailabilitySpec.create(_:domain:nameLoc:version:"
702-
"versionRange:)")
703-
BridgedAvailabilitySpec BridgedAvailabilitySpec_createForDomain(
704-
BridgedASTContext cContext, BridgedAvailabilityDomain cDomain,
705-
BridgedSourceLoc cLoc, BridgedVersionTuple cVersion,
706-
BridgedSourceRange cVersionRange);
722+
SWIFT_NAME(
723+
"BridgedAvailabilitySpec.createForDomainIdentifier(_:name:nameLoc:version:"
724+
"versionRange:)")
725+
BridgedAvailabilitySpec BridgedAvailabilitySpec_createForDomainIdentifier(
726+
BridgedASTContext cContext, BridgedIdentifier cName, BridgedSourceLoc cLoc,
727+
BridgedVersionTuple cVersion, BridgedSourceRange cVersionRange);
728+
729+
SWIFT_NAME("getter:BridgedAvailabilitySpec.domainOrIdentifier(self:)")
730+
BridgedAvailabilityDomainOrIdentifier
731+
BridgedAvailabilitySpec_getDomainOrIdentifier(BridgedAvailabilitySpec spec);
707732

708733
SWIFT_NAME("getter:BridgedAvailabilitySpec.sourceRange(self:)")
709734
BridgedSourceRange
@@ -712,14 +737,6 @@ BridgedAvailabilitySpec_getSourceRange(BridgedAvailabilitySpec spec);
712737
SWIFT_NAME("getter:BridgedAvailabilitySpec.isWildcard(self:)")
713738
bool BridgedAvailabilitySpec_isWildcard(BridgedAvailabilitySpec spec);
714739

715-
SWIFT_NAME("getter:BridgedAvailabilitySpec.domain(self:)")
716-
BridgedAvailabilityDomain
717-
BridgedAvailabilitySpec_getDomain(BridgedAvailabilitySpec spec);
718-
719-
SWIFT_NAME("getter:BridgedAvailabilitySpec.platform(self:)")
720-
BridgedPlatformKind
721-
BridgedAvailabilitySpec_getPlatform(BridgedAvailabilitySpec spec);
722-
723740
SWIFT_NAME("getter:BridgedAvailabilitySpec.rawVersion(self:)")
724741
BridgedVersionTuple
725742
BridgedAvailabilitySpec_getRawVersion(BridgedAvailabilitySpec spec);
@@ -818,6 +835,13 @@ BridgedAvailableAttr BridgedAvailableAttr_createParsedIdentifier(
818835
BridgedVersionTuple cDeprecated, BridgedSourceRange cDeprecatedRange,
819836
BridgedVersionTuple cObsoleted, BridgedSourceRange cObsoletedRange);
820837

838+
SWIFT_NAME("BridgedAvailableAttr.setIsGroupMember(self:)")
839+
void BridgedAvailableAttr_setIsGroupMember(BridgedAvailableAttr cAttr);
840+
SWIFT_NAME("BridgedAvailableAttr.setIsGroupedWithWildcard(self:)")
841+
void BridgedAvailableAttr_setIsGroupedWithWildcard(BridgedAvailableAttr cAttr);
842+
SWIFT_NAME("BridgedAvailableAttr.setIsGroupTerminator(self:)")
843+
void BridgedAvailableAttr_setIsGroupTerminator(BridgedAvailableAttr cAttr);
844+
821845
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedExecutionKind {
822846
BridgedExecutionKindConcurrent,
823847
BridgedExecutionKindCaller,

include/swift/AST/ASTBridgingImpl.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,31 @@ BridgedAvailabilityDomain BridgedAvailabilityDomain::forEmbedded() {
311311
return swift::AvailabilityDomain::forEmbedded();
312312
}
313313

314+
//===----------------------------------------------------------------------===//
315+
// MARK: AvailabilityDomainOrIdentifier
316+
//===----------------------------------------------------------------------===//
317+
318+
BridgedAvailabilityDomainOrIdentifier::BridgedAvailabilityDomainOrIdentifier(
319+
swift::AvailabilityDomainOrIdentifier domainOrIdentifier)
320+
: opaque(domainOrIdentifier.getOpaqueValue()) {}
321+
322+
swift::AvailabilityDomainOrIdentifier
323+
BridgedAvailabilityDomainOrIdentifier::unbridged() const {
324+
return swift::AvailabilityDomainOrIdentifier::fromOpaque(opaque);
325+
}
326+
327+
bool BridgedAvailabilityDomainOrIdentifier_isDomain(
328+
BridgedAvailabilityDomainOrIdentifier cVal) {
329+
return cVal.unbridged().isDomain();
330+
}
331+
332+
BridgedIdentifier BridgedAvailabilityDomainOrIdentifier_getAsIdentifier(
333+
BridgedAvailabilityDomainOrIdentifier cVal) {
334+
if (auto ident = cVal.unbridged().getAsIdentifier())
335+
return *ident;
336+
return swift::Identifier();
337+
}
338+
314339
//===----------------------------------------------------------------------===//
315340
// MARK: BridgedParamDecl
316341
//===----------------------------------------------------------------------===//

include/swift/AST/AvailabilityDomain.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -323,10 +323,6 @@ class AvailabilityDomainOrIdentifier {
323323

324324
AvailabilityDomainOrIdentifier(Storage storage) : storage(storage) {}
325325

326-
static AvailabilityDomainOrIdentifier fromOpaque(void *opaque) {
327-
return AvailabilityDomainOrIdentifier(Storage::getFromOpaqueValue(opaque));
328-
}
329-
330326
std::optional<AvailabilityDomain>
331327
lookUpInDeclContext(SourceLoc loc, const DeclContext *declContext) const;
332328

@@ -386,6 +382,12 @@ class AvailabilityDomainOrIdentifier {
386382
/// different than the context that the original was created for.
387383
AvailabilityDomainOrIdentifier copy(ASTContext &ctx) const;
388384

385+
static AvailabilityDomainOrIdentifier fromOpaque(void *opaque) {
386+
return AvailabilityDomainOrIdentifier(Storage::getFromOpaqueValue(opaque));
387+
}
388+
389+
void *getOpaqueValue() const { return storage.getOpaqueValue(); }
390+
389391
void print(llvm::raw_ostream &os) const;
390392
};
391393

lib/AST/ASTDumper.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4945,8 +4945,18 @@ class PrintAttribute : public AttributeVisitor<PrintAttribute, void, Label>,
49454945
void visitAvailableAttr(AvailableAttr *Attr, Label label) {
49464946
printCommon(Attr, "available_attr", label);
49474947

4948-
printFieldRaw([&](auto &out) { Attr->getDomainOrIdentifier().print(out); },
4949-
Label::always("domain"));
4948+
printFlag(Attr->isGroupMember(), "group_member");
4949+
printFlag(Attr->isGroupedWithWildcard(), "group_with_wildcard");
4950+
printFlag(Attr->isGroupTerminator(), "group_terminator");
4951+
4952+
auto domainOrIdentifier = Attr->getDomainOrIdentifier();
4953+
printFlag(domainOrIdentifier.isResolved(), "resolved");
4954+
if (domainOrIdentifier.isDomain()) {
4955+
printFieldRaw([&](auto &out) { domainOrIdentifier.getAsDomain()->print(out); },
4956+
Label::always("domain"));
4957+
} else {
4958+
printField(*domainOrIdentifier.getAsIdentifier(), Label::always("domainIdentifier"));
4959+
}
49504960

49514961
switch (Attr->getKind()) {
49524962
case swift::AvailableAttr::Kind::Default:

lib/AST/Bridging/AvailabilityBridging.cpp

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ BridgedPlatformKind BridgedPlatformKind_fromString(BridgedStringRef cStr) {
5858
}
5959
}
6060

61+
BridgedPlatformKind
62+
BridgedPlatformKind_fromIdentifier(BridgedIdentifier cIdent) {
63+
return BridgedPlatformKind_fromString(cIdent.unbridged().str());
64+
}
65+
6166
PlatformKind unbridge(BridgedPlatformKind platform) {
6267
switch (platform) {
6368
case BridgedPlatformKind_None:
@@ -93,15 +98,19 @@ BridgedAvailabilitySpec_createWildcard(BridgedASTContext cContext,
9398
cLoc.unbridged());
9499
}
95100

96-
BridgedAvailabilitySpec BridgedAvailabilitySpec_createForDomain(
97-
BridgedASTContext cContext, BridgedAvailabilityDomain cDomain,
98-
BridgedSourceLoc cLoc, BridgedVersionTuple cVersion,
99-
BridgedSourceRange cVersionRange) {
100-
return AvailabilitySpec::createForDomain(
101-
cContext.unbridged(), cDomain.unbridged(), cLoc.unbridged(),
101+
BridgedAvailabilitySpec BridgedAvailabilitySpec_createForDomainIdentifier(
102+
BridgedASTContext cContext, BridgedIdentifier cName, BridgedSourceLoc cLoc,
103+
BridgedVersionTuple cVersion, BridgedSourceRange cVersionRange) {
104+
return AvailabilitySpec::createForDomainIdentifier(
105+
cContext.unbridged(), cName.unbridged(), cLoc.unbridged(),
102106
cVersion.unbridged(), cVersionRange.unbridged());
103107
}
104108

109+
BridgedAvailabilityDomainOrIdentifier
110+
BridgedAvailabilitySpec_getDomainOrIdentifier(BridgedAvailabilitySpec spec) {
111+
return spec.unbridged()->getDomainOrIdentifier();
112+
}
113+
105114
BridgedSourceRange
106115
BridgedAvailabilitySpec_getSourceRange(BridgedAvailabilitySpec spec) {
107116
return spec.unbridged()->getSourceRange();
@@ -111,24 +120,6 @@ bool BridgedAvailabilitySpec_isWildcard(BridgedAvailabilitySpec spec) {
111120
return spec.unbridged()->isWildcard();
112121
}
113122

114-
// FIXME: [availability] Remove this (re-implement ASTGen to match ParseDecl)
115-
BridgedAvailabilityDomain
116-
BridgedAvailabilitySpec_getDomain(BridgedAvailabilitySpec spec) {
117-
auto domain = spec.unbridged()->getDomainOrIdentifier().getAsDomain();
118-
if (domain)
119-
return *domain;
120-
return BridgedAvailabilityDomain();
121-
}
122-
123-
// FIXME: [availability] Remove this (re-implement ASTGen to match ParseDecl)
124-
BridgedPlatformKind
125-
BridgedAvailabilitySpec_getPlatform(BridgedAvailabilitySpec spec) {
126-
auto domain = spec.unbridged()->getDomainOrIdentifier().getAsDomain();
127-
if (domain)
128-
return bridge(domain->getPlatformKind());
129-
return bridge(PlatformKind::none);
130-
}
131-
132123
BridgedVersionTuple
133124
BridgedAvailabilitySpec_getRawVersion(BridgedAvailabilitySpec spec) {
134125
return spec.unbridged()->getRawVersion();

lib/AST/Bridging/DeclAttributeBridging.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,16 @@ BridgedAvailableAttr BridgedAvailableAttr_createParsedIdentifier(
133133
/*IsSPI=*/false);
134134
}
135135

136+
void BridgedAvailableAttr_setIsGroupMember(BridgedAvailableAttr cAttr) {
137+
cAttr.unbridged()->setIsGroupMember();
138+
}
139+
void BridgedAvailableAttr_setIsGroupedWithWildcard(BridgedAvailableAttr cAttr) {
140+
cAttr.unbridged()->setIsGroupedWithWildcard();
141+
}
142+
void BridgedAvailableAttr_setIsGroupTerminator(BridgedAvailableAttr cAttr) {
143+
cAttr.unbridged()->setIsGroupTerminator();
144+
}
145+
136146
static std::optional<AccessLevel> unbridge(BridgedAccessLevel level) {
137147
switch (level) {
138148
case BridgedAccessLevelPrivate:

0 commit comments

Comments
 (0)