Skip to content

Commit 347689f

Browse files
committed
[NFC] AST: Extract helper method.
Several callers of `AbstractStorageDecl::getAccessStrategy` only cared about whether the the access would be via physical storage. Before adding more arguments to `getAccessStrategy` for which such callers would have to pass a sentinel value, add a convenience method for this.
1 parent 198a802 commit 347689f

File tree

5 files changed

+24
-16
lines changed

5 files changed

+24
-16
lines changed

include/swift/AST/Decl.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6244,6 +6244,11 @@ class AbstractStorageDecl : public ValueDecl {
62446244
ResilienceExpansion expansion,
62456245
bool useOldABI) const;
62466246

6247+
/// Whether access is via physical storage.
6248+
bool isAccessedViaPhysicalStorage(AccessSemantics semantics,
6249+
AccessKind accessKind, ModuleDecl *module,
6250+
ResilienceExpansion expansion) const;
6251+
62476252
/// Do we need to use resilient access patterns outside of this
62486253
/// property's resilience domain?
62496254
bool isResilient() const;

lib/AST/Decl.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3200,6 +3200,14 @@ AccessStrategy AbstractStorageDecl::getAccessStrategy(
32003200
llvm_unreachable("bad access semantics");
32013201
}
32023202

3203+
bool AbstractStorageDecl::isAccessedViaPhysicalStorage(
3204+
AccessSemantics semantics, AccessKind accessKind, ModuleDecl *module,
3205+
ResilienceExpansion expansion) const {
3206+
return getAccessStrategy(semantics, accessKind, module, expansion,
3207+
/*useOldABI=*/false)
3208+
.getKind() == AccessStrategy::Kind::Storage;
3209+
}
3210+
32033211
bool AbstractStorageDecl::requiresOpaqueAccessors() const {
32043212
// Subscripts always require opaque accessors, so don't even kick off
32053213
// a request.

lib/Sema/ConstraintSystem.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4407,11 +4407,9 @@ ConstraintSystem::isConversionEphemeral(ConversionRestrictionKind conversion,
44074407

44084408
// Check what access strategy is used for a read-write access. It must be
44094409
// direct-to-storage in order for the conversion to be non-ephemeral.
4410-
auto access = asd->getAccessStrategy(
4410+
return asd->isAccessedViaPhysicalStorage(
44114411
AccessSemantics::Ordinary, AccessKind::ReadWrite,
4412-
DC->getParentModule(), DC->getResilienceExpansion(),
4413-
/*useOldABI=*/false);
4414-
return access.getKind() == AccessStrategy::Storage;
4412+
DC->getParentModule(), DC->getResilienceExpansion());
44154413
};
44164414

44174415
SourceRange range;

lib/Sema/MiscDiagnostics.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1504,11 +1504,10 @@ DeferredDiags swift::findSyntacticErrorForConsume(
15041504
break;
15051505
}
15061506
partial = true;
1507-
AccessStrategy strategy =
1508-
vd->getAccessStrategy(mre->getAccessSemantics(), AccessKind::Read,
1509-
module, ResilienceExpansion::Minimal,
1510-
/*useOldABI=*/false);
1511-
if (strategy.getKind() != AccessStrategy::Storage) {
1507+
auto isAccessedViaStorage = vd->isAccessedViaPhysicalStorage(
1508+
mre->getAccessSemantics(), AccessKind::Read, module,
1509+
ResilienceExpansion::Minimal);
1510+
if (!isAccessedViaStorage) {
15121511
if (noncopyable) {
15131512
result.emplace_back(loc, diag::consume_expression_non_storage);
15141513
result.emplace_back(mre->getLoc(),

lib/Sema/TypeCheckCaptures.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -395,13 +395,11 @@ class FindCapturedVars : public ASTWalker {
395395
// If this is a direct reference to underlying storage, then this is a
396396
// capture of the storage address - not a capture of the getter/setter.
397397
if (auto var = dyn_cast<VarDecl>(D)) {
398-
if (var->getAccessStrategy(DRE->getAccessSemantics(),
399-
var->supportsMutation() ? AccessKind::ReadWrite
400-
: AccessKind::Read,
401-
CurDC->getParentModule(),
402-
CurDC->getResilienceExpansion(),
403-
/*useOldABI=*/false)
404-
.getKind() == AccessStrategy::Storage)
398+
if (var->isAccessedViaPhysicalStorage(
399+
DRE->getAccessSemantics(),
400+
var->supportsMutation() ? AccessKind::ReadWrite
401+
: AccessKind::Read,
402+
CurDC->getParentModule(), CurDC->getResilienceExpansion()))
405403
Flags |= CapturedValue::IsDirect;
406404
}
407405

0 commit comments

Comments
 (0)