File tree Expand file tree Collapse file tree 5 files changed +43
-0
lines changed Expand file tree Collapse file tree 5 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -243,6 +243,8 @@ class ModuleDecl
243
243
// / Module name to use when referenced in clients module interfaces.
244
244
mutable Identifier ExportAsName;
245
245
246
+ mutable Identifier PublicModuleName;
247
+
246
248
public:
247
249
// / Produces the components of a given module's full name in reverse order.
248
250
// /
@@ -504,6 +506,21 @@ class ModuleDecl
504
506
ExportAsName = name;
505
507
}
506
508
509
+ // / Public facing name for this module in diagnostics and documentation.
510
+ // /
511
+ // / This always returns a valid name as it defaults to the module name if
512
+ // / no public module name is set.
513
+ // /
514
+ // / If `mustBeVisible`, return the normal module name when the module
515
+ // / corresponding to the public module name isn't imported. Users working
516
+ // / in between both modules will then see the normal module name,
517
+ // / this may be more useful for diagnostics at that level.
518
+ Identifier getPublicModuleName (bool mustBeVisible) const ;
519
+
520
+ void setPublicModuleName (Identifier name) {
521
+ PublicModuleName = name;
522
+ }
523
+
507
524
// / Retrieve the actual module name of an alias used for this module (if any).
508
525
// /
509
526
// / For example, if '-module-alias Foo=Bar' is passed in when building the main module,
Original file line number Diff line number Diff line change @@ -1922,6 +1922,19 @@ ImportedModule::removeDuplicates(SmallVectorImpl<ImportedModule> &imports) {
1922
1922
imports.erase (last, imports.end ());
1923
1923
}
1924
1924
1925
+ Identifier ModuleDecl::getPublicModuleName (bool mustBeVisible) const {
1926
+ if (!PublicModuleName.empty ()) {
1927
+ if (!mustBeVisible)
1928
+ return PublicModuleName;
1929
+
1930
+ bool publicModuleIsImported =
1931
+ getASTContext ().getModuleByIdentifier (PublicModuleName);
1932
+ if (publicModuleIsImported)
1933
+ return PublicModuleName;
1934
+ }
1935
+ return getName ();
1936
+ }
1937
+
1925
1938
Identifier ModuleDecl::getRealName () const {
1926
1939
// This will return the real name for an alias (if used) or getName()
1927
1940
return getASTContext ().getRealModuleName (getName ());
Original file line number Diff line number Diff line change @@ -1463,6 +1463,10 @@ ModuleDecl *CompilerInstance::getMainModule() const {
1463
1463
MainModule->setExportAsName (getASTContext ().getIdentifier (
1464
1464
Invocation.getFrontendOptions ().ExportAsName ));
1465
1465
}
1466
+ if (!Invocation.getFrontendOptions ().PublicModuleName .empty ()) {
1467
+ MainModule->setPublicModuleName (getASTContext ().getIdentifier (
1468
+ Invocation.getFrontendOptions ().PublicModuleName ));
1469
+ }
1466
1470
if (Invocation.getFrontendOptions ().EnableLibraryEvolution )
1467
1471
MainModule->setResilienceStrategy (ResilienceStrategy::Resilient);
1468
1472
if (Invocation.getLangOptions ().isSwiftVersionAtLeast (6 ))
Original file line number Diff line number Diff line change @@ -1126,6 +1126,13 @@ void Serializer::writeHeader() {
1126
1126
ExportAs.emit (ScratchRecord, M->getExportAsName ().str ());
1127
1127
}
1128
1128
1129
+ Identifier publicModuleName =
1130
+ M->getPublicModuleName (/* mustBeVisible=*/ false );
1131
+ if (publicModuleName != M->getName ()) {
1132
+ options_block::PublicModuleNameLayout PublicModuleName (Out);
1133
+ PublicModuleName.emit (ScratchRecord, publicModuleName.str ());
1134
+ }
1135
+
1129
1136
if (M->isConcurrencyChecked ()) {
1130
1137
options_block::IsConcurrencyCheckedLayout IsConcurrencyChecked (Out);
1131
1138
IsConcurrencyChecked.emit (ScratchRecord);
Original file line number Diff line number Diff line change @@ -953,6 +953,8 @@ LoadedFile *SerializedModuleLoaderBase::loadAST(
953
953
M.setSerializePackageEnabled ();
954
954
if (!loadedModuleFile->getModuleABIName ().empty ())
955
955
M.setABIName (Ctx.getIdentifier (loadedModuleFile->getModuleABIName ()));
956
+ if (!loadedModuleFile->getPublicModuleName ().empty ())
957
+ M.setPublicModuleName (Ctx.getIdentifier (loadedModuleFile->getPublicModuleName ()));
956
958
if (loadedModuleFile->isConcurrencyChecked ())
957
959
M.setIsConcurrencyChecked ();
958
960
if (loadedModuleFile->hasCxxInteroperability ()) {
You can’t perform that action at this time.
0 commit comments