@@ -769,11 +769,6 @@ static Expr *buildStorageReference(AccessorDecl *accessor,
769
769
auto var = dyn_cast<VarDecl>(decl);
770
770
if (!var)
771
771
return None;
772
- bool hasObservers = var->getParsedAccessor (AccessorKind::WillSet) ||
773
- var->getParsedAccessor (AccessorKind::DidSet);
774
- if (accessor->isCoroutine () && hasObservers) {
775
- return None;
776
- }
777
772
auto mut = var->getPropertyWrapperMutability ();
778
773
if (!mut)
779
774
return None;
@@ -1561,8 +1556,7 @@ synthesizeSetterBody(AccessorDecl *setter, ASTContext &ctx) {
1561
1556
}
1562
1557
1563
1558
if (var->hasAttachedPropertyWrapper ()) {
1564
- if (var->getParsedAccessor (AccessorKind::WillSet) ||
1565
- var->getParsedAccessor (AccessorKind::DidSet)) {
1559
+ if (var->hasObservers ()) {
1566
1560
return synthesizeObservedSetterBody (setter, TargetImpl::Wrapper, ctx);
1567
1561
}
1568
1562
@@ -1673,20 +1667,19 @@ synthesizeCoroutineAccessorBody(AccessorDecl *accessor, ASTContext &ctx) {
1673
1667
? TargetImpl::Ordinary
1674
1668
: TargetImpl::Implementation);
1675
1669
1676
- bool hasObservers = storage->getParsedAccessor (AccessorKind::DidSet) ||
1677
- storage->getParsedAccessor (AccessorKind::WillSet);
1678
-
1679
1670
// If this is a variable with an attached property wrapper, then
1680
1671
// the accessors need to yield the wrappedValue or projectedValue.
1681
- if (auto var = dyn_cast<VarDecl>(storage)) {
1682
- if (var->hasAttachedPropertyWrapper () && !hasObservers) {
1683
- target = TargetImpl::Wrapper;
1684
- }
1672
+ if (storage->getReadImpl () == ReadImplKind::Read ||
1673
+ storageReadWriteImpl == ReadWriteImplKind::Modify) {
1674
+ if (auto var = dyn_cast<VarDecl>(storage)) {
1675
+ if (var->hasAttachedPropertyWrapper ()) {
1676
+ target = TargetImpl::Wrapper;
1677
+ }
1685
1678
1686
- if (var->getOriginalWrappedProperty (
1687
- PropertyWrapperSynthesizedPropertyKind::StorageWrapper) &&
1688
- !hasObservers) {
1689
- target = TargetImpl::WrapperStorage;
1679
+ if (var->getOriginalWrappedProperty (
1680
+ PropertyWrapperSynthesizedPropertyKind::StorageWrapper)) {
1681
+ target = TargetImpl::WrapperStorage;
1682
+ }
1690
1683
}
1691
1684
}
1692
1685
@@ -2143,8 +2136,7 @@ IsAccessorTransparentRequest::evaluate(Evaluator &evaluator,
2143
2136
// FIXME: This should be folded into the WriteImplKind below.
2144
2137
if (auto var = dyn_cast<VarDecl>(storage)) {
2145
2138
if (var->hasAttachedPropertyWrapper ()) {
2146
- if (var->getParsedAccessor (AccessorKind::DidSet) ||
2147
- var->getParsedAccessor (AccessorKind::WillSet))
2139
+ if (var->hasObservers ())
2148
2140
return false ;
2149
2141
2150
2142
break ;
@@ -2692,16 +2684,13 @@ static void finishPropertyWrapperImplInfo(VarDecl *var,
2692
2684
}
2693
2685
}
2694
2686
2695
- bool hasObservers = var->getParsedAccessor (AccessorKind::DidSet) ||
2696
- var->getParsedAccessor (AccessorKind::WillSet);
2697
-
2698
2687
if (wrapperSetterIsUsable) {
2699
- if (hasObservers) {
2688
+ if (var-> hasObservers () ) {
2700
2689
info = StorageImplInfo::getMutableComputed ();
2701
- } else {
2702
- info = StorageImplInfo (ReadImplKind::Get, WriteImplKind::Set,
2703
- ReadWriteImplKind::Modify);
2690
+ return ;
2704
2691
}
2692
+ info = StorageImplInfo (ReadImplKind::Get, WriteImplKind::Set,
2693
+ ReadWriteImplKind::Modify);
2705
2694
} else {
2706
2695
info = StorageImplInfo::getImmutableComputed ();
2707
2696
}
0 commit comments