Skip to content

Commit 0722efe

Browse files
committed
AST: Retire PlatformAgnosticVersionConstraintAvailabilitySpec.
1 parent 6844cfe commit 0722efe

File tree

10 files changed

+91
-143
lines changed

10 files changed

+91
-143
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,14 @@ BridgedAvailabilitySpec
638638
BridgedAvailabilitySpec_createWildcard(BridgedASTContext cContext,
639639
BridgedSourceLoc cLoc);
640640

641+
SWIFT_NAME(
642+
"BridgedAvailabilitySpec.createPlatformAgnostic(_:kind:nameLoc:version:"
643+
"versionRange:)")
644+
BridgedAvailabilitySpec BridgedAvailabilitySpec_createPlatformAgnostic(
645+
BridgedASTContext cContext, BridgedAvailabilitySpecKind cKind,
646+
BridgedSourceLoc cLoc, BridgedVersionTuple cVersion,
647+
BridgedSourceRange cVersionRange);
648+
641649
SWIFT_NAME("getter:BridgedAvailabilitySpec.sourceRange(self:)")
642650
BridgedSourceRange
643651
BridgedAvailabilitySpec_getSourceRange(BridgedAvailabilitySpec spec);
@@ -666,26 +674,12 @@ BridgedPlatformVersionConstraintAvailabilitySpec_createParsed(
666674
BridgedSourceLoc cPlatformLoc, BridgedVersionTuple cVersion,
667675
BridgedSourceRange cVersionSrcRange);
668676

669-
SWIFT_NAME("BridgedPlatformAgnosticVersionConstraintAvailabilitySpec."
670-
"createParsed(_:kind:nameLoc:version:versionRange:)")
671-
BridgedPlatformAgnosticVersionConstraintAvailabilitySpec
672-
BridgedPlatformAgnosticVersionConstraintAvailabilitySpec_createParsed(
673-
BridgedASTContext cContext, BridgedAvailabilitySpecKind cKind,
674-
BridgedSourceLoc cNameLoc, BridgedVersionTuple cVersion,
675-
BridgedSourceRange cVersionSrcRange);
676-
677677
SWIFT_NAME("getter:BridgedPlatformVersionConstraintAvailabilitySpec."
678678
"asAvailabilitySpec(self:)")
679679
BridgedAvailabilitySpec
680680
BridgedPlatformVersionConstraintAvailabilitySpec_asAvailabilitySpec(
681681
BridgedPlatformVersionConstraintAvailabilitySpec spec);
682682

