mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Builds on 36eae9d4f6 to emit a message instead of just trapping
when a switch over a non-frozen enum ends up not matching anything.
If the enum is known to be an @objc enum, the message is
unexpected enum case 'MyEnum(rawValue: -42)'
and if it's anything else (a Swift enum, a tuple containing enums,
whatever), it's a more opaque
unexpected enum case while switching on value of type 'MyEnum'
The reason for this is to avoid calling String(describing:) or
String(reflecting:) an arbitrary value when the enum might conform to
CustomStringConvertible and therefore /itself/ have a switch that's
going to fall off the end. By handling plain @objc enums (using a
bitcast), we've at least covered the 90% case.
rdar://problem/37728359
153 lines
2.8 KiB
Swift
153 lines
2.8 KiB
Swift
public func getVersion() -> Int {
|
|
#if BEFORE
|
|
return 0
|
|
#else
|
|
return 1
|
|
#endif
|
|
}
|
|
|
|
public var starfishCount: Int = 0
|
|
|
|
public class Starfish {
|
|
public init() {
|
|
starfishCount += 1
|
|
}
|
|
|
|
deinit {
|
|
starfishCount -= 1
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
|
|
public enum AddNoPayloadToSingleton {
|
|
case Noses
|
|
#if AFTER
|
|
case Tummies
|
|
case Tails
|
|
#endif
|
|
}
|
|
|
|
public func addNoPayloadToSingletonCases() -> [AddNoPayloadToSingleton] {
|
|
#if BEFORE
|
|
return [.Noses]
|
|
#else
|
|
return [.Noses, .Tummies, .Tails]
|
|
#endif
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
|
|
public enum AddPayloadToSingleton {
|
|
case Cats
|
|
#if AFTER
|
|
case Horses(Starfish)
|
|
#endif
|
|
}
|
|
|
|
public func addPayloadToSingletonCases(_ s: Starfish)
|
|
-> [AddPayloadToSingleton] {
|
|
#if BEFORE
|
|
return [.Cats]
|
|
#else
|
|
return [.Cats, .Horses(s)]
|
|
#endif
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
|
|
public enum AddPayloadsToSingleton {
|
|
case Cats
|
|
#if AFTER
|
|
case Horses(Starfish)
|
|
case Foxes(Starfish, Starfish)
|
|
#endif
|
|
}
|
|
|
|
public func addPayloadsToSingletonCases(_ s: Starfish)
|
|
-> [AddPayloadsToSingleton] {
|
|
#if BEFORE
|
|
return [.Cats]
|
|
#else
|
|
return [.Cats, .Horses(s), .Foxes(s, s)]
|
|
#endif
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
|
|
public enum AddNoPayloadToSinglePayload {
|
|
case Cats(Starfish)
|
|
case Noses
|
|
#if AFTER
|
|
case Tummies
|
|
#endif
|
|
}
|
|
|
|
public func addNoPayloadToSinglePayloadCases(_ s: Starfish)
|
|
-> [AddNoPayloadToSinglePayload] {
|
|
#if BEFORE
|
|
return [.Cats(s), .Noses]
|
|
#else
|
|
return [.Cats(s), .Noses, .Tummies]
|
|
#endif
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
|
|
public enum AddPayloadToSinglePayload {
|
|
case Cats
|
|
case Paws(Starfish)
|
|
#if AFTER
|
|
case Tails(Starfish)
|
|
#endif
|
|
}
|
|
|
|
public func addPayloadToSinglePayloadCases(_ s: Starfish)
|
|
-> [AddPayloadToSinglePayload] {
|
|
#if BEFORE
|
|
return [.Cats, .Paws(s)]
|
|
#else
|
|
return [.Cats, .Paws(s), .Tails(s)]
|
|
#endif
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
|
|
public enum AddNoPayloadToMultiPayload {
|
|
case Cats(Starfish)
|
|
case Puppies(Starfish)
|
|
#if AFTER
|
|
case Lambs
|
|
case Piglets
|
|
#endif
|
|
}
|
|
|
|
public func addNoPayloadToMultiPayloadCases(_ s: Starfish)
|
|
-> [AddNoPayloadToMultiPayload] {
|
|
#if BEFORE
|
|
return [.Cats(s), .Puppies(s)]
|
|
#else
|
|
return [.Cats(s), .Puppies(s), .Lambs, .Piglets]
|
|
#endif
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
|
|
public enum AddPayloadToMultiPayload {
|
|
case Cats(Starfish)
|
|
case Ponies(Starfish)
|
|
case Pandas
|
|
#if AFTER
|
|
case Piglets(Int64)
|
|
#endif
|
|
}
|
|
|
|
public func addPayloadToMultiPayloadCases(_ s: Starfish)
|
|
-> [AddPayloadToMultiPayload] {
|
|
#if BEFORE
|
|
return [.Cats(s), .Ponies(s), .Pandas]
|
|
#else
|
|
return [.Cats(s), .Ponies(s), .Pandas, .Piglets(1234321)]
|
|
#endif
|
|
}
|