@@ -60,6 +60,7 @@ namespace {
6060 class LookupResultBuilder {
6161 LookupResult &Result;
6262 DeclContext *DC;
63+ Identifier ModuleSelector;
6364 NameLookupOptions Options;
6465
6566 // / The vector of found declarations.
@@ -72,8 +73,9 @@ namespace {
7273
7374 public:
7475 LookupResultBuilder (LookupResult &result, DeclContext *dc,
75- NameLookupOptions options)
76- : Result(result), DC(dc), Options(options) {
76+ Identifier moduleSelector, NameLookupOptions options)
77+ : Result(result), DC(dc), ModuleSelector(moduleSelector), Options(options)
78+ {
7779 if (dc->getASTContext ().isAccessControlDisabled ())
7880 Options |= NameLookupFlags::IgnoreAccessControl;
7981 }
@@ -83,6 +85,11 @@ namespace {
8385 removeOverriddenDecls (FoundDecls);
8486 removeOverriddenDecls (FoundOuterDecls);
8587
88+ // Remove any declarations excluded by the module selector from the
89+ // found-declarations set.
90+ removeOutOfModuleDecls (FoundDecls, ModuleSelector, DC);
91+ removeOutOfModuleDecls (FoundOuterDecls, ModuleSelector, DC);
92+
8693 // Remove any shadowed declarations from the found-declarations set.
8794 removeShadowedDecls (FoundDecls, DC);
8895 removeShadowedDecls (FoundOuterDecls, DC);
@@ -290,7 +297,10 @@ LookupResult TypeChecker::lookupUnqualified(DeclContext *dc, DeclNameRef name,
290297 UnqualifiedLookupRequest{descriptor}, {});
291298
292299 LookupResult result;
293- LookupResultBuilder builder (result, dc, options);
300+ // Disable module selector filtering--UnqualifiedLookupRequest should have
301+ // done it.
302+ LookupResultBuilder builder (result, dc, /* moduleSelector=*/ Identifier (),
303+ options);
294304 for (auto idx : indices (lookup.allResults ())) {
295305 const auto &found = lookup[idx];
296306 // Determine which type we looked through to find this result.
@@ -381,7 +391,7 @@ LookupResult TypeChecker::lookupMember(DeclContext *dc,
381391 // Make sure we've resolved implicit members, if we need them.
382392 namelookup::installSemanticMembersIfNeeded (type, name);
383393
384- LookupResultBuilder builder (result, dc, options);
394+ LookupResultBuilder builder (result, dc, name. getModuleSelector (), options);
385395 SmallVector<ValueDecl *, 4 > lookupResults;
386396 dc->lookupQualified (type, name, loc, subOptions, lookupResults);
387397
0 commit comments