Skip to content

Commit 77bb14b

Browse files
committed
SE-0106: Add "macOS" as an alias for "OSX" in #available.
...and @available. Later commits will switch which one is the default.
1 parent 5ff3ee3 commit 77bb14b

File tree

4 files changed

+35
-1
lines changed

4 files changed

+35
-1
lines changed

lib/AST/PlatformKind.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ Optional<PlatformKind> swift::platformFromString(StringRef Name) {
5151
return llvm::StringSwitch<Optional<PlatformKind>>(Name)
5252
#define AVAILABILITY_PLATFORM(X, PrettyName) .Case(#X, PlatformKind::X)
5353
#include "swift/AST/PlatformKinds.def"
54+
.Case("macOS", PlatformKind::OSX)
55+
.Case("macOSApplicationExtension", PlatformKind::OSXApplicationExtension)
5456
.Default(Optional<PlatformKind>());
5557
}
5658

test/Parse/availability_query.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,5 +99,8 @@ if 1 != 2, #available(iOS 8.0, *) {}
9999
if case 42 = 42, #available(iOS 8.0, *) {}
100100
if let x = Optional(42), #available(iOS 8.0, *) {}
101101

102+
// Allow "macOS" as well.
103+
if #available(macOS 10.51, *) {
104+
}
102105

103106

test/SILGen/availability_query.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ if #available(iOS 7.1, *) {
2929
if #available(OSX 10.52, *) {
3030
}
3131

32+
// CHECK: [[MAJOR:%.*]] = integer_literal $Builtin.Word, 10
33+
// CHECK: [[MINOR:%.*]] = integer_literal $Builtin.Word, 52
34+
// CHECK: [[PATCH:%.*]] = integer_literal $Builtin.Word, 0
35+
// CHECK: [[QUERY_FUNC:%.*]] = function_ref @_TFs26_stdlib_isOSVersionAtLeastFTBwBwBw_Bi1_ : $@convention(thin) (Builtin.Word, Builtin.Word, Builtin.Word) -> Builtin.Int1
36+
// CHECK: [[QUERY_RESULT:%.*]] = apply [[QUERY_FUNC]]([[MAJOR]], [[MINOR]], [[PATCH]]) : $@convention(thin) (Builtin.Word, Builtin.Word, Builtin.Word) -> Builtin.Int1
37+
if #available(macOS 10.52, *) {
38+
}
39+
3240
// CHECK: [[MAJOR:%.*]] = integer_literal $Builtin.Word, 10
3341
// CHECK: [[MINOR:%.*]] = integer_literal $Builtin.Word, 0
3442
// CHECK: [[PATCH:%.*]] = integer_literal $Builtin.Word, 0

test/Sema/availability.swift

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ let unavailableOnOSX: Int = 0 // expected-note{{explicitly marked unavailable he
8686
let unavailableOniOS: Int = 0
8787
@available(iOS, unavailable) @available(OSX, unavailable)
8888
let unavailableOnBothA: Int = 0 // expected-note{{explicitly marked unavailable here}}
89-
@available(OSX, unavailable)
89+
@available(OSX, unavailable) @available(iOS, unavailable)
9090
let unavailableOnBothB: Int = 0 // expected-note{{explicitly marked unavailable here}}
9191

9292
@available(OSX, unavailable)
@@ -98,14 +98,35 @@ typealias UnavailableOnBothA = Int // expected-note{{explicitly marked unavailab
9898
@available(OSX, unavailable) @available(iOS, unavailable)
9999
typealias UnavailableOnBothB = Int // expected-note{{explicitly marked unavailable here}}
100100

101+
@available(macOS, unavailable)
102+
let unavailableOnMacOS: Int = 0 // expected-note{{explicitly marked unavailable here}}
103+
@available(macOS, unavailable)
104+
typealias UnavailableOnMacOS = Int // expected-note{{explicitly marked unavailable here}}
105+
106+
@available(OSXApplicationExtension, unavailable)
107+
let unavailableOnOSXAppExt: Int = 0
108+
@available(macOSApplicationExtension, unavailable)
109+
let unavailableOnMacOSAppExt: Int = 0
110+
111+
@available(OSXApplicationExtension, unavailable)
112+
typealias UnavailableOnOSXAppExt = Int
113+
@available(macOSApplicationExtension, unavailable)
114+
typealias UnavailableOnMacOSAppExt = Int
115+
101116
func testPlatforms() {
102117
_ = unavailableOnOSX // expected-error{{unavailable}}
103118
_ = unavailableOniOS
104119
_ = unavailableOnBothA // expected-error{{unavailable}}
105120
_ = unavailableOnBothB // expected-error{{unavailable}}
121+
_ = unavailableOnMacOS // expected-error{{unavailable}}
122+
_ = unavailableOnOSXAppExt
123+
_ = unavailableOnMacOSAppExt
106124

107125
let _: UnavailableOnOSX = 0 // expected-error{{unavailable}}
108126
let _: UnavailableOniOS = 0
109127
let _: UnavailableOnBothA = 0 // expected-error{{unavailable}}
110128
let _: UnavailableOnBothB = 0 // expected-error{{unavailable}}
129+
let _: UnavailableOnMacOS = 0 // expected-error{{unavailable}}
130+
let _: UnavailableOnOSXAppExt = 0
131+
let _: UnavailableOnMacOSAppExt = 0
111132
}

0 commit comments

Comments
 (0)