@@ -28,6 +28,8 @@ class raw_ostream;
2828
2929namespace swift {
3030
31+ class ASTContext ;
32+
3133enum StorageIsMutable_t : bool {
3234 StorageIsNotMutable = false ,
3335 StorageIsMutable = true
@@ -57,6 +59,8 @@ enum class AccessorKind {
5759
5860inline bool requiresFeatureCoroutineAccessors (AccessorKind kind) {
5961 switch (kind) {
62+ case AccessorKind::Modify2:
63+ return true ;
6064 case AccessorKind::Get:
6165 case AccessorKind::DistributedGet:
6266 case AccessorKind::Set:
@@ -75,6 +79,7 @@ inline bool isYieldingAccessor(AccessorKind kind) {
7579 switch (kind) {
7680 case AccessorKind::Read:
7781 case AccessorKind::Modify:
82+ case AccessorKind::Modify2:
7883 return true ;
7984 case AccessorKind::Get:
8085 case AccessorKind::DistributedGet:
@@ -96,6 +101,7 @@ inline bool isYieldingDefaultNonmutatingAccessor(AccessorKind kind) {
96101 case AccessorKind::DistributedGet:
97102 case AccessorKind::Set:
98103 case AccessorKind::Modify:
104+ case AccessorKind::Modify2:
99105 case AccessorKind::WillSet:
100106 case AccessorKind::DidSet:
101107 case AccessorKind::Address:
@@ -108,6 +114,7 @@ inline bool isYieldingDefaultNonmutatingAccessor(AccessorKind kind) {
108114inline bool isYieldingDefaultMutatingAccessor (AccessorKind kind) {
109115 switch (kind) {
110116 case AccessorKind::Modify:
117+ case AccessorKind::Modify2:
111118 return true ;
112119 case AccessorKind::Get:
113120 case AccessorKind::DistributedGet:
@@ -297,8 +304,11 @@ enum class WriteImplKind {
297304 // / There's a mutable addressor.
298305 MutableAddress,
299306
300- // / There's a modify coroutine.
307+ // / There's a _modify coroutine.
301308 Modify,
309+
310+ // / There's a modify coroutine.
311+ Modify2,
302312};
303313enum { NumWriteImplKindBits = 4 };
304314
@@ -316,9 +326,12 @@ enum class ReadWriteImplKind {
316326 // / Do a read into a temporary and then a write back.
317327 MaterializeToTemporary,
318328
319- // / There's a modify coroutine.
329+ // / There's a _modify coroutine.
320330 Modify,
321331
332+ // / There's a modify coroutine.
333+ Modify2,
334+
322335 // / We have a didSet, so we're either going to use
323336 // / MaterializeOrTemporary or the "simple didSet"
324337 // access pattern.
@@ -391,6 +404,13 @@ class StorageImplInfo {
391404 assert (readWriteImpl == ReadWriteImplKind::Modify);
392405 return ;
393406
407+ case WriteImplKind::Modify2:
408+ assert (readImpl == ReadImplKind::Get ||
409+ readImpl == ReadImplKind::Address ||
410+ readImpl == ReadImplKind::Read);
411+ assert (readWriteImpl == ReadWriteImplKind::Modify2);
412+ return ;
413+
394414 case WriteImplKind::MutableAddress:
395415 assert (readImpl == ReadImplKind::Get ||
396416 readImpl == ReadImplKind::Address ||
@@ -411,8 +431,9 @@ class StorageImplInfo {
411431 }
412432
413433 static StorageImplInfo getOpaque (StorageIsMutable_t isMutable,
414- OpaqueReadOwnership ownership) {
415- return (isMutable ? getMutableOpaque (ownership)
434+ OpaqueReadOwnership ownership,
435+ const ASTContext &ctx) {
436+ return (isMutable ? getMutableOpaque (ownership, ctx)
416437 : getImmutableOpaque (ownership));
417438 }
418439
@@ -422,7 +443,8 @@ class StorageImplInfo {
422443 }
423444
424445 // / Describe the implementation of a mutable property implemented opaquely.
425- static StorageImplInfo getMutableOpaque (OpaqueReadOwnership ownership);
446+ static StorageImplInfo getMutableOpaque (OpaqueReadOwnership ownership,
447+ const ASTContext &ctx);
426448
427449 static StorageImplInfo getComputed (StorageIsMutable_t isMutable) {
428450 return (isMutable ? getMutableComputed ()
0 commit comments