@@ -223,7 +223,7 @@ AvailabilityContext::getAvailabilityRange(AvailabilityDomain domain,
223223 const ASTContext &ctx) const {
224224 DEBUG_ASSERT (domain.supportsContextRefinement ());
225225
226- if (domain.isActive (ctx) && domain. isPlatform ( ))
226+ if (domain.isActivePlatform (ctx))
227227 return storage->platformRange ;
228228
229229 for (auto domainInfo : storage->getDomainInfos ()) {
@@ -287,8 +287,9 @@ void AvailabilityContext::constrainWithPlatformRange(
287287void AvailabilityContext::constrainWithAvailabilityRange (
288288 const AvailabilityRange &range, AvailabilityDomain domain,
289289 const ASTContext &ctx) {
290+ DEBUG_ASSERT (domain.supportsContextRefinement ());
290291
291- if (domain.isActive (ctx) && domain. isPlatform ( )) {
292+ if (domain.isActivePlatform (ctx)) {
292293 constrainWithPlatformRange (range, ctx);
293294 return ;
294295 }
@@ -344,7 +345,7 @@ void AvailabilityContext::constrainWithDeclAndPlatformRange(
344345 break ;
345346 case AvailabilityConstraint::Reason::PotentiallyUnavailable:
346347 if (auto introducedRange = attr.getIntroducedRange (ctx)) {
347- if (domain.isActive (ctx) && domain. isPlatform ( )) {
348+ if (domain.isActivePlatform (ctx)) {
348349 isConstrained |= constrainRange (platformRange, *introducedRange);
349350 } else {
350351 declDomainInfos.push_back ({domain, *introducedRange});
@@ -403,12 +404,35 @@ void AvailabilityContext::print(llvm::raw_ostream &os) const {
403404 os << " version=" << stringForAvailability (getPlatformRange ());
404405
405406 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- " ," );
407+ if (!domainInfos.empty ()) {
408+ auto availableInfos = llvm::make_filter_range (
409+ domainInfos, [](auto info) { return !info.isUnavailable (); });
410+
411+ if (!availableInfos.empty ()) {
412+ os << " available=" ;
413+ llvm::interleave (
414+ availableInfos, os,
415+ [&](const DomainInfo &domainInfo) {
416+ domainInfo.getDomain ().print (os);
417+ if (domainInfo.getDomain ().isVersioned () &&
418+ domainInfo.getRange ().hasMinimumVersion ())
419+ os << " >=" << domainInfo.getRange ().getAsString ();
420+ },
421+ " ," );
422+ }
423+
424+ auto unavailableInfos = llvm::make_filter_range (
425+ domainInfos, [](auto info) { return info.isUnavailable (); });
426+
427+ if (!unavailableInfos.empty ()) {
428+ os << " unavailable=" ;
429+ llvm::interleave (
430+ unavailableInfos, os,
431+ [&](const DomainInfo &domainInfo) {
432+ domainInfo.getDomain ().print (os);
433+ },
434+ " ," );
435+ }
412436 }
413437
414438 if (isDeprecated ())
0 commit comments