1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
// RUN: %target-run-simple-swift | %FileCheck %s
// REQUIRES: executable_test
protocol Protocol : class {
func noop()
}
//========================== Test pure Swift classes ==========================
class SwiftClassBase : Protocol {
func noop() { print("noop") }
}
class SwiftClass : SwiftClassBase {
override init() {
print("SwiftClass Created")
}
deinit {
print("SwiftClass Destroyed")
}
}
func printState(_ x : SwiftClassBase?) {
print((x != nil) ? "is present" : "is nil")
}
func testSwiftClass() {
print("testSwiftClass") // CHECK: testSwiftClass
weak var w : SwiftClassBase?
printState(w) // CHECK-NEXT: is nil
var c : SwiftClassBase = SwiftClass() // CHECK: SwiftClass Created
printState(w) // CHECK-NEXT: is nil
w = c
printState(w) // CHECK-NEXT: is present
c.noop() // CHECK-NEXT: noop
c = SwiftClassBase() // CHECK-NEXT: SwiftClass Destroyed
printState(w) // CHECK-NEXT: is nil
}
testSwiftClass()
func testSwiftImplicitOptionalClass() {
print("testSwiftImplicitOptionalClass") // CHECK: testSwiftImplicitOptionalClass
weak var w : SwiftClassBase!
printState(w) // CHECK-NEXT: is nil
var c : SwiftClassBase = SwiftClass() // CHECK: SwiftClass Created
printState(w) // CHECK-NEXT: is nil
w = c
printState(w) // CHECK-NEXT: is present
c.noop() // CHECK-NEXT: noop
c = SwiftClassBase() // CHECK-NEXT: SwiftClass Destroyed
printState(w) // CHECK-NEXT: is nil
}
testSwiftImplicitOptionalClass()
func testWeakInLet() {
print("testWeakInLet") // CHECK-LABEL: testWeakInLet
struct WeakBox {
weak var value: SwiftClassBase?
}
var obj: SwiftClassBase? = SwiftClass() // CHECK: SwiftClass Created
let box = WeakBox(value: obj)
printState(box.value) // CHECK-NEXT: is present
obj = nil // CHECK-NEXT: SwiftClass Destroyed
printState(box.value) // CHECK-NEXT: is nil
}
testWeakInLet()
//======================== Test Classbound Protocols ========================
func printState(_ x : Protocol?) {
print((x != nil) ? "is present" : "is nil")
}
func testProtocol() {
print("testProtocol") // CHECK: testProtocol
weak var w : Protocol?
printState(w) // CHECK-NEXT: is nil
var c : SwiftClassBase = SwiftClass() // CHECK: SwiftClass Created
printState(w) // CHECK-NEXT: is nil
w = c
printState(w) // CHECK-NEXT: is present
c.noop() // CHECK-NEXT: noop
c = SwiftClassBase() // CHECK-NEXT: SwiftClass Destroyed
printState(w) // CHECK-NEXT: is nil
}
testProtocol()
protocol P : class { }
func test_rdar15293354() {
weak var x : P? = .none
if x != nil {
_ = x!
}
}
test_rdar15293354()
func testStaticObject() {
print("testStaticObject") // CHECK: testStaticObject
enum Static {
static let staticObject = SwiftClassBase()
}
weak var w: SwiftClassBase?
printState(w) // CHECK-NEXT: is nil
w = Static.staticObject
printState(w) // CHECK-NEXT: is present
}
testStaticObject()
|