@@ -345,9 +345,7 @@ IsSetterMutatingRequest::evaluate(Evaluator &evaluator,
345345 if (auto *didSet = var->getParsedAccessor (AccessorKind::DidSet)) {
346346 // If there's a didSet, we call the getter for the 'oldValue', and so
347347 // should consider the getter's mutatingness as well
348- if (!didSet->isSimpleDidSet ()) {
349- isMutating |= (mut->Getter == PropertyWrapperMutability::Mutating);
350- }
348+ isMutating |= (mut->Getter == PropertyWrapperMutability::Mutating);
351349 isMutating |= didSet->getAttrs ().hasAttribute <MutatingAttr>();
352350 }
353351 if (auto *willSet = var->getParsedAccessor (AccessorKind::WillSet))
@@ -1761,9 +1759,10 @@ synthesizeCoroutineAccessorBody(AccessorDecl *accessor, ASTContext &ctx) {
17611759 // serialized, which prevents them from being able to directly reference
17621760 // didSet/willSet accessors, which are private.
17631761 if (isModify &&
1764- (storageReadWriteImpl == ReadWriteImplKind::StoredWithSimpleDidSet ||
1765- storageReadWriteImpl == ReadWriteImplKind::InheritedWithSimpleDidSet) &&
1766- !accessor->hasForcedStaticDispatch ()) {
1762+ !accessor->hasForcedStaticDispatch () &&
1763+ (storageReadWriteImpl == ReadWriteImplKind::StoredWithDidSet ||
1764+ storageReadWriteImpl == ReadWriteImplKind::InheritedWithDidSet) &&
1765+ storage->getParsedAccessor (AccessorKind::DidSet)->isSimpleDidSet ()) {
17671766 return synthesizeModifyCoroutineBodyWithSimpleDidSet (accessor, ctx);
17681767 }
17691768
@@ -2321,9 +2320,11 @@ IsAccessorTransparentRequest::evaluate(Evaluator &evaluator,
23212320 }
23222321
23232322 switch (storage->getReadWriteImpl ()) {
2324- case ReadWriteImplKind::StoredWithSimpleDidSet:
2325- case ReadWriteImplKind::InheritedWithSimpleDidSet:
2326- return false ;
2323+ case ReadWriteImplKind::StoredWithDidSet:
2324+ case ReadWriteImplKind::InheritedWithDidSet:
2325+ if (storage->getAccessor (AccessorKind::DidSet)->isSimpleDidSet ())
2326+ return false ;
2327+ break ;
23272328 default :
23282329 break ;
23292330 }
@@ -3078,10 +3079,6 @@ StorageImplInfoRequest::evaluate(Evaluator &evaluator,
30783079 bool hasSetter = storage->getParsedAccessor (AccessorKind::Set);
30793080 bool hasModify = storage->getParsedAccessor (AccessorKind::Modify);
30803081 bool hasMutableAddress = storage->getParsedAccessor (AccessorKind::MutableAddress);
3081- bool hasSimpleDidSet =
3082- hasDidSet && const_cast <AccessorDecl *>(
3083- storage->getParsedAccessor (AccessorKind::DidSet))
3084- ->isSimpleDidSet ();
30853082
30863083 // 'get', 'read', and a non-mutable addressor are all exclusive.
30873084 ReadImplKind readImpl;
@@ -3143,22 +3140,22 @@ StorageImplInfoRequest::evaluate(Evaluator &evaluator,
31433140 // Check if we have observers.
31443141 } else if (readImpl == ReadImplKind::Inherited) {
31453142 writeImpl = WriteImplKind::InheritedWithObservers;
3146- readWriteImpl = ReadWriteImplKind::MaterializeToTemporary;
31473143
3148- if (!hasWillSet && hasSimpleDidSet) {
3149- readWriteImpl = ReadWriteImplKind::InheritedWithSimpleDidSet;
3150- }
3144+ if (hasWillSet)
3145+ readWriteImpl = ReadWriteImplKind::MaterializeToTemporary;
3146+ else
3147+ readWriteImpl = ReadWriteImplKind::InheritedWithDidSet;
31513148
31523149 // Otherwise, it's stored.
31533150 } else if (readImpl == ReadImplKind::Stored &&
31543151 !cast<VarDecl>(storage)->isLet ()) {
31553152 if (hasWillSet || hasDidSet) {
31563153 writeImpl = WriteImplKind::StoredWithObservers;
3157- readWriteImpl = ReadWriteImplKind::MaterializeToTemporary;
31583154
3159- if (!hasWillSet && hasSimpleDidSet) {
3160- readWriteImpl = ReadWriteImplKind::StoredWithSimpleDidSet;
3161- }
3155+ if (hasWillSet)
3156+ readWriteImpl = ReadWriteImplKind::MaterializeToTemporary;
3157+ else
3158+ readWriteImpl = ReadWriteImplKind::StoredWithDidSet;
31623159 } else {
31633160 writeImpl = WriteImplKind::Stored;
31643161 readWriteImpl = ReadWriteImplKind::Stored;
0 commit comments