Skip to content

Commit d467346

Browse files
committed
Switch the Subject of Dependency References to a DeclContext
1 parent 59000e6 commit d467346

File tree

4 files changed

+20
-18
lines changed

4 files changed

+20
-18
lines changed

include/swift/AST/DependencyCollector.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
namespace swift {
2525

26-
class NominalTypeDecl;
26+
class DeclContext;
2727

2828
namespace evaluator {
2929

@@ -50,31 +50,31 @@ struct DependencyCollector {
5050
Dynamic,
5151
} kind;
5252

53-
NominalTypeDecl *subject;
53+
DeclContext *subject;
5454
DeclBaseName name;
5555

5656
private:
57-
Reference(Kind kind, NominalTypeDecl *subject, DeclBaseName name)
57+
Reference(Kind kind, DeclContext *subject, DeclBaseName name)
5858
: kind(kind), subject(subject), name(name) {}
5959

6060
public:
6161
static Reference empty() {
62-
return {Kind::Empty, llvm::DenseMapInfo<NominalTypeDecl *>::getEmptyKey(),
62+
return {Kind::Empty, llvm::DenseMapInfo<DeclContext *>::getEmptyKey(),
6363
llvm::DenseMapInfo<DeclBaseName>::getEmptyKey()};
6464
}
6565

6666
static Reference tombstone() {
6767
return {Kind::Tombstone,
68-
llvm::DenseMapInfo<NominalTypeDecl *>::getTombstoneKey(),
68+
llvm::DenseMapInfo<DeclContext *>::getTombstoneKey(),
6969
llvm::DenseMapInfo<DeclBaseName>::getTombstoneKey()};
7070
}
7171

7272
public:
73-
static Reference usedMember(NominalTypeDecl *subject, DeclBaseName name) {
73+
static Reference usedMember(DeclContext *subject, DeclBaseName name) {
7474
return {Kind::UsedMember, subject, name};
7575
}
7676

77-
static Reference potentialMember(NominalTypeDecl *subject) {
77+
static Reference potentialMember(DeclContext *subject) {
7878
return {Kind::PotentialMember, subject, DeclBaseName()};
7979
}
8080

@@ -119,7 +119,7 @@ struct DependencyCollector {
119119
/// up front. A used member dependency causes the file to be rebuilt if the
120120
/// definition of that member changes in any way - via
121121
/// deletion, addition, or mutation of a member with that same name.
122-
void addUsedMember(NominalTypeDecl *subject, DeclBaseName name);
122+
void addUsedMember(DeclContext *subject, DeclBaseName name);
123123
/// Registers a reference from the current dependency scope to a
124124
/// "potential member" of the given \p subject type.
125125
///
@@ -133,7 +133,7 @@ struct DependencyCollector {
133133
///
134134
/// These dependencies are most appropriate for protocol conformances,
135135
/// superclass constraints, and other requirements involving entire types.
136-
void addPotentialMember(NominalTypeDecl *subject);
136+
void addPotentialMember(DeclContext *subject);
137137
/// Registers a reference from the current dependency scope to a given
138138
/// top-level \p name.
139139
///

lib/AST/Evaluator.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
//
1616
//===----------------------------------------------------------------------===//
1717
#include "swift/AST/Evaluator.h"
18+
#include "swift/AST/DeclContext.h"
1819
#include "swift/AST/DiagnosticEngine.h"
1920
#include "swift/Basic/LangOptions.h"
2021
#include "swift/Basic/Range.h"
@@ -112,13 +113,14 @@ evaluator::DependencyCollector::~DependencyCollector() {
112113
#endif
113114
}
114115

115-
void evaluator::DependencyCollector::addUsedMember(NominalTypeDecl *subject,
116+
void evaluator::DependencyCollector::addUsedMember(DeclContext *subject,
116117
DeclBaseName name) {
118+
assert(subject->isTypeContext());
117119
return parent.recordDependency(Reference::usedMember(subject, name));
118120
}
119121

120-
void evaluator::DependencyCollector::addPotentialMember(
121-
NominalTypeDecl *subject) {
122+
void evaluator::DependencyCollector::addPotentialMember(DeclContext *subject) {
123+
assert(subject->isTypeContext());
122124
return parent.recordDependency(Reference::potentialMember(subject));
123125
}
124126

lib/AST/FrontendSourceFileDepGraphFactory.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,13 @@ DependencyKey::Builder DependencyKey::Builder::fromReference(
8484
case Kind::Tombstone:
8585
llvm_unreachable("Cannot enumerate dead reference!");
8686
case Kind::PotentialMember:
87-
return Builder{kind, aspect}.withContext(ref.subject);
87+
return Builder{kind, aspect}.withContext(ref.subject->getAsDecl());
8888
case Kind::TopLevel:
8989
case Kind::Dynamic:
9090
return Builder{kind, aspect, nullptr, ref.name.userFacingName()};
9191
case Kind::UsedMember:
9292
return Builder{kind, aspect, nullptr, ref.name.userFacingName()}
93-
.withContext(ref.subject);
93+
.withContext(ref.subject->getAsDecl());
9494
}
9595
}
9696

@@ -455,14 +455,14 @@ class UsedDeclEnumerator {
455455
void enumerateNominalUses(UseEnumerator enumerator) {
456456
auto &Ctx = SF->getASTContext();
457457
Ctx.evaluator.enumerateReferencesInFile(SF, [&](const auto &ref) {
458-
const NominalTypeDecl *subject = ref.subject;
458+
const DeclContext *subject = ref.subject;
459459
if (!subject) {
460460
return;
461461
}
462462

463463
auto key =
464464
DependencyKey::Builder(NodeKind::nominal, DeclAspect::interface)
465-
.withContext(subject)
465+
.withContext(subject->getAsDecl())
466466
.build();
467467
enumerateUse(key, enumerator);
468468
});

lib/Frontend/DependencyVerifier.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,12 +395,12 @@ bool DependencyVerifier::constructObligations(const SourceFile *SF,
395395
llvm_unreachable("Cannot enumerate dead dependency!");
396396

397397
case NodeKind::PotentialMember: {
398-
auto key = copyQualifiedTypeName(Ctx, reference.subject);
398+
auto key = copyQualifiedTypeName(Ctx, reference.subject->getSelfNominalTypeDecl());
399399
Obligations.insert({Obligation::Key::forPotentialMember(key),
400400
{"", Expectation::Kind::PotentialMember}});
401401
} break;
402402
case NodeKind::UsedMember: {
403-
auto demContext = copyQualifiedTypeName(Ctx, reference.subject);
403+
auto demContext = copyQualifiedTypeName(Ctx, reference.subject->getSelfNominalTypeDecl());
404404
auto name = reference.name.userFacingName();
405405
auto key = Ctx.AllocateCopy((demContext + "." + name).str());
406406
Obligations.insert(

0 commit comments

Comments
 (0)