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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
// RUN: %target-typecheck-verify-swift \
// RUN: -verify-additional-prefix enabled- \
// RUN: -enable-experimental-feature CoroutineAccessors \
// RUN: -debug-diagnostic-names
// REQUIRES: swift_feature_CoroutineAccessors
// A read requirement may be satisfied by
// - a stored property
// - a _read accessor
// - a read accessor
// - a get accessor
// - an unsafeAddress accessor
struct U : ~Copyable {}
protocol P : ~Copyable {
@_borrowed
var ubgs: U { get set }
var urs: U { read set }
var ur: U { read }
}
struct ImplStored : ~Copyable & P {
var ubgs: U
var urs: U
var ur: U
}
struct ImplUnderscoredCoroutineAccessors : ~Copyable & P {
typealias Property = U
var _i: U
var ubgs: U {
_read {
yield _i
}
_modify {
yield &_i
}
}
var urs: U {
_read {
yield _i
}
_modify {
yield &_i
}
}
var ur: U {
_read {
yield _i
}
}
}
struct ImplCoroutineAccessors : ~Copyable & P {
var _i: U
var ubgs: U {
read {
yield _i
}
modify {
yield &_i
}
}
var urs: U {
read {
yield _i
}
modify {
yield &_i
}
}
var ur: U {
read {
yield _i
}
}
}
struct ImplGetSet : P {
var _i: U {
get { return U() }
set {}
}
var ubgs: U {
get {
return _i
}
set {
_i = newValue
}
}
var urs: U {
get {
return _i
}
set {
_i = newValue
}
}
var ur: U {
get {
return _i
}
set {
_i = newValue
}
}
}
struct ImplUnsafeAddressors : P {
var iAddr: UnsafePointer<U>
var iMutableAddr: UnsafeMutablePointer<U> {
.init(mutating: iAddr)
}
var ubgs: U {
unsafeAddress {
return iAddr
}
unsafeMutableAddress {
return iMutableAddr
}
}
var urs: U {
unsafeAddress {
return iAddr
}
unsafeMutableAddress {
return iMutableAddr
}
}
var ur: U {
unsafeAddress {
return iAddr
}
unsafeMutableAddress {
return iMutableAddr
}
}
}
|