Skip to content

Commit 874cc85

Browse files
committed
Make LookupInModuleRequest a Dependency Sink
It wasn't one in the past because the referenced name tracker was written into by unqualified lookup, which would delegate to this request. Now that it's no longer doing that, we have to capture this edge here for private dependencies.
1 parent 14ade93 commit 874cc85

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

include/swift/AST/NameLookupRequests.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ class LookupInModuleRequest
447447
QualifiedLookupResult(
448448
const DeclContext *, DeclName, NLKind,
449449
namelookup::ResolutionKind, const DeclContext *),
450-
RequestFlags::Uncached> {
450+
RequestFlags::Uncached | RequestFlags::DependencySink> {
451451
public:
452452
using SimpleRequest::SimpleRequest;
453453

@@ -459,6 +459,11 @@ class LookupInModuleRequest
459459
evaluate(Evaluator &evaluator, const DeclContext *moduleOrFile, DeclName name,
460460
NLKind lookupKind, namelookup::ResolutionKind resolutionKind,
461461
const DeclContext *moduleScopeContext) const;
462+
463+
public:
464+
// Incremental dependencies
465+
void writeDependencySink(evaluator::DependencyCollector &tracker,
466+
QualifiedLookupResult l) const;
462467
};
463468

464469
/// Perform \c AnyObject lookup for a given member.

lib/AST/NameLookupRequests.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,24 @@ void DirectLookupRequest::writeDependencySink(
319319
tracker.addUsedMember(desc.DC, desc.Name.getBaseName());
320320
}
321321

322+
//----------------------------------------------------------------------------//
323+
// LookupInModuleRequest computation.
324+
//----------------------------------------------------------------------------//
325+
326+
void LookupInModuleRequest::writeDependencySink(
327+
evaluator::DependencyCollector &reqTracker, QualifiedLookupResult l) const {
328+
auto *module = std::get<0>(getStorage());
329+
auto member = std::get<1>(getStorage());
330+
auto *DC = std::get<4>(getStorage());
331+
332+
// Decline to record lookups outside our module.
333+
if (!DC->getParentSourceFile() ||
334+
module->getParentModule() != DC->getParentModule()) {
335+
return;
336+
}
337+
reqTracker.addTopLevelName(member.getBaseName());
338+
}
339+
322340
//----------------------------------------------------------------------------//
323341
// LookupConformanceInModuleRequest computation.
324342
//----------------------------------------------------------------------------//

0 commit comments

Comments
 (0)