Skip to content

Commit d60f198

Browse files
committed
[ASTGen] Adopt AvailabilityDomainOrIdentifier scheme
Aligning with libParse
1 parent 1b916b2 commit d60f198

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
@@ -35,6 +35,7 @@ template<typename T> class ArrayRef;
3535
namespace swift {
3636
enum class AccessorKind;
3737
class AvailabilityDomain;
38+
class AvailabilityDomainOrIdentifier;
3839
class Argument;
3940
class ASTContext;
4041
struct ASTNode;
@@ -678,6 +679,10 @@ enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedPlatformKind : size_t {
678679
SWIFT_NAME("BridgedPlatformKind.init(from:)")
679680
BridgedPlatformKind BridgedPlatformKind_fromString(BridgedStringRef cStr);
680681

682+
SWIFT_NAME("BridgedPlatformKind.init(from:)")
683+
BridgedPlatformKind
684+
BridgedPlatformKind_fromIdentifier(BridgedIdentifier cIdent);
685+
681686
swift::PlatformKind unbridge(BridgedPlatformKind cPlatform);
682687

683688
SWIFT_NAME("BridgedAvailabilityMacroMap.has(self:name:)")
@@ -701,19 +706,39 @@ struct BridgedAvailabilityMacroDefinition {
701706
BridgedArrayRef specs;
702707
};
703708

704-
struct BridgedAvailabilityDomain;
709+
struct BridgedAvailabilityDomainOrIdentifier {
710+
void *_Nullable opaque;
711+
712+
BridgedAvailabilityDomainOrIdentifier() : opaque(nullptr) {};
713+
BRIDGED_INLINE BridgedAvailabilityDomainOrIdentifier(
714+
swift::AvailabilityDomainOrIdentifier domain);
715+
BRIDGED_INLINE swift::AvailabilityDomainOrIdentifier unbridged() const;
716+
};
717+
718+
SWIFT_NAME("getter:BridgedAvailabilityDomainOrIdentifier.isDomain(self:)")
719+
BRIDGED_INLINE bool BridgedAvailabilityDomainOrIdentifier_isDomain(
720+
BridgedAvailabilityDomainOrIdentifier cVal);
721+
722+
SWIFT_NAME("getter:BridgedAvailabilityDomainOrIdentifier.asIdentifier(self:)")
723+
BRIDGED_INLINE BridgedIdentifier
724+
BridgedAvailabilityDomainOrIdentifier_getAsIdentifier(
725+
BridgedAvailabilityDomainOrIdentifier cVal);
705726

706727
SWIFT_NAME("BridgedAvailabilitySpec.createWildcard(_:loc:)")
707728
BridgedAvailabilitySpec
708729
BridgedAvailabilitySpec_createWildcard(BridgedASTContext cContext,
709730
BridgedSourceLoc cLoc);
710731

711-
SWIFT_NAME("BridgedAvailabilitySpec.create(_:domain:nameLoc:version:"
712-
"versionRange:)")
713-
BridgedAvailabilitySpec BridgedAvailabilitySpec_createForDomain(
714-
BridgedASTContext cContext, BridgedAvailabilityDomain cDomain,
715-
BridgedSourceLoc cLoc, BridgedVersionTuple cVersion,
716-
BridgedSourceRange cVersionRange);
732+
SWIFT_NAME(
733+
"BridgedAvailabilitySpec.createForDomainIdentifier(_:name:nameLoc:version:"
734+
"versionRange:)")
735+
BridgedAvailabilitySpec BridgedAvailabilitySpec_createForDomainIdentifier(
736+
BridgedASTContext cContext, BridgedIdentifier cName, BridgedSourceLoc cLoc,
737+
BridgedVersionTuple cVersion, BridgedSourceRange cVersionRange);
738+
739+
SWIFT_NAME("getter:BridgedAvailabilitySpec.domainOrIdentifier(self:)")
740+
BridgedAvailabilityDomainOrIdentifier
741+
BridgedAvailabilitySpec_getDomainOrIdentifier(BridgedAvailabilitySpec spec);
717742

718743
SWIFT_NAME("getter:BridgedAvailabilitySpec.sourceRange(self:)")
719744
BridgedSourceRange
@@ -722,14 +747,6 @@ BridgedAvailabilitySpec_getSourceRange(BridgedAvailabilitySpec spec);
722747
SWIFT_NAME("getter:BridgedAvailabilitySpec.isWildcard(self:)")
723748
bool BridgedAvailabilitySpec_isWildcard(BridgedAvailabilitySpec spec);
724749

725-
SWIFT_NAME("getter:BridgedAvailabilitySpec.domain(self:)")
726-
BridgedAvailabilityDomain
727-
BridgedAvailabilitySpec_getDomain(BridgedAvailabilitySpec spec);
728-
729-
SWIFT_NAME("getter:BridgedAvailabilitySpec.platform(self:)")
730-
BridgedPlatformKind
731-
BridgedAvailabilitySpec_getPlatform(BridgedAvailabilitySpec spec);
732-
733750
SWIFT_NAME("getter:BridgedAvailabilitySpec.rawVersion(self:)")
734751
BridgedVersionTuple
735752
BridgedAvailabilitySpec_getRawVersion(BridgedAvailabilitySpec spec);
@@ -881,6 +898,13 @@ BridgedAvailableAttr BridgedAvailableAttr_createParsedIdentifier(
881898
BridgedVersionTuple cDeprecated, BridgedSourceRange cDeprecatedRange,
882899
BridgedVersionTuple cObsoleted, BridgedSourceRange cObsoletedRange);
883900

901+
SWIFT_NAME("BridgedAvailableAttr.setIsGroupMember(self:)")
902+
void BridgedAvailableAttr_setIsGroupMember(BridgedAvailableAttr cAttr);
903+
SWIFT_NAME("BridgedAvailableAttr.setIsGroupedWithWildcard(self:)")
904+
void BridgedAvailableAttr_setIsGroupedWithWildcard(BridgedAvailableAttr cAttr);
905+
SWIFT_NAME("BridgedAvailableAttr.setIsGroupTerminator(self:)")
906+
void BridgedAvailableAttr_setIsGroupTerminator(BridgedAvailableAttr cAttr);
907+
884908
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedExecutionKind {
885909
BridgedExecutionKindConcurrent,
886910
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
@@ -334,10 +334,6 @@ class AvailabilityDomainOrIdentifier {
334334

335335
AvailabilityDomainOrIdentifier(Storage storage) : storage(storage) {}
336336

337-
static AvailabilityDomainOrIdentifier fromOpaque(void *opaque) {
338-
return AvailabilityDomainOrIdentifier(Storage::getFromOpaqueValue(opaque));
339-
}
340-
341337
std::optional<AvailabilityDomain>
342338
lookUpInDeclContext(SourceLoc loc, const DeclContext *declContext) const;
343339

@@ -397,6 +393,12 @@ class AvailabilityDomainOrIdentifier {
397393
/// different than the context that the original was created for.
398394
AvailabilityDomainOrIdentifier copy(ASTContext &ctx) const;
399395

396+
static AvailabilityDomainOrIdentifier fromOpaque(void *opaque) {
397+
return AvailabilityDomainOrIdentifier(Storage::getFromOpaqueValue(opaque));
398+
}
399+
400+
void *getOpaqueValue() const { return storage.getOpaqueValue(); }
401+
400402
void print(llvm::raw_ostream &os) const;
401403
};
402404

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+
if (domainOrIdentifier.isDomain()) {
4954+
printFieldRaw([&](auto &out) { domainOrIdentifier.getAsDomain()->print(out); },
4955+
Label::always("domain"));
4956+
} else {
4957+
printFlag(domainOrIdentifier.isResolved(), "resolved");
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
@@ -168,6 +168,16 @@ BridgedAvailableAttr BridgedAvailableAttr_createParsedIdentifier(
168168
/*IsSPI=*/false);
169169
}
170170

171+
void BridgedAvailableAttr_setIsGroupMember(BridgedAvailableAttr cAttr) {
172+
cAttr.unbridged()->setIsGroupMember();
173+
}
174+
void BridgedAvailableAttr_setIsGroupedWithWildcard(BridgedAvailableAttr cAttr) {
175+
cAttr.unbridged()->setIsGroupedWithWildcard();
176+
}
177+
void BridgedAvailableAttr_setIsGroupTerminator(BridgedAvailableAttr cAttr) {
178+
cAttr.unbridged()->setIsGroupTerminator();
179+
}
180+
171181
static std::optional<AccessLevel> unbridge(BridgedAccessLevel level) {
172182
switch (level) {
173183
case BridgedAccessLevelPrivate:

0 commit comments

Comments
 (0)