@@ -629,6 +629,25 @@ Expr *PatternBindingCheckedAndContextualizedInitRequest::evaluate(
629
629
return binding->getInit (i);
630
630
}
631
631
632
+ static std::optional<AccessorKind>
633
+ directAccessorKindForReadImpl (ReadImplKind reader) {
634
+ switch (reader) {
635
+ case ReadImplKind::Stored:
636
+ case ReadImplKind::Inherited:
637
+ return std::nullopt;
638
+
639
+ case ReadImplKind::Get:
640
+ return AccessorKind::Get;
641
+
642
+ case ReadImplKind::Address:
643
+ return AccessorKind::Address;
644
+
645
+ case ReadImplKind::Read:
646
+ return AccessorKind::Read;
647
+ }
648
+ llvm_unreachable (" bad impl kind" );
649
+ }
650
+
632
651
bool
633
652
IsGetterMutatingRequest::evaluate (Evaluator &evaluator,
634
653
AbstractStorageDecl *storage) const {
@@ -665,22 +684,11 @@ IsGetterMutatingRequest::evaluate(Evaluator &evaluator,
665
684
if (isa<ProtocolDecl>(storageDC))
666
685
return checkMutability (AccessorKind::Get);
667
686
668
- switch (storage->getReadImpl ()) {
669
- case ReadImplKind::Stored:
670
- case ReadImplKind::Inherited:
687
+ auto accessor = directAccessorKindForReadImpl (storage->getReadImpl ());
688
+ if (!accessor)
671
689
return false ;
672
690
673
- case ReadImplKind::Get:
674
- return checkMutability (AccessorKind::Get);
675
-
676
- case ReadImplKind::Address:
677
- return checkMutability (AccessorKind::Address);
678
-
679
- case ReadImplKind::Read:
680
- return checkMutability (AccessorKind::Read);
681
- }
682
-
683
- llvm_unreachable (" bad impl kind" );
691
+ return checkMutability (*accessor);
684
692
}
685
693
686
694
// / As a special extra check, if the user also gave us a modify coroutine,
0 commit comments