File tree Expand file tree Collapse file tree 2 files changed +56
-6
lines changed Expand file tree Collapse file tree 2 files changed +56
-6
lines changed Original file line number Diff line number Diff line change @@ -403,12 +403,35 @@ void AvailabilityContext::print(llvm::raw_ostream &os) const {
403
403
os << " version=" << stringForAvailability (getPlatformRange ());
404
404
405
405
auto domainInfos = storage->getDomainInfos ();
406
- if (domainInfos.size () > 0 ) {
407
- os << " unavailable=" ;
408
- llvm::interleave (
409
- domainInfos, os,
410
- [&](const DomainInfo &domainInfo) { domainInfo.getDomain ().print (os); },
411
- " ," );
406
+ if (!domainInfos.empty ()) {
407
+ auto availableInfos = llvm::make_filter_range (
408
+ domainInfos, [](auto info) { return !info.isUnavailable (); });
409
+
410
+ if (!availableInfos.empty ()) {
411
+ os << " available=" ;
412
+ llvm::interleave (
413
+ availableInfos, os,
414
+ [&](const DomainInfo &domainInfo) {
415
+ domainInfo.getDomain ().print (os);
416
+ if (domainInfo.getDomain ().isVersioned () &&
417
+ domainInfo.getRange ().hasMinimumVersion ())
418
+ os << " >=" << domainInfo.getRange ().getAsString ();
419
+ },
420
+ " ," );
421
+ }
422
+
423
+ auto unavailableInfos = llvm::make_filter_range (
424
+ domainInfos, [](auto info) { return info.isUnavailable (); });
425
+
426
+ if (!unavailableInfos.empty ()) {
427
+ os << " unavailable=" ;
428
+ llvm::interleave (
429
+ unavailableInfos, os,
430
+ [&](const DomainInfo &domainInfo) {
431
+ domainInfo.getDomain ().print (os);
432
+ },
433
+ " ," );
434
+ }
412
435
}
413
436
414
437
if (isDeprecated ())
Original file line number Diff line number Diff line change
1
+ // RUN: %target-swift-frontend -typecheck %s \
2
+ // RUN: -enable-experimental-feature CustomAvailability \
3
+ // RUN: -define-enabled-availability-domain A \
4
+ // RUN: -define-enabled-availability-domain B \
5
+ // RUN: -dump-availability-scopes > %t.dump 2>&1
6
+ // RUN: %FileCheck --strict-whitespace %s < %t.dump
7
+
8
+ // REQUIRES: swift_feature_CustomAvailability
9
+
10
+ // CHECK: {{^}}(root version={{.*}}
11
+ // CHECK: {{^}} (decl version={{.*}} available=A decl=availableInA()
12
+ @available ( A)
13
+ func availableInA( ) { }
14
+
15
+ // CHECK: {{^}} (decl version={{.*}} unavailable=A decl=unavailableInA()
16
+ @available ( A, unavailable)
17
+ func unavailableInA( ) { }
18
+
19
+ // CHECK: {{^}} (decl version={{.*}} available=A,B decl=availableInAB()
20
+ @available ( A)
21
+ @available ( B)
22
+ func availableInAB( ) { }
23
+
24
+ // FIXME: [availability] Should be "available=A"
25
+ // CHECK: {{^}} (decl version={{.*}} deprecated decl=deprecatedInA()
26
+ @available ( A, deprecated)
27
+ func deprecatedInA( ) { }
You can’t perform that action at this time.
0 commit comments