@@ -760,11 +760,6 @@ static Expr *buildStorageReference(AccessorDecl *accessor,
760
760
auto var = dyn_cast<VarDecl>(decl);
761
761
if (!var)
762
762
return None;
763
- bool hasObservers = var->getParsedAccessor (AccessorKind::WillSet) ||
764
- var->getParsedAccessor (AccessorKind::DidSet);
765
- if (accessor->isCoroutine () && hasObservers) {
766
- return None;
767
- }
768
763
auto mut = var->getPropertyWrapperMutability ();
769
764
if (!mut)
770
765
return None;
@@ -1536,8 +1531,7 @@ synthesizeSetterBody(AccessorDecl *setter, ASTContext &ctx) {
1536
1531
}
1537
1532
1538
1533
if (var->hasAttachedPropertyWrapper ()) {
1539
- if (var->getParsedAccessor (AccessorKind::WillSet) ||
1540
- var->getParsedAccessor (AccessorKind::DidSet)) {
1534
+ if (var->hasObservers ()) {
1541
1535
return synthesizeObservedSetterBody (setter, TargetImpl::Wrapper, ctx);
1542
1536
}
1543
1537
@@ -1589,20 +1583,19 @@ synthesizeCoroutineAccessorBody(AccessorDecl *accessor, ASTContext &ctx) {
1589
1583
? TargetImpl::Ordinary
1590
1584
: TargetImpl::Implementation);
1591
1585
1592
- bool hasObservers = storage->getParsedAccessor (AccessorKind::DidSet) ||
1593
- storage->getParsedAccessor (AccessorKind::WillSet);
1594
-
1595
1586
// If this is a variable with an attached property wrapper, then
1596
1587
// the accessors need to yield the wrappedValue or projectedValue.
1597
- if (auto var = dyn_cast<VarDecl>(storage)) {
1598
- if (var->hasAttachedPropertyWrapper () && !hasObservers) {
1599
- target = TargetImpl::Wrapper;
1600
- }
1588
+ if (storage->getReadImpl () == ReadImplKind::Read ||
1589
+ storageReadWriteImpl == ReadWriteImplKind::Modify) {
1590
+ if (auto var = dyn_cast<VarDecl>(storage)) {
1591
+ if (var->hasAttachedPropertyWrapper ()) {
1592
+ target = TargetImpl::Wrapper;
1593
+ }
1601
1594
1602
- if (var->getOriginalWrappedProperty (
1603
- PropertyWrapperSynthesizedPropertyKind::StorageWrapper) &&
1604
- !hasObservers) {
1605
- target = TargetImpl::WrapperStorage;
1595
+ if (var->getOriginalWrappedProperty (
1596
+ PropertyWrapperSynthesizedPropertyKind::StorageWrapper)) {
1597
+ target = TargetImpl::WrapperStorage;
1598
+ }
1606
1599
}
1607
1600
}
1608
1601
@@ -2052,8 +2045,7 @@ IsAccessorTransparentRequest::evaluate(Evaluator &evaluator,
2052
2045
// FIXME: This should be folded into the WriteImplKind below.
2053
2046
if (auto var = dyn_cast<VarDecl>(storage)) {
2054
2047
if (var->hasAttachedPropertyWrapper ()) {
2055
- if (var->getParsedAccessor (AccessorKind::DidSet) ||
2056
- var->getParsedAccessor (AccessorKind::WillSet))
2048
+ if (var->hasObservers ())
2057
2049
return false ;
2058
2050
2059
2051
break ;
@@ -2590,16 +2582,13 @@ static void finishPropertyWrapperImplInfo(VarDecl *var,
2590
2582
}
2591
2583
}
2592
2584
2593
- bool hasObservers = var->getParsedAccessor (AccessorKind::DidSet) ||
2594
- var->getParsedAccessor (AccessorKind::WillSet);
2595
-
2596
2585
if (wrapperSetterIsUsable) {
2597
- if (hasObservers) {
2586
+ if (var-> hasObservers () ) {
2598
2587
info = StorageImplInfo::getMutableComputed ();
2599
- } else {
2600
- info = StorageImplInfo (ReadImplKind::Get, WriteImplKind::Set,
2601
- ReadWriteImplKind::Modify);
2588
+ return ;
2602
2589
}
2590
+ info = StorageImplInfo (ReadImplKind::Get, WriteImplKind::Set,
2591
+ ReadWriteImplKind::Modify);
2603
2592
} else {
2604
2593
info = StorageImplInfo::getImmutableComputed ();
2605
2594
}
0 commit comments