@@ -66,11 +66,16 @@ class ModuleNameLookup {
6666 // / \param moduleScopeContext The top-level context from which the lookup is
6767 // / being performed, for checking access. This must be either a
6868 // / FileUnit or a Module.
69+ // / \param hasModuleSelector Whether \p name was originally qualified by a
70+ // / module selector. This information is threaded through to underlying
71+ // / lookup calls; the callee is responsible for actually applying the
72+ // / module selector.
6973 // / \param options Lookup options to apply.
7074 void lookupInModule (SmallVectorImpl<ValueDecl *> &decls,
7175 const DeclContext *moduleOrFile,
7276 ImportPath::Access accessPath,
7377 const DeclContext *moduleScopeContext,
78+ bool hasModuleSelector,
7479 NLOptions options);
7580};
7681
@@ -173,6 +178,7 @@ void ModuleNameLookup<LookupStrategy>::lookupInModule(
173178 const DeclContext *moduleOrFile,
174179 ImportPath::Access accessPath,
175180 const DeclContext *moduleScopeContext,
181+ bool hasModuleSelector,
176182 NLOptions options) {
177183 assert (moduleOrFile->isModuleScopeContext ());
178184
@@ -189,7 +195,7 @@ void ModuleNameLookup<LookupStrategy>::lookupInModule(
189195 selfOverlay = true ;
190196 else
191197 lookupInModule (decls, overlay, accessPath, moduleScopeContext,
192- options);
198+ hasModuleSelector, options);
193199 }
194200 // FIXME: This may not work gracefully if more than one of these lookups
195201 // finds something.
@@ -228,6 +234,8 @@ void ModuleNameLookup<LookupStrategy>::lookupInModule(
228234 currentModuleLookupFlags |= ModuleLookupFlags::ExcludeMacroExpansions;
229235 if (options & NL_ABIProviding)
230236 currentModuleLookupFlags |= ModuleLookupFlags::ABIProviding;
237+ if (hasModuleSelector)
238+ currentModuleLookupFlags |= ModuleLookupFlags::HasModuleSelector;
231239
232240 // Do the lookup into the current module.
233241 auto *module = moduleOrFile->getParentModule ();
@@ -255,6 +263,7 @@ void ModuleNameLookup<LookupStrategy>::lookupInModule(
255263 OptionSet<ModuleLookupFlags> importedModuleLookupFlags = {};
256264 if (options & NL_ABIProviding)
257265 currentModuleLookupFlags |= ModuleLookupFlags::ABIProviding;
266+ // Do not propagate HasModuleSelector here; the selector wasn't specific.
258267
259268 auto visitImport = [&](ImportedModule import ,
260269 const DeclContext *moduleScopeContext) {
@@ -357,27 +366,29 @@ void ModuleNameLookup<LookupStrategy>::lookupInModule(
357366QualifiedLookupResult
358367LookupInModuleRequest::evaluate (
359368 Evaluator &evaluator, const DeclContext *moduleOrFile, DeclName name,
360- NLKind lookupKind, ResolutionKind resolutionKind,
369+ bool hasModuleSelector, NLKind lookupKind, ResolutionKind resolutionKind,
361370 const DeclContext *moduleScopeContext, NLOptions options) const {
362371 assert (moduleScopeContext->isModuleScopeContext ());
363372
364373 QualifiedLookupResult decls;
365374 LookupByName lookup (moduleOrFile->getASTContext (), resolutionKind,
366375 name, lookupKind);
367- lookup.lookupInModule (decls, moduleOrFile, {}, moduleScopeContext, options);
376+ lookup.lookupInModule (decls, moduleOrFile, {}, moduleScopeContext,
377+ hasModuleSelector, options);
368378 return decls;
369379}
370380
371381void namelookup::lookupInModule (const DeclContext *moduleOrFile,
372382 DeclName name,
383+ bool hasModuleSelector,
373384 SmallVectorImpl<ValueDecl *> &decls,
374385 NLKind lookupKind,
375386 ResolutionKind resolutionKind,
376387 const DeclContext *moduleScopeContext,
377388 SourceLoc loc, NLOptions options) {
378389 auto &ctx = moduleOrFile->getASTContext ();
379- LookupInModuleRequest req (moduleOrFile, name, lookupKind, resolutionKind ,
380- moduleScopeContext, loc, options);
390+ LookupInModuleRequest req (moduleOrFile, name, hasModuleSelector, lookupKind ,
391+ resolutionKind, moduleScopeContext, loc, options);
381392 auto results = evaluateOrDefault (ctx.evaluator , req, {});
382393 decls.append (results.begin (), results.end ());
383394}
@@ -393,6 +404,7 @@ void namelookup::lookupVisibleDeclsInModule(
393404 auto &ctx = moduleOrFile->getASTContext ();
394405 LookupVisibleDecls lookup (ctx, resolutionKind, lookupKind);
395406 lookup.lookupInModule (decls, moduleOrFile, accessPath, moduleScopeContext,
407+ /* hasModuleSelector=*/ false ,
396408 NL_QualifiedDefault);
397409}
398410
0 commit comments