@@ -511,64 +511,60 @@ Decl::getActiveAvailableAttrForCurrentPlatform(bool ignoreAppExtensions) const {
511
511
return bestAttr;
512
512
}
513
513
514
- const AvailableAttr * Decl::getDeprecatedAttr () const {
514
+ std::optional<SemanticAvailableAttr> Decl::getDeprecatedAttr () const {
515
515
auto &ctx = getASTContext ();
516
- const AvailableAttr * result = nullptr ;
516
+ std::optional<SemanticAvailableAttr> result;
517
517
auto bestActive = getActiveAvailableAttrForCurrentPlatform ();
518
518
519
- for (auto semanticAttr :
520
- getSemanticAvailableAttrs (/* includingInactive=*/ false )) {
521
- auto attr = semanticAttr.getParsedAttr ();
522
-
523
- if (attr->hasPlatform () && (!bestActive || semanticAttr != bestActive))
519
+ for (auto attr : getSemanticAvailableAttrs (/* includingInactive=*/ false )) {
520
+ if (attr.isPlatformSpecific () && (!bestActive || attr != bestActive))
524
521
continue ;
525
522
526
523
// Unconditional deprecated.
527
- if (attr-> isUnconditionallyDeprecated ())
524
+ if (attr. isUnconditionallyDeprecated ())
528
525
return attr;
529
526
530
- std::optional<llvm::VersionTuple> deprecatedVersion = attr-> Deprecated ;
527
+ auto deprecatedVersion = attr. getDeprecated () ;
531
528
532
529
StringRef deprecatedPlatform;
533
530
llvm::VersionTuple remappedDeprecatedVersion;
534
531
if (AvailabilityInference::updateDeprecatedPlatformForFallback (
535
- attr, ctx, deprecatedPlatform, remappedDeprecatedVersion))
532
+ attr.getParsedAttr (), ctx, deprecatedPlatform,
533
+ remappedDeprecatedVersion))
536
534
deprecatedVersion = remappedDeprecatedVersion;
537
535
538
536
if (!deprecatedVersion.has_value ())
539
537
continue ;
540
538
541
- llvm::VersionTuple minVersion = semanticAttr .getActiveVersion (ctx);
539
+ llvm::VersionTuple minVersion = attr .getActiveVersion (ctx);
542
540
543
541
// We treat the declaration as deprecated if it is deprecated on
544
542
// all deployment targets.
545
543
if (deprecatedVersion.value () <= minVersion) {
546
- result = attr;
544
+ result. emplace ( attr) ;
547
545
}
548
546
}
549
547
return result;
550
548
}
551
549
552
- const AvailableAttr * Decl::getSoftDeprecatedAttr () const {
550
+ std::optional<SemanticAvailableAttr> Decl::getSoftDeprecatedAttr () const {
553
551
auto &ctx = getASTContext ();
554
- const AvailableAttr * result = nullptr ;
552
+ std::optional<SemanticAvailableAttr> result;
555
553
auto bestActive = getActiveAvailableAttrForCurrentPlatform ();
556
554
557
- for (auto semanticAttr :
558
- getSemanticAvailableAttrs (/* includingInactive=*/ false )) {
559
- auto attr = semanticAttr.getParsedAttr ();
560
-
561
- if (attr->hasPlatform () && (!bestActive || semanticAttr != bestActive))
555
+ for (auto attr : getSemanticAvailableAttrs (/* includingInactive=*/ false )) {
556
+ if (attr.isPlatformSpecific () && (!bestActive || attr != bestActive))
562
557
continue ;
563
558
564
- std::optional<llvm::VersionTuple> deprecatedVersion = attr->Deprecated ;
559
+ // FIXME: This needs to do a version remap.
560
+ auto deprecatedVersion = attr.getDeprecated ();
565
561
if (!deprecatedVersion.has_value ())
566
562
continue ;
567
563
568
- llvm::VersionTuple activeVersion = semanticAttr .getActiveVersion (ctx);
564
+ llvm::VersionTuple activeVersion = attr .getActiveVersion (ctx);
569
565
570
566
if (deprecatedVersion.value () > activeVersion)
571
- result = attr;
567
+ result. emplace ( attr) ;
572
568
}
573
569
return result;
574
570
}
0 commit comments