Skip to content

Commit 2b0ca2a

Browse files
committed
Add the active tracker to the dependency sink points
1 parent 8c69814 commit 2b0ca2a

File tree

7 files changed

+67
-91
lines changed

7 files changed

+67
-91
lines changed

include/swift/AST/Evaluator.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,8 @@ class Evaluator {
476476
typename std::enable_if<Request::isDependencySink>::type * = nullptr>
477477
void reportEvaluatedResult(const Request &r,
478478
const typename Request::OutputType &o) {
479-
r.writeDependencySink(*this, o);
479+
if (auto *tracker = getActiveDependencyTracker())
480+
r.writeDependencySink(*this, *tracker, o);
480481
}
481482

482483
/// If there is an active dependency source, returns its

include/swift/AST/NameLookupRequests.h

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ class InheritedProtocolsRequest
189189
public:
190190
// Incremental dependencies
191191
evaluator::DependencySource readDependencySource(Evaluator &e) const;
192-
void writeDependencySink(Evaluator &evaluator,
192+
void writeDependencySink(Evaluator &evaluator, ReferencedNameTracker &tracker,
193193
ArrayRef<ProtocolDecl *> result) const;
194194
};
195195

@@ -239,7 +239,7 @@ class ExtendedNominalRequest
239239

240240
public:
241241
// Incremental dependencies
242-
void writeDependencySink(Evaluator &evaluator,
242+
void writeDependencySink(Evaluator &evaluator, ReferencedNameTracker &tracker,
243243
NominalTypeDecl *result) const;
244244
};
245245

@@ -432,7 +432,8 @@ class UnqualifiedLookupRequest
432432
public:
433433
// Incremental dependencies
434434
evaluator::DependencySource readDependencySource(Evaluator &) const;
435-
void writeDependencySink(Evaluator &eval, LookupResult res) const;
435+
void writeDependencySink(Evaluator &eval, ReferencedNameTracker &tracker,
436+
LookupResult res) const;
436437
};
437438

438439
using QualifiedLookupResult = SmallVector<ValueDecl *, 4>;
@@ -476,15 +477,17 @@ class AnyObjectLookupRequest
476477

477478
public:
478479
// Incremental dependencies
479-
void writeDependencySink(Evaluator &eval, QualifiedLookupResult l) const;
480+
void writeDependencySink(Evaluator &eval, ReferencedNameTracker &tracker,
481+
QualifiedLookupResult l) const;
480482
};
481483

