mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[Dependency Scanning] Keep track of whether a given Swift 'import' statement is '@_exported'
This commit is contained in:
@@ -344,7 +344,7 @@ std::optional<std::string> SerializedModuleLoaderBase::invalidModuleReason(seria
|
||||
llvm_unreachable("bad status");
|
||||
}
|
||||
|
||||
llvm::ErrorOr<llvm::StringSet<>>
|
||||
llvm::ErrorOr<std::vector<ScannerImportStatementInfo>>
|
||||
SerializedModuleLoaderBase::getMatchingPackageOnlyImportsOfModule(
|
||||
Twine modulePath, bool isFramework, bool isRequiredOSSAModules,
|
||||
StringRef SDKName, StringRef packageName, llvm::vfs::FileSystem *fileSystem,
|
||||
@@ -353,7 +353,7 @@ SerializedModuleLoaderBase::getMatchingPackageOnlyImportsOfModule(
|
||||
if (!moduleBuf)
|
||||
return moduleBuf.getError();
|
||||
|
||||
llvm::StringSet<> importedModuleNames;
|
||||
std::vector<ScannerImportStatementInfo> importedModuleNames;
|
||||
// Load the module file without validation.
|
||||
std::shared_ptr<const ModuleFileSharedCore> loadedModuleFile;
|
||||
serialization::ValidationInfo loadInfo = ModuleFileSharedCore::load(
|
||||
@@ -376,7 +376,7 @@ SerializedModuleLoaderBase::getMatchingPackageOnlyImportsOfModule(
|
||||
if (dotPos != std::string::npos)
|
||||
moduleName = moduleName.slice(0, dotPos);
|
||||
|
||||
importedModuleNames.insert(moduleName);
|
||||
importedModuleNames.push_back({moduleName.str(), dependency.isExported()});
|
||||
}
|
||||
|
||||
return importedModuleNames;
|
||||
@@ -482,6 +482,7 @@ SerializedModuleLoaderBase::getImportsOfModule(
|
||||
ModuleLoadingBehavior transitiveBehavior, StringRef packageName,
|
||||
bool isTestableImport) {
|
||||
llvm::StringSet<> importedModuleNames;
|
||||
llvm::StringSet<> importedExportedModuleNames;
|
||||
std::string importedHeader = "";
|
||||
for (const auto &dependency : loadedModuleFile.getDependencies()) {
|
||||
if (dependency.isHeader()) {
|
||||
@@ -516,9 +517,12 @@ SerializedModuleLoaderBase::getImportsOfModule(
|
||||
moduleName = "std";
|
||||
|
||||
importedModuleNames.insert(moduleName);
|
||||
if (dependency.isExported())
|
||||
importedExportedModuleNames.insert(moduleName);
|
||||
}
|
||||
|
||||
return SerializedModuleLoaderBase::BinaryModuleImports{importedModuleNames,
|
||||
importedExportedModuleNames,
|
||||
importedHeader};
|
||||
}
|
||||
|
||||
@@ -603,17 +607,23 @@ SerializedModuleLoaderBase::scanModuleFile(Twine modulePath, bool isFramework,
|
||||
auto importedModuleSet = binaryModuleImports->moduleImports;
|
||||
std::vector<ScannerImportStatementInfo> moduleImports;
|
||||
moduleImports.reserve(importedModuleSet.size());
|
||||
llvm::transform(
|
||||
importedModuleSet.keys(), std::back_inserter(moduleImports),
|
||||
[](llvm::StringRef N) { return ScannerImportStatementInfo(N.str()); });
|
||||
llvm::transform(importedModuleSet.keys(), std::back_inserter(moduleImports),
|
||||
[&binaryModuleImports](llvm::StringRef N) {
|
||||
return ScannerImportStatementInfo(
|
||||
N.str(),
|
||||
binaryModuleImports->exportedModules.contains(N));
|
||||
});
|
||||
|
||||
auto importedHeader = binaryModuleImports->headerImport;
|
||||
auto &importedOptionalModuleSet = binaryModuleOptionalImports->moduleImports;
|
||||
auto &importedExportedOptionalModuleSet =
|
||||
binaryModuleOptionalImports->exportedModules;
|
||||
std::vector<ScannerImportStatementInfo> optionalModuleImports;
|
||||
for (const auto optionalImportedModule : importedOptionalModuleSet.keys())
|
||||
if (!importedModuleSet.contains(optionalImportedModule))
|
||||
optionalModuleImports.push_back(
|
||||
ScannerImportStatementInfo(optionalImportedModule.str()));
|
||||
{optionalImportedModule.str(),
|
||||
importedExportedOptionalModuleSet.contains(optionalImportedModule)});
|
||||
|
||||
std::vector<LinkLibrary> linkLibraries;
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user