Skip to content

Commit 5bccbe5

Browse files
committed
AST: Refactor AvailabilityScope::getAvailabilityConditionVersionSourceRange().
Modify it to take an `AvailabilityDomain` and a `DeclContext` which will be necessary in order to compare `AvailabilitySpec`s in a later refactor.
1 parent bd4b562 commit 5bccbe5

File tree

3 files changed

+21
-21
lines changed

3 files changed

+21
-21
lines changed

include/swift/AST/AvailabilityScope.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,10 +264,8 @@ class AvailabilityScope : public ASTAllocated<AvailabilityScope> {
264264
/// condition that introduced the availability scope for a given platform
265265
/// version; if zero or multiple such responsible attributes or statements
266266
/// exist, returns an invalid SourceRange.
267-
SourceRange
268-
getAvailabilityConditionVersionSourceRange(
269-
PlatformKind Platform,
270-
const llvm::VersionTuple &Version) const;
267+
SourceRange getAvailabilityConditionVersionSourceRange(
268+
AvailabilityDomain Domain, const llvm::VersionTuple &Version) const;
271269

272270
/// Returns the availability version range that was explicitly written in
273271
/// source, if applicable. Otherwise, returns null.

lib/AST/AvailabilityScope.cpp

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -265,13 +265,12 @@ SourceLoc AvailabilityScope::getIntroductionLoc() const {
265265
llvm_unreachable("Unhandled Reason in switch.");
266266
}
267267

268-
static SourceRange
269-
getAvailabilityConditionVersionSourceRange(const PoundAvailableInfo *PAI,
270-
PlatformKind Platform,
271-
const llvm::VersionTuple &Version) {
268+
static SourceRange getAvailabilityConditionVersionSourceRange(
269+
const PoundAvailableInfo *PAI, const DeclContext *ReferenceDC,
270+
AvailabilityDomain Domain, const llvm::VersionTuple &Version) {
272271
SourceRange Range;
273272
for (auto *Spec : PAI->getQueries()) {
274-
if (Spec->getPlatform() == Platform && Spec->getVersion() == Version) {
273+
if (Spec->getDomain() == Domain && Spec->getVersion() == Version) {
275274
// More than one: return invalid range, no unique choice.
276275
if (Range.isValid())
277276
return SourceRange();
@@ -283,13 +282,14 @@ getAvailabilityConditionVersionSourceRange(const PoundAvailableInfo *PAI,
283282
}
284283

285284
static SourceRange getAvailabilityConditionVersionSourceRange(
286-
const MutableArrayRef<StmtConditionElement> &Conds, PlatformKind Platform,
285+
const MutableArrayRef<StmtConditionElement> &Conds,
286+
const DeclContext *ReferenceDC, AvailabilityDomain Domain,
287287
const llvm::VersionTuple &Version) {
288288
SourceRange Range;
289289
for (auto const &C : Conds) {
290290
if (C.getKind() == StmtConditionElement::CK_Availability) {
291291
SourceRange R = getAvailabilityConditionVersionSourceRange(
292-
C.getAvailability(), Platform, Version);
292+
C.getAvailability(), ReferenceDC, Domain, Version);
293293
// More than one: return invalid range.
294294
if (Range.isValid())
295295
return SourceRange();
@@ -301,13 +301,13 @@ static SourceRange getAvailabilityConditionVersionSourceRange(
301301
}
302302

303303
static SourceRange
304-
getAvailabilityConditionVersionSourceRange(const Decl *D, PlatformKind Platform,
304+
getAvailabilityConditionVersionSourceRange(const Decl *D,
305+
AvailabilityDomain Domain,
305306
const llvm::VersionTuple &Version) {
306307
SourceRange Range;
307308
for (auto Attr : D->getSemanticAvailableAttrs()) {
308309
if (Attr.getIntroduced().has_value() &&
309-
Attr.getIntroduced().value() == Version &&
310-
Attr.getPlatform() == Platform) {
310+
Attr.getIntroduced().value() == Version && Attr.getDomain() == Domain) {
311311

312312
// More than one: return invalid range.
313313
if (Range.isValid())
@@ -320,29 +320,31 @@ getAvailabilityConditionVersionSourceRange(const Decl *D, PlatformKind Platform,
320320
}
321321

322322
SourceRange AvailabilityScope::getAvailabilityConditionVersionSourceRange(
323-
PlatformKind Platform, const llvm::VersionTuple &Version) const {
323+
AvailabilityDomain Domain, const llvm::VersionTuple &Version) const {
324324
switch (getReason()) {
325325
case Reason::Decl:
326326
return ::getAvailabilityConditionVersionSourceRange(Node.getAsDecl(),
327-
Platform, Version);
327+
Domain, Version);
328328

329329
case Reason::IfStmtThenBranch:
330330
case Reason::IfStmtElseBranch:
331331
return ::getAvailabilityConditionVersionSourceRange(
332-
Node.getAsIfStmt()->getCond(), Platform, Version);
332+
Node.getAsIfStmt()->getCond(), Node.getDeclContext(), Domain, Version);
333333

334334
case Reason::ConditionFollowingAvailabilityQuery:
335335
return ::getAvailabilityConditionVersionSourceRange(
336-
Node.getAsPoundAvailableInfo(), Platform, Version);
336+
Node.getAsPoundAvailableInfo(), Node.getDeclContext(), Domain, Version);
337337

338338
case Reason::GuardStmtFallthrough:
339339
case Reason::GuardStmtElseBranch:
340340
return ::getAvailabilityConditionVersionSourceRange(
341-
Node.getAsGuardStmt()->getCond(), Platform, Version);
341+
Node.getAsGuardStmt()->getCond(), Node.getDeclContext(), Domain,
342+
Version);
342343

343344
case Reason::WhileStmtBody:
344345
return ::getAvailabilityConditionVersionSourceRange(
345-
Node.getAsWhileStmt()->getCond(), Platform, Version);
346+
Node.getAsWhileStmt()->getCond(), Node.getDeclContext(), Domain,
347+
Version);
346348

347349
case Reason::Root:
348350
case Reason::DeclImplicit:

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2026,7 +2026,7 @@ static bool fixAvailabilityByNarrowingNearbyVersionCheck(
20262026
return false;
20272027

20282028
auto FixRange = scope->getAvailabilityConditionVersionSourceRange(
2029-
Platform, RunningVers);
2029+
AvailabilityDomain::forPlatform(Platform), RunningVers);
20302030
if (!FixRange.isValid())
20312031
return false;
20322032
// Have found a nontrivial availability scope-introducer to narrow.

0 commit comments

Comments
 (0)