@@ -135,8 +135,8 @@ static AvailableAttr *createAvailableAttr(PlatformKind Platform,
135
135
}
136
136
137
137
void AvailabilityInference::applyInferredAvailableAttrs (
138
- Decl *ToDecl, ArrayRef<const Decl *> InferredFromDecls,
139
- ASTContext &Context) {
138
+ Decl *ToDecl, ArrayRef<const Decl *> InferredFromDecls) {
139
+ auto &Context = ToDecl-> getASTContext ();
140
140
141
141
// Let the new AvailabilityAttr inherit the message and rename.
142
142
// The first encountered message / rename will win; this matches the
@@ -370,8 +370,8 @@ bool AvailabilityInference::updateBeforePlatformForFallback(
370
370
}
371
371
372
372
const AvailableAttr *
373
- AvailabilityInference::attrForAnnotatedAvailableRange (const Decl *D,
374
- ASTContext &Ctx) {
373
+ AvailabilityInference::attrForAnnotatedAvailableRange (const Decl *D) {
374
+ ASTContext &Ctx = D-> getASTContext ();
375
375
const AvailableAttr *bestAvailAttr = nullptr ;
376
376
377
377
D = abstractSyntaxDeclForAvailableAttribute (D);
@@ -395,8 +395,7 @@ AvailabilityInference::attrForAnnotatedAvailableRange(const Decl *D,
395
395
std::optional<AvailableAttrDeclPair>
396
396
SemanticAvailableRangeAttrRequest::evaluate (Evaluator &evaluator,
397
397
const Decl *decl) const {
398
- if (auto attr = AvailabilityInference::attrForAnnotatedAvailableRange (
399
- decl, decl->getASTContext ()))
398
+ if (auto attr = AvailabilityInference::attrForAnnotatedAvailableRange (decl))
400
399
return std::make_pair (attr, decl);
401
400
402
401
if (auto *parent =
@@ -414,16 +413,16 @@ Decl::getSemanticAvailableRangeAttr() const {
414
413
}
415
414
416
415
std::optional<AvailabilityRange>
417
- AvailabilityInference::annotatedAvailableRange (const Decl *D, ASTContext &Ctx ) {
418
- auto bestAvailAttr = attrForAnnotatedAvailableRange (D, Ctx );
416
+ AvailabilityInference::annotatedAvailableRange (const Decl *D) {
417
+ auto bestAvailAttr = attrForAnnotatedAvailableRange (D);
419
418
if (!bestAvailAttr)
420
419
return std::nullopt ;
421
420
422
- return availableRange (bestAvailAttr, Ctx );
421
+ return availableRange (bestAvailAttr, D-> getASTContext () );
423
422
}
424
423
425
424
bool Decl::isAvailableAsSPI () const {
426
- return AvailabilityInference::isAvailableAsSPI (this , getASTContext () );
425
+ return AvailabilityInference::isAvailableAsSPI (this );
427
426
}
428
427
429
428
std::optional<AvailableAttrDeclPair>
@@ -540,9 +539,8 @@ AvailabilityRange AvailabilityInference::annotatedAvailableRangeForAttr(
540
539
return AvailabilityRange::alwaysAvailable ();
541
540
}
542
541
543
- static const AvailableAttr *attrForAvailableRange (const Decl *D,
544
- ASTContext &Ctx) {
545
- if (auto attr = AvailabilityInference::attrForAnnotatedAvailableRange (D, Ctx))
542
+ static const AvailableAttr *attrForAvailableRange (const Decl *D) {
543
+ if (auto attr = AvailabilityInference::attrForAnnotatedAvailableRange (D))
546
544
return attr;
547
545
548
546
// Unlike other declarations, extensions can be used without referring to them
@@ -555,25 +553,23 @@ static const AvailableAttr *attrForAvailableRange(const Decl *D,
555
553
556
554
DeclContext *DC = D->getDeclContext ();
557
555
if (auto *ED = dyn_cast<ExtensionDecl>(DC)) {
558
- if (auto attr =
559
- AvailabilityInference::attrForAnnotatedAvailableRange (ED, Ctx))
556
+ if (auto attr = AvailabilityInference::attrForAnnotatedAvailableRange (ED))
560
557
return attr;
561
558
}
562
559
563
560
return nullptr ;
564
561
}
565
562
566
- AvailabilityRange AvailabilityInference::availableRange (const Decl *D,
567
- ASTContext &Ctx) {
568
- if (auto attr = attrForAvailableRange (D, Ctx))
569
- return availableRange (attr, Ctx);
563
+ AvailabilityRange AvailabilityInference::availableRange (const Decl *D) {
564
+ if (auto attr = attrForAvailableRange (D))
565
+ return availableRange (attr, D->getASTContext ());
570
566
571
567
// Treat unannotated declarations as always available.
572
568
return AvailabilityRange::alwaysAvailable ();
573
569
}
574
570
575
- bool AvailabilityInference::isAvailableAsSPI (const Decl *D, ASTContext &Ctx ) {
576
- if (auto attr = attrForAvailableRange (D, Ctx ))
571
+ bool AvailabilityInference::isAvailableAsSPI (const Decl *D) {
572
+ if (auto attr = attrForAvailableRange (D))
577
573
return attr->IsSPI ;
578
574
579
575
return false ;
@@ -598,15 +594,12 @@ namespace {
598
594
// / Infers the availability required to access a type.
599
595
class AvailabilityInferenceTypeWalker : public TypeWalker {
600
596
public:
601
- ASTContext &AC;
602
597
AvailabilityRange AvailabilityInfo = AvailabilityRange::alwaysAvailable();
603
598
604
- AvailabilityInferenceTypeWalker (ASTContext &AC) : AC(AC) {}
605
-
606
599
Action walkToTypePre (Type ty) override {
607
600
if (auto *nominalDecl = ty->getAnyNominal ()) {
608
601
AvailabilityInfo.intersectWith (
609
- AvailabilityInference::availableRange (nominalDecl, AC ));
602
+ AvailabilityInference::availableRange (nominalDecl));
610
603
}
611
604
612
605
return Action::Continue;
@@ -615,7 +608,7 @@ class AvailabilityInferenceTypeWalker : public TypeWalker {
615
608
} // end anonymous namespace
616
609
617
610
AvailabilityRange AvailabilityInference::inferForType (Type t) {
618
- AvailabilityInferenceTypeWalker walker (t-> getASTContext ()) ;
611
+ AvailabilityInferenceTypeWalker walker;
619
612
t.walk (walker);
620
613
return walker.AvailabilityInfo ;
621
614
}
0 commit comments