mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Merge remote-tracking branch 'origin/master' into master-next
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
|
||||
#include <type_traits>
|
||||
#include <cstdint>
|
||||
#include <initializer_list>
|
||||
|
||||
namespace swift {
|
||||
|
||||
@@ -58,6 +59,10 @@ public:
|
||||
/// Create an option set with only the given option set.
|
||||
constexpr OptionSet(Flags flag) : Storage(static_cast<StorageType>(flag)) {}
|
||||
|
||||
/// Create an option set containing the given options.
|
||||
constexpr OptionSet(std::initializer_list<Flags> flags)
|
||||
: Storage(combineFlags(flags)) {}
|
||||
|
||||
/// Create an option set from raw storage.
|
||||
explicit constexpr OptionSet(StorageType storage) : Storage(storage) {}
|
||||
|
||||
@@ -136,6 +141,14 @@ private:
|
||||
|
||||
static void _checkResultTypeOperatorOr(...) {}
|
||||
|
||||
static constexpr StorageType
|
||||
combineFlags(const std::initializer_list<Flags> &flags) {
|
||||
OptionSet result;
|
||||
for (Flags flag : flags)
|
||||
result |= flag;
|
||||
return result.Storage;
|
||||
}
|
||||
|
||||
static_assert(!std::is_same<decltype(_checkResultTypeOperatorOr(Flags())),
|
||||
Flags>::value,
|
||||
"operator| should produce an OptionSet");
|
||||
|
||||
@@ -179,11 +179,10 @@ ImportSet &ImportCache::getImportSet(const DeclContext *dc) {
|
||||
ModuleDecl::ImportedModule{ModuleDecl::AccessPathTy(), mod});
|
||||
|
||||
if (file) {
|
||||
ModuleDecl::ImportFilter importFilter;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
|
||||
file->getImportedModules(imports, importFilter);
|
||||
file->getImportedModules(imports,
|
||||
{ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly,
|
||||
ModuleDecl::ImportFilterKind::SPIAccessControl});
|
||||
}
|
||||
|
||||
auto &result = getImportSet(ctx, imports);
|
||||
@@ -265,11 +264,10 @@ ImportCache::getAllAccessPathsNotShadowedBy(const ModuleDecl *mod,
|
||||
ModuleDecl::ImportedModule{ModuleDecl::AccessPathTy(), currentMod});
|
||||
|
||||
if (auto *file = dyn_cast<FileUnit>(dc)) {
|
||||
ModuleDecl::ImportFilter importFilter;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
|
||||
file->getImportedModules(stack, importFilter);
|
||||
file->getImportedModules(stack,
|
||||
{ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly,
|
||||
ModuleDecl::ImportFilterKind::SPIAccessControl});
|
||||
}
|
||||
|
||||
SmallVector<ModuleDecl::AccessPathTy, 4> accessPaths;
|
||||
|
||||
@@ -100,13 +100,11 @@ static void printImports(raw_ostream &out,
|
||||
ModuleDecl *M) {
|
||||
// FIXME: This is very similar to what's in Serializer::writeInputBlock, but
|
||||
// it's not obvious what higher-level optimization would be factored out here.
|
||||
ModuleDecl::ImportFilter allImportFilter;
|
||||
allImportFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
allImportFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
allImportFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
|
||||
|
||||
SmallVector<ModuleDecl::ImportedModule, 8> allImports;
|
||||
M->getImportedModules(allImports, allImportFilter);
|
||||
M->getImportedModules(allImports,
|
||||
{ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::SPIAccessControl});
|
||||
ModuleDecl::removeDuplicateImports(allImports);
|
||||
diagnoseScopedImports(M->getASTContext().Diags, allImports);
|
||||
|
||||
|
||||
@@ -78,15 +78,12 @@ bool swift::emitImportedModules(ASTContext &Context, ModuleDecl *mainModule,
|
||||
StringRef implicitHeaderPath = opts.ImplicitObjCHeaderPath;
|
||||
if (!implicitHeaderPath.empty()) {
|
||||
if (!clangImporter->importBridgingHeader(implicitHeaderPath, mainModule)) {
|
||||
ModuleDecl::ImportFilter importFilter;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
|
||||
|
||||
SmallVector<ModuleDecl::ImportedModule, 16> imported;
|
||||
clangImporter->getImportedHeaderModule()->getImportedModules(
|
||||
imported, importFilter);
|
||||
imported, {ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly,
|
||||
ModuleDecl::ImportFilterKind::SPIAccessControl});
|
||||
|
||||
for (auto IM : imported) {
|
||||
if (auto clangModule = IM.importedModule->findUnderlyingClangModule())
|
||||
|
||||
@@ -2085,15 +2085,13 @@ public:
|
||||
}
|
||||
|
||||
void collectImportedModules(llvm::StringSet<> &ImportedModules) {
|
||||
ModuleDecl::ImportFilter ImportFilter;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
|
||||
SmallVector<ModuleDecl::ImportedModule, 16> Imported;
|
||||
SmallVector<ModuleDecl::ImportedModule, 16> FurtherImported;
|
||||
CurrDeclContext->getParentSourceFile()->getImportedModules(Imported,
|
||||
ImportFilter);
|
||||
CurrDeclContext->getParentSourceFile()->getImportedModules(
|
||||
Imported,
|
||||
{ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly});
|
||||
while (!Imported.empty()) {
|
||||
ModuleDecl *MD = Imported.back().importedModule;
|
||||
Imported.pop_back();
|
||||
@@ -6365,13 +6363,12 @@ void CodeCompletionCallbacksImpl::doneParsing() {
|
||||
Lookup.addModuleName(curModule);
|
||||
|
||||
// Add results for all imported modules.
|
||||
ModuleDecl::ImportFilter ImportFilter;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
SmallVector<ModuleDecl::ImportedModule, 4> Imports;
|
||||
auto *SF = CurDeclContext->getParentSourceFile();
|
||||
SF->getImportedModules(Imports, ImportFilter);
|
||||
SF->getImportedModules(
|
||||
Imports, {ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly});
|
||||
|
||||
for (auto Imported : Imports) {
|
||||
for (auto Import : namelookup::getAllImports(Imported.importedModule))
|
||||
|
||||
@@ -1833,12 +1833,11 @@ void IRGenDebugInfoImpl::finalize() {
|
||||
|
||||
// Get the list of imported modules (which may actually be different
|
||||
// from all ImportDecls).
|
||||
ModuleDecl::ImportFilter ImportFilter;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
SmallVector<ModuleDecl::ImportedModule, 8> ModuleWideImports;
|
||||
IGM.getSwiftModule()->getImportedModules(ModuleWideImports, ImportFilter);
|
||||
IGM.getSwiftModule()->getImportedModules(
|
||||
ModuleWideImports, {ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly});
|
||||
for (auto M : ModuleWideImports)
|
||||
if (!ImportedModules.count(M.importedModule))
|
||||
DBuilder.createImportedModule(MainFile, getOrCreateModule(M), MainFile,
|
||||
|
||||
@@ -125,10 +125,10 @@ public:
|
||||
|
||||
void
|
||||
getImportedModules(SmallVectorImpl<ModuleDecl::ImportedModule> &Modules) const {
|
||||
ModuleDecl::ImportFilter ImportFilter;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
constexpr ModuleDecl::ImportFilter ImportFilter = {
|
||||
ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly};
|
||||
|
||||
if (auto *SF = SFOrMod.dyn_cast<SourceFile *>()) {
|
||||
SF->getImportedModules(Modules, ImportFilter);
|
||||
|
||||
@@ -580,11 +580,9 @@ emitDataForSwiftSerializedModule(ModuleDecl *module,
|
||||
unitWriter.addRecordFile(recordFile, *FE, isSystemModule, mod);
|
||||
}
|
||||
|
||||
ModuleDecl::ImportFilter importFilter;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
SmallVector<ModuleDecl::ImportedModule, 8> imports;
|
||||
module->getImportedModules(imports, importFilter);
|
||||
module->getImportedModules(imports, {ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private});
|
||||
StringScratchSpace moduleNameScratch;
|
||||
addModuleDependencies(imports, indexStorePath, indexSystemModules, skipStdlib,
|
||||
targetTriple, clangCI, diags, unitWriter,
|
||||
@@ -621,13 +619,11 @@ recordSourceFileUnit(SourceFile *primarySourceFile, StringRef indexUnitToken,
|
||||
getModuleInfoFromOpaqueModule);
|
||||
|
||||
// Module dependencies.
|
||||
ModuleDecl::ImportFilter importFilter;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
|
||||
SmallVector<ModuleDecl::ImportedModule, 8> imports;
|
||||
primarySourceFile->getImportedModules(imports, importFilter);
|
||||
primarySourceFile->getImportedModules(
|
||||
imports, {ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly});
|
||||
StringScratchSpace moduleNameScratch;
|
||||
addModuleDependencies(imports, indexStorePath, indexSystemModules, skipStdlib,
|
||||
targetTriple, clangCI, diags, unitWriter,
|
||||
|
||||
@@ -1021,13 +1021,12 @@ void Serializer::writeInputBlock(const SerializationOptions &options) {
|
||||
if (!options.ModuleInterface.empty())
|
||||
ModuleInterface.emit(ScratchRecord, options.ModuleInterface);
|
||||
|
||||
ModuleDecl::ImportFilter allImportFilter;
|
||||
allImportFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
allImportFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
allImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
allImportFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
|
||||
SmallVector<ModuleDecl::ImportedModule, 8> allImports;
|
||||
M->getImportedModules(allImports, allImportFilter);
|
||||
M->getImportedModules(allImports,
|
||||
{ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly,
|
||||
ModuleDecl::ImportFilterKind::SPIAccessControl});
|
||||
ModuleDecl::removeDuplicateImports(allImports);
|
||||
|
||||
// Collect the public and private imports as a subset so that we can
|
||||
|
||||
@@ -1088,12 +1088,9 @@ void SerializedASTFile::getImportedModules(
|
||||
|
||||
void SerializedASTFile::collectLinkLibrariesFromImports(
|
||||
ModuleDecl::LinkLibraryCallback callback) const {
|
||||
ModuleDecl::ImportFilter ImportFilter;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
|
||||
llvm::SmallVector<ModuleDecl::ImportedModule, 8> Imports;
|
||||
File.getImportedModules(Imports, ImportFilter);
|
||||
File.getImportedModules(Imports, {ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private});
|
||||
|
||||
for (auto Import : Imports)
|
||||
Import.importedModule->collectLinkLibraries(callback);
|
||||
|
||||
@@ -355,12 +355,11 @@ ImportDepth::ImportDepth(ASTContext &context,
|
||||
|
||||
// Private imports from this module.
|
||||
// FIXME: only the private imports from the current source file.
|
||||
ModuleDecl::ImportFilter importFilter;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
// FIXME: ImportFilterKind::ShadowedBySeparateOverlay?
|
||||
SmallVector<ModuleDecl::ImportedModule, 16> mainImports;
|
||||
main->getImportedModules(mainImports, importFilter);
|
||||
main->getImportedModules(mainImports,
|
||||
{ModuleDecl::ImportFilterKind::Private,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly});
|
||||
for (auto &import : mainImports) {
|
||||
uint8_t depth = 1;
|
||||
if (auxImports.count(import.importedModule->getName().str()))
|
||||
|
||||
@@ -907,9 +907,9 @@ static void collectModuleDependencies(ModuleDecl *TopMod,
|
||||
|
||||
auto ClangModuleLoader = TopMod->getASTContext().getClangModuleLoader();
|
||||
|
||||
ModuleDecl::ImportFilter ImportFilter;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
|
||||
ModuleDecl::ImportFilter ImportFilter = {
|
||||
ModuleDecl::ImportFilterKind::Public,
|
||||
ModuleDecl::ImportFilterKind::Private};
|
||||
if (Visited.empty()) {
|
||||
// Only collect implementation-only dependencies from the main module.
|
||||
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
|
||||
Reference in New Issue
Block a user