482484
class ModuleQualifiedLookupRequest
483485
: public SimpleRequest<ModuleQualifiedLookupRequest,
484486
QualifiedLookupResult(const DeclContext *,
485487
ModuleDecl *, DeclNameRef,
486488
NLOptions),
487-
CacheKind::Uncached | CacheKind::DependencySource | CacheKind::DependencySink> {
489+
CacheKind::Uncached | CacheKind::DependencySource |
490+
CacheKind::DependencySink> {
488491
public:
489492
using SimpleRequest::SimpleRequest;
490493

@@ -500,7 +503,7 @@ class ModuleQualifiedLookupRequest
500503
public:
501504
// Incremental dependencies
502505
evaluator::DependencySource readDependencySource(Evaluator &) const;
503-
void writeDependencySink(Evaluator &eval,
506+
void writeDependencySink(Evaluator &eval, ReferencedNameTracker &tracker,
504507
QualifiedLookupResult lookupResult) const;
505508
};
506509

@@ -577,7 +580,7 @@ class DirectLookupRequest
577580

578581
public:
579582
// Incremental dependencies
580-
void writeDependencySink(Evaluator &evaluator,
583+
void writeDependencySink(Evaluator &evaluator, ReferencedNameTracker &tracker,
581584
TinyPtrVector<ValueDecl *> result) const;
582585
};
583586

@@ -662,7 +665,7 @@ class LookupOperatorRequest
662665

663666
public:
664667
// Incremental dependencies
665-
void writeDependencySink(Evaluator &evaluator,
668+
void writeDependencySink(Evaluator &evaluator, ReferencedNameTracker &tracker,
666669
OperatorType *o) const;
667670
};
668671

@@ -752,7 +755,7 @@ class LookupConformanceInModuleRequest
752755

753756
public:
754757
// Incremental dependencies
755-
void writeDependencySink(Evaluator &evaluator,
758+
void writeDependencySink(Evaluator &evaluator, ReferencedNameTracker &tracker,
756759
ProtocolConformanceRef result) const;
757760
};
758761

include/swift/AST/SimpleRequest.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ SourceLoc extractNearestSourceLoc(const std::tuple<First, Rest...> &value) {
234234
/// \c CacheKind::DependencySource should be specified along with
235235
/// one of the 3 caching kinds defined above.
236236
/// \code
237-
/// void writeDependencySink(Evaluator &, Output value) const;
237+
/// void writeDependencySink(Evaluator &,
238+
/// ReferencedNameTracker &, Output) const;
238239
/// \endcode
239240
template<typename Derived, typename Signature, CacheKind Caching>
240241
class SimpleRequest;

include/swift/AST/TypeCheckRequests.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ class SuperclassTypeRequest
120120
public:
121121
// Incremental dependencies
122122
evaluator::DependencySource readDependencySource(Evaluator &e) const;
123-
void writeDependencySink(Evaluator &eval, Type t) const;
123+
void writeDependencySink(Evaluator &eval,
124+
ReferencedNameTracker &tracker, Type t) const;
124125
};
125126

126127
/// Request the raw type of the given enum.
@@ -2227,7 +2228,7 @@ class LookupAllConformancesInContextRequest
22272228
public:
22282229
// Incremental dependencies
22292230
evaluator::DependencySource readDependencySource(Evaluator &eval) const;
2230-
void writeDependencySink(Evaluator &eval,
2231+
void writeDependencySink(Evaluator &eval, ReferencedNameTracker &tracker,
22312232
ProtocolConformanceLookupResult r) const;
22322233
};
22332234

@@ -2254,7 +2255,8 @@ class CheckRedeclarationRequest
22542255

22552256
public:
22562257
evaluator::DependencySource readDependencySource(Evaluator &eval) const;
2257-
void writeDependencySink(Evaluator &eval, evaluator::SideEffect) const;
2258+
void writeDependencySink(Evaluator &eval, ReferencedNameTracker &tracker,
2259+
evaluator::SideEffect) const;
22582260
};
22592261

22602262
// Allow AnyValue to compare two Type values, even though Type doesn't

lib/AST/Module.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,7 +1274,8 @@ OperatorType *LookupOperatorRequest<OperatorType>::evaluate(
12741274

12751275
template <typename OperatorType>
12761276
void LookupOperatorRequest<OperatorType>::writeDependencySink(
1277-
Evaluator &evaluator, OperatorType *o) const {
1277+
Evaluator &evaluator, ReferencedNameTracker &reqTracker,
1278+
OperatorType *o) const {
12781279
auto &desc = std::get<0>(this->getStorage());
12791280
auto *FU = desc.fileOrModule.template get<FileUnit *>();
12801281
auto shouldRegisterDependencyEdge = [&FU](OperatorType *o) -> bool {
@@ -1294,10 +1295,7 @@ void LookupOperatorRequest<OperatorType>::writeDependencySink(
12941295
return;
12951296
}
12961297

1297-
auto *reqTracker = evaluator.getActiveDependencyTracker();
1298-
if (!reqTracker)
1299-
return;
1300-
reqTracker->addTopLevelName(desc.name, desc.isCascading);
1298+
reqTracker.addTopLevelName(desc.name, desc.isCascading);
13011299
}
13021300

13031301
#define LOOKUP_OPERATOR(Kind) \
@@ -1311,7 +1309,8 @@ void LookupOperatorRequest<OperatorType>::writeDependencySink(
13111309
LookupOperatorRequest<Kind##Decl>::evaluate(Evaluator &e, \
13121310
OperatorLookupDescriptor) const; \
13131311
template \
1314-
void LookupOperatorRequest<Kind##Decl>::writeDependencySink(Evaluator &, Kind##Decl *) const; \
1312+
void LookupOperatorRequest<Kind##Decl>::writeDependencySink( \
1313+
Evaluator &, ReferencedNameTracker &, Kind##Decl *) const; \
13151314

13161315
LOOKUP_OPERATOR(PrefixOperator)
13171316
LOOKUP_OPERATOR(InfixOperator)

lib/AST/NameLookupRequests.cpp

Lines changed: 29 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,11 @@ InheritedProtocolsRequest::readDependencySource(Evaluator &e) const {
104104
}
105105

106106
void InheritedProtocolsRequest::writeDependencySink(
107-
Evaluator &eval, ArrayRef<ProtocolDecl *> PDs) const {
108-
auto *tracker = eval.getActiveDependencyTracker();
109-
if (!tracker)
110-
return;
111-
107+
Evaluator &eval, ReferencedNameTracker &tracker,
108+
ArrayRef<ProtocolDecl *> PDs) const {
112109
for (auto *parentProto : PDs) {
113-
tracker->addUsedMember({parentProto, Identifier()},
114-
eval.isActiveSourceCascading());
110+
tracker.addUsedMember({parentProto, Identifier()},
111+
eval.isActiveSourceCascading());
115112
}
116113
}
117114

@@ -179,8 +176,9 @@ void ExtendedNominalRequest::cacheResult(NominalTypeDecl *value) const {
179176
ext->setExtendedNominal(value);
180177
}
181178

182-
void ExtendedNominalRequest::writeDependencySink(Evaluator &eval,
183-
NominalTypeDecl *value) const {
179+
void ExtendedNominalRequest::writeDependencySink(
180+
Evaluator &eval, ReferencedNameTracker &tracker,
181+
NominalTypeDecl *value) const {
184182
if (!value)
185183
return;
186184

@@ -190,12 +188,8 @@ void ExtendedNominalRequest::writeDependencySink(Evaluator &eval,
190188
return;
191189
if (SF != eval.getActiveDependencySource())
192190
return;
193-
auto *tracker = eval.getActiveDependencyTracker();
194-
if (!tracker)
195-
return;
196-
197-
tracker->addUsedMember({value, Identifier()},
198-
eval.isActiveSourceCascading());
191+
tracker.addUsedMember({value, Identifier()},
192+
eval.isActiveSourceCascading());
199193
}
200194

201195
//----------------------------------------------------------------------------//
@@ -311,13 +305,11 @@ SourceLoc swift::extractNearestSourceLoc(const OperatorLookupDescriptor &desc) {
311305
}
312306

313307
void DirectLookupRequest::writeDependencySink(
314-
Evaluator &eval, TinyPtrVector<ValueDecl *> result) const {
315-
auto *tracker = eval.getActiveDependencyTracker();
316-
if (!tracker)
317-
return;
308+
Evaluator &eval, ReferencedNameTracker &tracker,
309+
TinyPtrVector<ValueDecl *> result) const {
318310
auto &desc = std::get<0>(getStorage());
319-
tracker->addUsedMember({desc.DC, desc.Name.getBaseName()},
320-
eval.isActiveSourceCascading());
311+
tracker.addUsedMember({desc.DC, desc.Name.getBaseName()},
312+
eval.isActiveSourceCascading());
321313
}
322314

323315
//----------------------------------------------------------------------------//
@@ -335,14 +327,11 @@ void swift::simple_display(llvm::raw_ostream &out,
335327
}
336328

337329
void AnyObjectLookupRequest::writeDependencySink(
338-
Evaluator &eval, QualifiedLookupResult l) const {
330+
Evaluator &eval, ReferencedNameTracker &reqTracker,
331+
QualifiedLookupResult l) const {
339332
auto member = std::get<1>(getStorage());
340-
341-
auto *reqTracker = eval.getActiveDependencyTracker();
342-
if (!reqTracker)
343-
return;
344-
reqTracker->addDynamicLookupName(member.getBaseName(),
345-
eval.isActiveSourceCascading());
333+
reqTracker.addDynamicLookupName(member.getBaseName(),
334+
eval.isActiveSourceCascading());
346335
}
347336

348337
SourceLoc
@@ -374,7 +363,8 @@ ModuleQualifiedLookupRequest::readDependencySource(Evaluator &eval) const {
374363
}
375364

376365
void ModuleQualifiedLookupRequest::writeDependencySink(
377-
Evaluator &eval, QualifiedLookupResult l) const {
366+
Evaluator &eval, ReferencedNameTracker &reqTracker,
367+
QualifiedLookupResult l) const {
378368
auto *DC = std::get<0>(getStorage());
379369
auto *module = std::get<1>(getStorage());
380370
auto member = std::get<2>(getStorage());
@@ -384,20 +374,17 @@ void ModuleQualifiedLookupRequest::writeDependencySink(
384374
module != DC->getModuleScopeContext()->getParentModule()) {
385375
return;
386376
}
387-
388-
auto *reqTracker = eval.getActiveDependencyTracker();
389-
if (!reqTracker)
390-
return;
391-
reqTracker->addTopLevelName(member.getBaseName(),
392-
eval.isActiveSourceCascading());
377+
reqTracker.addTopLevelName(member.getBaseName(),
378+
eval.isActiveSourceCascading());
393379
}
394380

395381
//----------------------------------------------------------------------------//
396382
// LookupConformanceInModuleRequest computation.
397383
//----------------------------------------------------------------------------//
398384

399385
void LookupConformanceInModuleRequest::writeDependencySink(
400-
Evaluator &eval, ProtocolConformanceRef lookupResult) const {
386+
Evaluator &eval, ReferencedNameTracker &reqTracker,
387+
ProtocolConformanceRef lookupResult) const {
401388
if (lookupResult.isInvalid() || !lookupResult.isConcrete())
402389
return;
403390

@@ -407,19 +394,15 @@ void LookupConformanceInModuleRequest::writeDependencySink(
407394
return;
408395

409396
auto *source = eval.getActiveDependencySource();
410-
if (!source)
411-
return;
412-
auto reqTracker = eval.getActiveDependencyTracker();
413-
if (!reqTracker)
414-
return;
397+
assert(source && "Missing dependency source?");
415398

416399
// Decline to record conformances defined outside of the active module.
417400
auto *conformance = lookupResult.getConcrete();
418401
if (source->getParentModule() !=
419402
conformance->getDeclContext()->getParentModule())
420403
return;
421-
reqTracker->addUsedMember({Adoptee, Identifier()},
422-
eval.isActiveSourceCascading());
404+
reqTracker.addUsedMember({Adoptee, Identifier()},
405+
eval.isActiveSourceCascading());
423406
}
424407

425408
//----------------------------------------------------------------------------//
@@ -441,14 +424,11 @@ UnqualifiedLookupRequest::readDependencySource(Evaluator &) const {
441424
}
442425

443426
void UnqualifiedLookupRequest::writeDependencySink(Evaluator &eval,
427+
ReferencedNameTracker &track,
444428
LookupResult res) const {
445-
auto reqTracker = eval.getActiveDependencyTracker();
446-
if (!reqTracker)
447-
return;
448-
449429
auto &desc = std::get<0>(getStorage());
450-
reqTracker->addTopLevelName(desc.Name.getBaseName(),
451-
eval.isActiveSourceCascading());
430+
track.addTopLevelName(desc.Name.getBaseName(),
431+
eval.isActiveSourceCascading());
452432
}
453433

454434
//----------------------------------------------------------------------------//

lib/AST/TypeCheckRequests.cpp

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ SuperclassTypeRequest::readDependencySource(Evaluator &e) const {
167167
}
168168

169169
void SuperclassTypeRequest::writeDependencySink(Evaluator &eval,
170+
ReferencedNameTracker &tracker,
170171
Type value) const {
171172
if (!value)
172173
return;
@@ -176,12 +177,7 @@ void SuperclassTypeRequest::writeDependencySink(Evaluator &eval,
176177
ClassDecl *Super = value->getClassOrBoundGenericClass();
177178
if (!Super)
178179
return;
179-
180-
auto *tracker = eval.getActiveDependencyTracker();
181-
if (!tracker)
182-
return;
183-
184-
tracker->addUsedMember({Super, Identifier()}, eval.isActiveSourceCascading());
180+
tracker.addUsedMember({Super, Identifier()}, eval.isActiveSourceCascading());
185181
}
186182

187183
//----------------------------------------------------------------------------//
@@ -1317,11 +1313,8 @@ CheckRedeclarationRequest::readDependencySource(Evaluator &eval) const {
13171313
}
13181314

13191315
void CheckRedeclarationRequest::writeDependencySink(
1320-
Evaluator &eval, evaluator::SideEffect) const {
1321-
auto *tracker = eval.getActiveDependencyTracker();
1322-
if (!tracker)
1323-
return;
1324-
1316+
Evaluator &eval, ReferencedNameTracker &tracker,
1317+
evaluator::SideEffect) const {
13251318
auto *current = std::get<0>(getStorage());
13261319
if (!current->hasName())
13271320
return;
@@ -1333,12 +1326,12 @@ void CheckRedeclarationRequest::writeDependencySink(
13331326

13341327
if (currentDC->isTypeContext()) {
13351328
if (auto nominal = currentDC->getSelfNominalTypeDecl()) {
1336-
tracker->addUsedMember({nominal, current->getBaseName()},
1337-
eval.isActiveSourceCascading());
1329+
tracker.addUsedMember({nominal, current->getBaseName()},
1330+
eval.isActiveSourceCascading());
13381331
}
13391332
} else {
1340-
tracker->addTopLevelName(current->getBaseName(),
1341-
eval.isActiveSourceCascading());
1333+
tracker.addTopLevelName(current->getBaseName(),
1334+
eval.isActiveSourceCascading());
13421335
}
13431336
}
13441337

@@ -1370,14 +1363,11 @@ LookupAllConformancesInContextRequest::readDependencySource(
13701363
}
13711364

13721365
void LookupAllConformancesInContextRequest::writeDependencySink(
1373-
Evaluator &eval, ProtocolConformanceLookupResult conformances) const {
1374-
auto *tracker = eval.getActiveDependencyTracker();
1375-
if (!tracker)
1376-
return;
1377-
1366+
Evaluator &eval, ReferencedNameTracker &tracker,
1367+
ProtocolConformanceLookupResult conformances) const {
13781368
for (auto conformance : conformances) {
1379-
tracker->addUsedMember({conformance->getProtocol(), Identifier()},
1380-
eval.isActiveSourceCascading());
1369+
tracker.addUsedMember({conformance->getProtocol(), Identifier()},
1370+
eval.isActiveSourceCascading());
13811371
}
13821372
}
13831373

0 commit comments

Comments
 (0)