Skip to content

Commit 0da060e

Browse files
authored
Merge pull request #32447 from martinboehme/option-set-initializer-list
Give OptionSet an initializer_list constructor
2 parents f9951b3 + d806ba5 commit 0da060e

File tree

12 files changed

+65
-72
lines changed

12 files changed

+65
-72
lines changed

include/swift/Basic/OptionSet.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include <type_traits>
2323
#include <cstdint>
24+
#include <initializer_list>
2425

2526
namespace swift {
2627

@@ -58,6 +59,10 @@ class OptionSet {
5859
/// Create an option set with only the given option set.
5960
constexpr OptionSet(Flags flag) : Storage(static_cast<StorageType>(flag)) {}
6061

62+
/// Create an option set containing the given options.
63+
constexpr OptionSet(std::initializer_list<Flags> flags)
64+
: Storage(combineFlags(flags)) {}
65+
6166
/// Create an option set from raw storage.
6267
explicit constexpr OptionSet(StorageType storage) : Storage(storage) {}
6368

@@ -136,6 +141,14 @@ class OptionSet {
136141

137142
static void _checkResultTypeOperatorOr(...) {}
138143

144+
static constexpr StorageType
145+
combineFlags(const std::initializer_list<Flags> &flags) {
146+
OptionSet result;
147+
for (Flags flag : flags)
148+
result |= flag;
149+
return result.Storage;
150+
}
151+
139152
static_assert(!std::is_same<decltype(_checkResultTypeOperatorOr(Flags())),
140153
Flags>::value,
141154
"operator| should produce an OptionSet");

lib/AST/ImportCache.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,10 @@ ImportSet &ImportCache::getImportSet(const DeclContext *dc) {
179179
ModuleDecl::ImportedModule{ModuleDecl::AccessPathTy(), mod});
180180

181181
if (file) {
182-
ModuleDecl::ImportFilter importFilter;
183-
importFilter |= ModuleDecl::ImportFilterKind::Private;
184-
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
185-
importFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
186-
file->getImportedModules(imports, importFilter);
182+
file->getImportedModules(imports,
183+
{ModuleDecl::ImportFilterKind::Private,
184+
ModuleDecl::ImportFilterKind::ImplementationOnly,
185+
ModuleDecl::ImportFilterKind::SPIAccessControl});
187186
}
188187

189188
auto &result = getImportSet(ctx, imports);
@@ -265,11 +264,10 @@ ImportCache::getAllAccessPathsNotShadowedBy(const ModuleDecl *mod,
265264
ModuleDecl::ImportedModule{ModuleDecl::AccessPathTy(), currentMod});
266265

267266
if (auto *file = dyn_cast<FileUnit>(dc)) {
268-
ModuleDecl::ImportFilter importFilter;
269-
importFilter |= ModuleDecl::ImportFilterKind::Private;
270-
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
271-
importFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
272-
file->getImportedModules(stack, importFilter);
267+
file->getImportedModules(stack,
268+
{ModuleDecl::ImportFilterKind::Private,
269+
ModuleDecl::ImportFilterKind::ImplementationOnly,
270+
ModuleDecl::ImportFilterKind::SPIAccessControl});
273271
}
274272

275273
SmallVector<ModuleDecl::AccessPathTy, 4> accessPaths;

lib/Frontend/ModuleInterfaceSupport.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,11 @@ static void printImports(raw_ostream &out,
100100
ModuleDecl *M) {
101101
// FIXME: This is very similar to what's in Serializer::writeInputBlock, but
102102
// it's not obvious what higher-level optimization would be factored out here.
103-
ModuleDecl::ImportFilter allImportFilter;
104-
allImportFilter |= ModuleDecl::ImportFilterKind::Public;
105-
allImportFilter |= ModuleDecl::ImportFilterKind::Private;
106-
allImportFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
107-
108103
SmallVector<ModuleDecl::ImportedModule, 8> allImports;
109-
M->getImportedModules(allImports, allImportFilter);
104+
M->getImportedModules(allImports,
105+
{ModuleDecl::ImportFilterKind::Public,
106+
ModuleDecl::ImportFilterKind::Private,
107+
ModuleDecl::ImportFilterKind::SPIAccessControl});
110108
ModuleDecl::removeDuplicateImports(allImports);
111109
diagnoseScopedImports(M->getASTContext().Diags, allImports);
112110

lib/FrontendTool/ImportedModules.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,12 @@ bool swift::emitImportedModules(ASTContext &Context, ModuleDecl *mainModule,
7878
StringRef implicitHeaderPath = opts.ImplicitObjCHeaderPath;
7979
if (!implicitHeaderPath.empty()) {
8080
if (!clangImporter->importBridgingHeader(implicitHeaderPath, mainModule)) {
81-
ModuleDecl::ImportFilter importFilter;
82-
importFilter |= ModuleDecl::ImportFilterKind::Public;
83-
importFilter |= ModuleDecl::ImportFilterKind::Private;
84-
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
85-
importFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
86-
8781
SmallVector<ModuleDecl::ImportedModule, 16> imported;
8882
clangImporter->getImportedHeaderModule()->getImportedModules(
89-
imported, importFilter);
83+
imported, {ModuleDecl::ImportFilterKind::Public,
84+
ModuleDecl::ImportFilterKind::Private,
85+
ModuleDecl::ImportFilterKind::ImplementationOnly,
86+
ModuleDecl::ImportFilterKind::SPIAccessControl});
9087

9188
for (auto IM : imported) {
9289
if (auto clangModule = IM.importedModule->findUnderlyingClangModule())

lib/IDE/CodeCompletion.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2085,15 +2085,13 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
20852085
}
20862086

20872087
void collectImportedModules(llvm::StringSet<> &ImportedModules) {
2088-
ModuleDecl::ImportFilter ImportFilter;
2089-
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
2090-
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
2091-
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
2092-
20932088
SmallVector<ModuleDecl::ImportedModule, 16> Imported;
20942089
SmallVector<ModuleDecl::ImportedModule, 16> FurtherImported;
2095-
CurrDeclContext->getParentSourceFile()->getImportedModules(Imported,
2096-
ImportFilter);
2090+
CurrDeclContext->getParentSourceFile()->getImportedModules(
2091+
Imported,
2092+
{ModuleDecl::ImportFilterKind::Public,
2093+
ModuleDecl::ImportFilterKind::Private,
2094+
ModuleDecl::ImportFilterKind::ImplementationOnly});
20972095
while (!Imported.empty()) {
20982096
ModuleDecl *MD = Imported.back().importedModule;
20992097
Imported.pop_back();
@@ -6365,13 +6363,12 @@ void CodeCompletionCallbacksImpl::doneParsing() {
63656363
Lookup.addModuleName(curModule);
63666364

63676365
// Add results for all imported modules.
6368-
ModuleDecl::ImportFilter ImportFilter;
6369-
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
6370-
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
6371-
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
63726366
SmallVector<ModuleDecl::ImportedModule, 4> Imports;
63736367
auto *SF = CurDeclContext->getParentSourceFile();
6374-
SF->getImportedModules(Imports, ImportFilter);
6368+
SF->getImportedModules(
6369+
Imports, {ModuleDecl::ImportFilterKind::Public,
6370+
ModuleDecl::ImportFilterKind::Private,
6371+
ModuleDecl::ImportFilterKind::ImplementationOnly});
63756372

63766373
for (auto Imported : Imports) {
63776374
for (auto Import : namelookup::getAllImports(Imported.importedModule))

lib/IRGen/IRGenDebugInfo.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1832,12 +1832,11 @@ void IRGenDebugInfoImpl::finalize() {
18321832

18331833
// Get the list of imported modules (which may actually be different
18341834
// from all ImportDecls).
1835-
ModuleDecl::ImportFilter ImportFilter;
1836-
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
1837-
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
1838-
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
18391835
SmallVector<ModuleDecl::ImportedModule, 8> ModuleWideImports;
1840-
IGM.getSwiftModule()->getImportedModules(ModuleWideImports, ImportFilter);
1836+
IGM.getSwiftModule()->getImportedModules(
1837+
ModuleWideImports, {ModuleDecl::ImportFilterKind::Public,
1838+
ModuleDecl::ImportFilterKind::Private,
1839+
ModuleDecl::ImportFilterKind::ImplementationOnly});
18411840
for (auto M : ModuleWideImports)
18421841
if (!ImportedModules.count(M.importedModule))
18431842
DBuilder.createImportedModule(MainFile, getOrCreateModule(M), MainFile,

lib/Index/Index.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,10 @@ class SourceFileOrModule {
125125

126126
void
127127
getImportedModules(SmallVectorImpl<ModuleDecl::ImportedModule> &Modules) const {
128-
ModuleDecl::ImportFilter ImportFilter;
129-
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
130-
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
131-
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
128+
constexpr ModuleDecl::ImportFilter ImportFilter = {
129+
ModuleDecl::ImportFilterKind::Public,
130+
ModuleDecl::ImportFilterKind::Private,
131+
ModuleDecl::ImportFilterKind::ImplementationOnly};
132132

133133
if (auto *SF = SFOrMod.dyn_cast<SourceFile *>()) {
134134
SF->getImportedModules(Modules, ImportFilter);

lib/Index/IndexRecord.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -580,11 +580,9 @@ emitDataForSwiftSerializedModule(ModuleDecl *module,
580580
unitWriter.addRecordFile(recordFile, *FE, isSystemModule, mod);
581581
}
582582

583-
ModuleDecl::ImportFilter importFilter;
584-
importFilter |= ModuleDecl::ImportFilterKind::Public;
585-
importFilter |= ModuleDecl::ImportFilterKind::Private;
586583
SmallVector<ModuleDecl::ImportedModule, 8> imports;
587-
module->getImportedModules(imports, importFilter);
584+
module->getImportedModules(imports, {ModuleDecl::ImportFilterKind::Public,
585+
ModuleDecl::ImportFilterKind::Private});
588586
StringScratchSpace moduleNameScratch;
589587
addModuleDependencies(imports, indexStorePath, indexSystemModules, skipStdlib,
590588
targetTriple, clangCI, diags, unitWriter,
@@ -621,13 +619,11 @@ recordSourceFileUnit(SourceFile *primarySourceFile, StringRef indexUnitToken,
621619
getModuleInfoFromOpaqueModule);
622620

623621
// Module dependencies.
624-
ModuleDecl::ImportFilter importFilter;
625-
importFilter |= ModuleDecl::ImportFilterKind::Public;
626-
importFilter |= ModuleDecl::ImportFilterKind::Private;
627-
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
628-
629622
SmallVector<ModuleDecl::ImportedModule, 8> imports;
630-
primarySourceFile->getImportedModules(imports, importFilter);
623+
primarySourceFile->getImportedModules(
624+
imports, {ModuleDecl::ImportFilterKind::Public,
625+
ModuleDecl::ImportFilterKind::Private,
626+
ModuleDecl::ImportFilterKind::ImplementationOnly});
631627
StringScratchSpace moduleNameScratch;
632628
addModuleDependencies(imports, indexStorePath, indexSystemModules, skipStdlib,
633629
targetTriple, clangCI, diags, unitWriter,

lib/Serialization/Serialization.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,13 +1020,12 @@ void Serializer::writeInputBlock(const SerializationOptions &options) {
10201020
if (!options.ModuleInterface.empty())
10211021
ModuleInterface.emit(ScratchRecord, options.ModuleInterface);
10221022

1023-
ModuleDecl::ImportFilter allImportFilter;
1024-
allImportFilter |= ModuleDecl::ImportFilterKind::Public;
1025-
allImportFilter |= ModuleDecl::ImportFilterKind::Private;
1026-
allImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
1027-
allImportFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
10281023
SmallVector<ModuleDecl::ImportedModule, 8> allImports;
1029-
M->getImportedModules(allImports, allImportFilter);
1024+
M->getImportedModules(allImports,
1025+
{ModuleDecl::ImportFilterKind::Public,
1026+
ModuleDecl::ImportFilterKind::Private,
1027+
ModuleDecl::ImportFilterKind::ImplementationOnly,
1028+
ModuleDecl::ImportFilterKind::SPIAccessControl});
10301029
ModuleDecl::removeDuplicateImports(allImports);
10311030

10321031
// Collect the public and private imports as a subset so that we can

lib/Serialization/SerializedModuleLoader.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,12 +1087,9 @@ void SerializedASTFile::getImportedModules(
10871087

10881088
void SerializedASTFile::collectLinkLibrariesFromImports(
10891089
ModuleDecl::LinkLibraryCallback callback) const {
1090-
ModuleDecl::ImportFilter ImportFilter;
1091-
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
1092-
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
1093-
10941090
llvm::SmallVector<ModuleDecl::ImportedModule, 8> Imports;
1095-
File.getImportedModules(Imports, ImportFilter);
1091+
File.getImportedModules(Imports, {ModuleDecl::ImportFilterKind::Public,
1092+
ModuleDecl::ImportFilterKind::Private});
10961093

10971094
for (auto Import : Imports)
10981095
Import.importedModule->collectLinkLibraries(callback);

0 commit comments

Comments
 (0)