Module Aliasing: do not allow module real names to appear in source files / only allow aliases

Resolves rdar://83592084
This commit is contained in:
elsh
2021-10-28 02:36:57 -07:00
parent 710c6b858b
commit 10a96dff57
6 changed files with 182 additions and 6 deletions

View File

@@ -431,7 +431,19 @@ void UnqualifiedLookupFactory::lookForAModuleWithTheGivenName(
#endif
return;
}
ModuleDecl *desiredModule = Ctx.getLoadedModule(Name.getBaseIdentifier());
ModuleDecl *desiredModule = nullptr;
auto givenName = Name.getBaseIdentifier();
// Check if the given name appearing in the source file is a module
// real name or alias; for example, if `-module-alias Foo=Bar` was
// passed, the alias 'Foo' should appear in source files, not 'Bar'.
// If no module aliasing is used, this will simply return the given
// name and 'true' indicating the check passed.
auto checkResult = Ctx.getRealModuleNameOrAlias(givenName);
if (checkResult.second) { // Check passed
desiredModule = Ctx.getLoadedModule(givenName);
}
if (!desiredModule && Name.getFullName() == Ctx.TheBuiltinModule->getName())
desiredModule = Ctx.TheBuiltinModule;
if (desiredModule) {