@@ -83,14 +83,19 @@ swift::closestCorrectedPlatformString(StringRef candidate) {
8383 return (minDistance < distanceThreshold) ? result : llvm::None;
8484}
8585
86- static bool isApplicationExtensionPlatform (PlatformKind Platform) {
86+ llvm::Optional<PlatformKind>
87+ swift::basePlatformForExtensionPlatform (PlatformKind Platform) {
8788 switch (Platform) {
8889 case PlatformKind::macOSApplicationExtension:
90+ return PlatformKind::macOS;
8991 case PlatformKind::iOSApplicationExtension:
92+ return PlatformKind::iOS;
9093 case PlatformKind::macCatalystApplicationExtension:
94+ return PlatformKind::macCatalyst;
9195 case PlatformKind::tvOSApplicationExtension:
96+ return PlatformKind::tvOS;
9297 case PlatformKind::watchOSApplicationExtension:
93- return true ;
98+ return PlatformKind::watchOS ;
9499 case PlatformKind::macOS:
95100 case PlatformKind::iOS:
96101 case PlatformKind::macCatalyst:
@@ -99,11 +104,15 @@ static bool isApplicationExtensionPlatform(PlatformKind Platform) {
99104 case PlatformKind::OpenBSD:
100105 case PlatformKind::Windows:
101106 case PlatformKind::none:
102- return false ;
107+ return llvm::None ;
103108 }
104109 llvm_unreachable (" bad PlatformKind" );
105110}
106111
112+ static bool isApplicationExtensionPlatform (PlatformKind Platform) {
113+ return basePlatformForExtensionPlatform (Platform).has_value ();
114+ }
115+
107116static bool isPlatformActiveForTarget (PlatformKind Platform,
108117 const llvm::Triple &Target,
109118 bool EnableAppExtensionRestrictions) {
@@ -187,20 +196,21 @@ PlatformKind swift::targetPlatform(const LangOptions &LangOpts) {
187196
188197bool swift::inheritsAvailabilityFromPlatform (PlatformKind Child,
189198 PlatformKind Parent) {
199+ if (auto ChildPlatformBase = basePlatformForExtensionPlatform (Child)) {
200+ if (Parent == ChildPlatformBase)
201+ return true ;
202+ }
203+
190204 if (Child == PlatformKind::macCatalyst && Parent == PlatformKind::iOS)
191205 return true ;
192206
193207 if (Child == PlatformKind::macCatalystApplicationExtension) {
194208 if (Parent == PlatformKind::iOS ||
195- Parent == PlatformKind::iOSApplicationExtension ||
196- Parent == PlatformKind::macCatalyst) {
209+ Parent == PlatformKind::iOSApplicationExtension) {
197210 return true ;
198211 }
199212 }
200213
201- // Ideally we would have all ApplicationExtension platforms
202- // inherit from their non-extension platform.
203-
204214 return false ;
205215}
206216
0 commit comments