@@ -2368,9 +2368,7 @@ class AvailabilityWalker : public ASTWalker {
2368
2368
2369
2369
bool diagAvailability (const ValueDecl *D, SourceRange R,
2370
2370
const ApplyExpr *call = nullptr ,
2371
- bool AllowPotentiallyUnavailableProtocol = false ,
2372
- bool SignalOnPotentialUnavailability = true ,
2373
- bool ForInout = false );
2371
+ DeclAvailabilityFlags flags = None);
2374
2372
2375
2373
private:
2376
2374
bool diagnoseIncDecRemoval (const ValueDecl *D, SourceRange R,
@@ -2504,46 +2502,45 @@ class AvailabilityWalker : public ASTWalker {
2504
2502
switch (AccessContext) {
2505
2503
case MemberAccessContext::Getter:
2506
2504
diagAccessorAvailability (D->getGetter (), ReferenceRange, ReferenceDC,
2507
- /* ForInout= */ false );
2505
+ None );
2508
2506
break ;
2509
2507
2510
2508
case MemberAccessContext::Setter:
2511
2509
diagAccessorAvailability (D->getSetter (), ReferenceRange, ReferenceDC,
2512
- /* ForInout= */ false );
2510
+ None );
2513
2511
break ;
2514
2512
2515
2513
case MemberAccessContext::InOut:
2516
2514
diagAccessorAvailability (D->getGetter (), ReferenceRange, ReferenceDC,
2517
- /* ForInout= */ true );
2515
+ DeclAvailabilityFlag:: ForInout);
2518
2516
2519
2517
diagAccessorAvailability (D->getSetter (), ReferenceRange, ReferenceDC,
2520
- /* ForInout= */ true );
2518
+ DeclAvailabilityFlag:: ForInout);
2521
2519
break ;
2522
2520
}
2523
2521
}
2524
2522
2525
2523
// / Emit a diagnostic, if necessary for a potentially unavailable accessor.
2526
2524
void diagAccessorAvailability (AccessorDecl *D, SourceRange ReferenceRange,
2527
2525
const DeclContext *ReferenceDC,
2528
- bool ForInout) const {
2526
+ DeclAvailabilityFlags Flags) const {
2527
+ Flags &= DeclAvailabilityFlag::ForInout;
2528
+ Flags |= DeclAvailabilityFlag::ContinueOnPotentialUnavailability;
2529
2529
if (diagnoseDeclAvailability (D, TC,
2530
2530
const_cast <DeclContext*>(ReferenceDC),
2531
2531
ReferenceRange,
2532
- /* AllowPotentiallyUnavailableProtocol*/ false ,
2533
- /* SignalOnPotentialUnavailability*/ false ,
2534
- ForInout))
2532
+ Flags))
2535
2533
return ;
2536
2534
}
2537
2535
};
2538
2536
} // end anonymous namespace
2539
2537
2540
2538
// / Diagnose uses of unavailable declarations. Returns true if a diagnostic
2541
2539
// / was emitted.
2542
- bool AvailabilityWalker::diagAvailability (const ValueDecl *D, SourceRange R,
2543
- const ApplyExpr *call,
2544
- bool AllowPotentiallyUnavailableProtocol,
2545
- bool SignalOnPotentialUnavailability,
2546
- bool ForInout) {
2540
+ bool
2541
+ AvailabilityWalker::diagAvailability (const ValueDecl *D, SourceRange R,
2542
+ const ApplyExpr *call,
2543
+ DeclAvailabilityFlags Flags) {
2547
2544
if (!D)
2548
2545
return false ;
2549
2546
@@ -2582,20 +2579,22 @@ bool AvailabilityWalker::diagAvailability(const ValueDecl *D, SourceRange R,
2582
2579
if (!isAccessorWithDeprecatedStorage)
2583
2580
TC.diagnoseIfDeprecated (R, DC, D, call);
2584
2581
2585
- if (AllowPotentiallyUnavailableProtocol && isa<ProtocolDecl>(D))
2582
+ if (Flags.contains (DeclAvailabilityFlag::AllowPotentiallyUnavailableProtocol)
2583
+ && isa<ProtocolDecl>(D))
2586
2584
return false ;
2587
2585
2588
2586
// Diagnose (and possibly signal) for potential unavailability
2589
2587
auto maybeUnavail = TC.checkDeclarationAvailability (D, R.Start , DC);
2590
2588
if (maybeUnavail.hasValue ()) {
2591
2589
if (accessor) {
2590
+ bool forInout = Flags.contains (DeclAvailabilityFlag::ForInout);
2592
2591
TC.diagnosePotentialAccessorUnavailability (accessor, R, DC,
2593
2592
maybeUnavail.getValue (),
2594
- ForInout );
2593
+ forInout );
2595
2594
} else {
2596
2595
TC.diagnosePotentialUnavailability (D, R, DC, maybeUnavail.getValue ());
2597
2596
}
2598
- if (SignalOnPotentialUnavailability )
2597
+ if (!Flags. contains (DeclAvailabilityFlag::ContinueOnPotentialUnavailability) )
2599
2598
return true ;
2600
2599
}
2601
2600
return false ;
@@ -2769,13 +2768,8 @@ bool swift::diagnoseDeclAvailability(const ValueDecl *Decl,
2769
2768
TypeChecker &TC,
2770
2769
DeclContext *DC,
2771
2770
SourceRange R,
2772
- bool AllowPotentiallyUnavailableProtocol,
2773
- bool SignalOnPotentialUnavailability,
2774
- bool ForInout)
2771
+ DeclAvailabilityFlags Flags)
2775
2772
{
2776
2773
AvailabilityWalker AW (TC, DC);
2777
- return AW.diagAvailability (Decl, R, nullptr ,
2778
- AllowPotentiallyUnavailableProtocol,
2779
- SignalOnPotentialUnavailability,
2780
- ForInout);
2774
+ return AW.diagAvailability (Decl, R, nullptr , Flags);
2781
2775
}
0 commit comments