683-
SWIFT_NAME("getter:BridgedPlatformAgnosticVersionConstraintAvailabilitySpec."
684-
"asAvailabilitySpec(self:)")
685-
BridgedAvailabilitySpec
686-
BridgedPlatformAgnosticVersionConstraintAvailabilitySpec_asAvailabilitySpec(
687-
BridgedPlatformAgnosticVersionConstraintAvailabilitySpec spec);
688-
689683
struct BridgedAvailabilityDomain {
690684
void *_Nullable opaque;
691685

include/swift/AST/ASTBridgingWrappers.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ AST_BRIDGING_WRAPPER_NONNULL(CustomAttribute)
108108
AST_BRIDGING_WRAPPER_NULLABLE(ArgumentList)
109109
AST_BRIDGING_WRAPPER_NULLABLE(AvailabilitySpec)
110110
AST_BRIDGING_WRAPPER_NULLABLE(PlatformVersionConstraintAvailabilitySpec)
111-
AST_BRIDGING_WRAPPER_NULLABLE(PlatformAgnosticVersionConstraintAvailabilitySpec)
112111
AST_BRIDGING_WRAPPER_CONST_NONNULL(AvailabilityMacroMap)
113112
AST_BRIDGING_WRAPPER_NONNULL(PoundAvailableInfo)
114113

include/swift/AST/AvailabilitySpec.h

Lines changed: 9 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@ class AvailabilitySpec : public ASTAllocated<AvailabilitySpec> {
8585
/// compiler will still catch references to potentially unavailable symbols.
8686
static AvailabilitySpec *createWildcard(ASTContext &ctx, SourceLoc starLoc);
8787

88+
/// Creates an availability specification that guards execution based on the
89+
/// compile-time platform agnostic version, e.g., swift >= 3.0.1,
90+
/// package-description >= 4.0.
91+
static AvailabilitySpec *createPlatformAgnostic(ASTContext &ctx,
92+
AvailabilitySpecKind kind,
93+
SourceLoc nameLoc,
94+
llvm::VersionTuple version,
95+
SourceRange versionRange);
96+
8897
AvailabilitySpecKind getKind() const { return Kind; }
8998

9099
bool isWildcard() { return getKind() == AvailabilitySpecKind::Wildcard; }
@@ -152,52 +161,6 @@ class PlatformVersionConstraintAvailabilitySpec : public AvailabilitySpec {
152161
}
153162
};
154163

155-
/// An availability specification that guards execution based on the
156-
/// compile-time platform agnostic version, e.g., swift >= 3.0.1,
157-
/// package-description >= 4.0.
158-
class PlatformAgnosticVersionConstraintAvailabilitySpec
159-
: public AvailabilitySpec {
160-
161-
static AvailabilityDomain getDomainForSpecKind(AvailabilitySpecKind Kind) {
162-
switch (Kind) {
163-
case AvailabilitySpecKind::PlatformVersionConstraint:
164-
case AvailabilitySpecKind::Wildcard:
165-
llvm_unreachable("unexpected spec kind");
166-
case AvailabilitySpecKind::LanguageVersionConstraint:
167-
return AvailabilityDomain::forSwiftLanguage();
168-
case AvailabilitySpecKind::PackageDescriptionVersionConstraint:
169-
return AvailabilityDomain::forPackageDescription();
170-
}
171-
}
172-
173-
public:
174-
PlatformAgnosticVersionConstraintAvailabilitySpec(
175-
AvailabilitySpecKind AvailabilitySpecKind,
176-
SourceLoc PlatformAgnosticNameLoc, llvm::VersionTuple Version,
177-
SourceRange VersionSrcRange)
178-
: AvailabilitySpec(
179-
AvailabilitySpecKind, getDomainForSpecKind(AvailabilitySpecKind),
180-
SourceRange(PlatformAgnosticNameLoc, VersionSrcRange.End), Version,
181-
VersionSrcRange.Start) {
182-
assert(AvailabilitySpecKind == AvailabilitySpecKind::LanguageVersionConstraint ||
183-
AvailabilitySpecKind == AvailabilitySpecKind::PackageDescriptionVersionConstraint);
184-
}
185-
186-
void print(raw_ostream &OS, unsigned Indent) const;
187-
188-
static bool classof(const AvailabilitySpec *Spec) {
189-
return Spec->getKind() == AvailabilitySpecKind::LanguageVersionConstraint ||
190-
Spec->getKind() == AvailabilitySpecKind::PackageDescriptionVersionConstraint;
191-
}
192-
193-
void *
194-
operator new(size_t Bytes, ASTContext &C,
195-
unsigned Alignment = alignof(PlatformAgnosticVersionConstraintAvailabilitySpec)){
196-
return AvailabilitySpec::operator new(Bytes, C, AllocationArena::Permanent,
197-
Alignment);
198-
}
199-
};
200-
201164
/// Maps of macro name and version to availability specifications.
202165
/// Organized as two nested \c DenseMap keyed first on the macro name then
203166
/// the macro version. This structure allows to peek at macro names before

include/swift/Parse/Parser.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ namespace swift {
5454
class SourceManager;
5555
class UUID;
5656
class PlatformVersionConstraintAvailabilitySpec;
57-
class PlatformAgnosticVersionConstraintAvailabilitySpec;
5857

5958
struct EnumElementInfo;
6059

@@ -2060,8 +2059,7 @@ class Parser {
20602059
ParserResult<AvailabilitySpec> parseAvailabilitySpec();
20612060
ParserResult<PlatformVersionConstraintAvailabilitySpec>
20622061
parsePlatformVersionConstraintSpec();
2063-
ParserResult<PlatformAgnosticVersionConstraintAvailabilitySpec>
2064-
parsePlatformAgnosticVersionConstraintSpec();
2062+
ParserResult<AvailabilitySpec> parsePlatformAgnosticVersionConstraintSpec();
20652063
bool
20662064
parseAvailability(bool parseAsPartOfSpecializeAttr, StringRef AttrName,
20672065
bool &DiscardAttribute, SourceRange &attrRange,

lib/AST/ASTDumper.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,17 +1113,15 @@ namespace {
11131113
}
11141114
case AvailabilitySpecKind::LanguageVersionConstraint:
11151115
case AvailabilitySpecKind::PackageDescriptionVersionConstraint: {
1116-
auto agnostic =
1117-
cast<PlatformAgnosticVersionConstraintAvailabilitySpec>(Spec);
11181116
printHead("platform_agnostic_version_constraint_"
11191117
"availability_spec",
11201118
PatternColor, label);
1121-
printField(agnostic->getDomain()->isSwiftLanguage()
1119+
printField(Spec->getDomain()->isSwiftLanguage()
11221120
? "swift"
11231121
: "package_description",
11241122
Label::always("kind"));
11251123
printFieldRaw(
1126-
[&](llvm::raw_ostream &OS) { OS << agnostic->getVersion(); },
1124+
[&](llvm::raw_ostream &OS) { OS << Spec->getVersion(); },
11271125
Label::always("version"));
11281126
printFoot();
11291127
break;

lib/AST/AvailabilitySpec.cpp

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,26 @@ AvailabilitySpec *AvailabilitySpec::createWildcard(ASTContext &ctx,
2929
/*VersionStartLoc=*/{});
3030
}
3131

32+
static AvailabilityDomain getDomainForSpecKind(AvailabilitySpecKind Kind) {
33+
switch (Kind) {
34+
case AvailabilitySpecKind::PlatformVersionConstraint:
35+
case AvailabilitySpecKind::Wildcard:
36+
llvm_unreachable("unexpected spec kind");
37+
case AvailabilitySpecKind::LanguageVersionConstraint:
38+
return AvailabilityDomain::forSwiftLanguage();
39+
case AvailabilitySpecKind::PackageDescriptionVersionConstraint:
40+
return AvailabilityDomain::forPackageDescription();
41+
}
42+
}
43+
44+
AvailabilitySpec *AvailabilitySpec::createPlatformAgnostic(
45+
ASTContext &ctx, AvailabilitySpecKind kind, SourceLoc nameLoc,
46+
llvm::VersionTuple version, SourceRange versionRange) {
47+
return new (ctx) AvailabilitySpec(kind, getDomainForSpecKind(kind),
48+
SourceRange(nameLoc, versionRange.End),
49+
version, versionRange.Start);
50+
}
51+
3252
llvm::VersionTuple AvailabilitySpec::getVersion() const {
3353
switch (getKind()) {
3454
case AvailabilitySpecKind::PlatformVersionConstraint: {
@@ -65,15 +85,3 @@ llvm::VersionTuple
6585
PlatformVersionConstraintAvailabilitySpec::getRuntimeVersion() const {
6686
return Version;
6787
}
68-
69-
void PlatformAgnosticVersionConstraintAvailabilitySpec::print(raw_ostream &OS,
70-
unsigned Indent) const {
71-
OS.indent(Indent) << '('
72-
<< "platform_agnostic_version_constraint_availability_spec"
73-
<< " kind='"
74-
<< (getDomain()->isSwiftLanguage() ?
75-
"swift" : "package_description")
76-
<< "'"
77-
<< " version='" << getVersion() << "'"
78-
<< ')';
79-
}

lib/AST/Bridging/AvailabilityBridging.cpp

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,36 @@ static BridgedPlatformKind bridge(PlatformKind platform) {
8686
// MARK: AvailabilitySpec
8787
//===----------------------------------------------------------------------===//
8888

89+
static AvailabilitySpecKind unbridge(BridgedAvailabilitySpecKind kind) {
90+
switch (kind) {
91+
case BridgedAvailabilitySpecKindPlatformVersionConstraint:
92+
return AvailabilitySpecKind::PlatformVersionConstraint;
93+
case BridgedAvailabilitySpecKindWildcard:
94+
return AvailabilitySpecKind::Wildcard;
95+
case BridgedAvailabilitySpecKindLanguageVersionConstraint:
96+
return AvailabilitySpecKind::LanguageVersionConstraint;
97+
case BridgedAvailabilitySpecKindPackageDescriptionVersionConstraint:
98+
return AvailabilitySpecKind::PackageDescriptionVersionConstraint;
99+
}
100+
llvm_unreachable("unhandled enum value");
101+
}
102+
89103
BridgedAvailabilitySpec
90104
BridgedAvailabilitySpec_createWildcard(BridgedASTContext cContext,
91105
BridgedSourceLoc cLoc) {
92106
return AvailabilitySpec::createWildcard(cContext.unbridged(),
93107
cLoc.unbridged());
94108
}
95109

110+
BridgedAvailabilitySpec BridgedAvailabilitySpec_createPlatformAgnostic(
111+
BridgedASTContext cContext, BridgedAvailabilitySpecKind cKind,
112+
BridgedSourceLoc cLoc, BridgedVersionTuple cVersion,
113+
BridgedSourceRange cVersionRange) {
114+
return AvailabilitySpec::createPlatformAgnostic(
115+
cContext.unbridged(), unbridge(cKind), cLoc.unbridged(),
116+
cVersion.unbridged(), cVersionRange.unbridged());
117+
}
118+
96119
BridgedSourceRange
97120
BridgedAvailabilitySpec_getSourceRange(BridgedAvailabilitySpec spec) {
98121
return spec.unbridged()->getSourceRange();
@@ -121,20 +144,6 @@ BridgedAvailabilitySpec_getVersionRange(BridgedAvailabilitySpec spec) {
121144
return spec.unbridged()->getVersionSrcRange();
122145
}
123146

124-
static AvailabilitySpecKind unbridge(BridgedAvailabilitySpecKind kind) {
125-
switch (kind) {
126-
case BridgedAvailabilitySpecKindPlatformVersionConstraint:
127-
return AvailabilitySpecKind::PlatformVersionConstraint;
128-
case BridgedAvailabilitySpecKindWildcard:
129-
return AvailabilitySpecKind::Wildcard;
130-
case BridgedAvailabilitySpecKindLanguageVersionConstraint:
131-
return AvailabilitySpecKind::LanguageVersionConstraint;
132-
case BridgedAvailabilitySpecKindPackageDescriptionVersionConstraint:
133-
return AvailabilitySpecKind::PackageDescriptionVersionConstraint;
134-
}
135-
llvm_unreachable("unhandled enum value");
136-
}
137-
138147
BridgedPlatformVersionConstraintAvailabilitySpec
139148
BridgedPlatformVersionConstraintAvailabilitySpec_createParsed(
140149
BridgedASTContext cContext, BridgedPlatformKind cPlatform,
@@ -145,29 +154,12 @@ BridgedPlatformVersionConstraintAvailabilitySpec_createParsed(
145154
cVersionSrcRange.unbridged());
146155
}
147156

148-
BridgedPlatformAgnosticVersionConstraintAvailabilitySpec
149-
BridgedPlatformAgnosticVersionConstraintAvailabilitySpec_createParsed(
150-
BridgedASTContext cContext, BridgedAvailabilitySpecKind cKind,
151-
BridgedSourceLoc cNameLoc, BridgedVersionTuple cVersion,
152-
BridgedSourceRange cVersionSrcRange) {
153-
return new (cContext.unbridged())
154-
PlatformAgnosticVersionConstraintAvailabilitySpec(
155-
unbridge(cKind), cNameLoc.unbridged(), cVersion.unbridged(),
156-
cVersionSrcRange.unbridged());
157-
}
158-
159157
BridgedAvailabilitySpec
160158
BridgedPlatformVersionConstraintAvailabilitySpec_asAvailabilitySpec(
161159
BridgedPlatformVersionConstraintAvailabilitySpec spec) {
162160
return static_cast<AvailabilitySpec *>(spec.unbridged());
163161
}
164162

165-
BridgedAvailabilitySpec
166-
BridgedPlatformAgnosticVersionConstraintAvailabilitySpec_asAvailabilitySpec(
167-
BridgedPlatformAgnosticVersionConstraintAvailabilitySpec spec) {
168-
return static_cast<AvailabilitySpec *>(spec.unbridged());
169-
}
170-
171163
//===----------------------------------------------------------------------===//
172164
// MARK: AvailabilityDomain
173165
//===----------------------------------------------------------------------===//

lib/ASTGen/Sources/ASTGen/Availability.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,14 +291,14 @@ extension ASTGenVisitor {
291291
? .languageVersionConstraint
292292
: .packageDescriptionVersionConstraint
293293

294-
let spec = BridgedPlatformAgnosticVersionConstraintAvailabilitySpec.createParsed(
294+
let spec = BridgedAvailabilitySpec.createPlatformAgnostic(
295295
self.ctx,
296296
kind: kind,
297297
nameLoc: nameLoc,
298298
version: version?.bridged ?? BridgedVersionTuple(),
299299
versionRange: versionRange
300300
)
301-
result.append(spec.asAvailabilitySpec)
301+
result.append(spec)
302302

303303
case let name:
304304
var macroMatched = false;

lib/Parse/ParseExpr.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3704,7 +3704,7 @@ ParserResult<AvailabilitySpec> Parser::parseAvailabilitySpec() {
37043704
/// "swift" version-tuple
37053705
/// package-description-version-constraint-spec:
37063706
/// "_PackageDescription" version-tuple
3707-
ParserResult<PlatformAgnosticVersionConstraintAvailabilitySpec>
3707+
ParserResult<AvailabilitySpec>
37083708
Parser::parsePlatformAgnosticVersionConstraintSpec() {
37093709
SourceLoc PlatformAgnosticNameLoc;
37103710
llvm::VersionTuple Version;
@@ -3727,9 +3727,8 @@ Parser::parsePlatformAgnosticVersionConstraintSpec() {
37273727
diag::avail_query_expected_version_number)) {
37283728
return nullptr;
37293729
}
3730-
return makeParserResult(new (Context)
3731-
PlatformAgnosticVersionConstraintAvailabilitySpec(
3732-
Kind.value(), PlatformAgnosticNameLoc, Version, VersionRange));
3730+
return makeParserResult(AvailabilitySpec::createPlatformAgnostic(
3731+
Context, Kind.value(), PlatformAgnosticNameLoc, Version, VersionRange));
37333732
}
37343733

37353734
/// Parse platform-version constraint specification.

0 commit comments

Comments
 (0)