Skip to content

Commit 93855d6

Browse files
authored
Merge pull request #68145 from tshortli/serializer-options-member
Serialization: Make options a member of Serializer class
2 parents b37316d + 8ce8c36 commit 93855d6

File tree

3 files changed

+44
-38
lines changed

3 files changed

+44
-38
lines changed

lib/DependencyScan/ScanDependencies.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1490,8 +1490,8 @@ static bool diagnoseCycle(CompilerInstance &instance,
14901490
auto beforeSize = openSet.size();
14911491

14921492
auto optionalDepInfo = cache.findDependency(lastOpen.first, lastOpen.second);
1493-
assert(optionalDepInfo.has_value() && "Missing dependency info during cycle diagnosis.");
1494-
auto depInfo = optionalDepInfo.value();
1493+
assert(optionalDepInfo.has_value() &&
1494+
"Missing dependency info during cycle diagnosis.");
14951495

14961496
for (const auto &dep : getAllDependencies(lastOpen, cache)) {
14971497
if (closeSet.count(dep))

lib/Serialization/Serialization.cpp

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -960,7 +960,7 @@ void Serializer::writeBlockInfoBlock() {
960960
#undef BLOCK_RECORD
961961
}
962962

963-
void Serializer::writeHeader(const SerializationOptions &options) {
963+
void Serializer::writeHeader() {
964964
{
965965
BCBlockRAII restoreBlock(Out, CONTROL_BLOCK_ID, 4);
966966
control_block::ModuleNameLayout ModuleName(Out);
@@ -984,17 +984,17 @@ void Serializer::writeHeader(const SerializationOptions &options) {
984984
size_t compatibilityVersionStringLength =
985985
versionString.tell() - shortVersionStringLength - 1;
986986
versionString << ")/" << version::getSwiftFullVersion();
987-
auto userModuleMajor = options.UserModuleVersion.getMajor();
987+
auto userModuleMajor = Options.UserModuleVersion.getMajor();
988988
auto userModuleMinor = 0;
989-
if (auto minor = options.UserModuleVersion.getMinor()) {
989+
if (auto minor = Options.UserModuleVersion.getMinor()) {
990990
userModuleMinor = *minor;
991991
}
992992
auto userModuleSubminor = 0;
993-
if (auto subMinor = options.UserModuleVersion.getSubminor()) {
993+
if (auto subMinor = Options.UserModuleVersion.getSubminor()) {
994994
userModuleSubminor = *subMinor;
995995
}
996996
auto userModuleBuild = 0;
997-
if (auto build = options.UserModuleVersion.getBuild()) {
997+
if (auto build = Options.UserModuleVersion.getBuild()) {
998998
userModuleBuild = *build;
999999
}
10001000
Metadata.emit(ScratchRecord,
@@ -1005,10 +1005,10 @@ void Serializer::writeHeader(const SerializationOptions &options) {
10051005
userModuleSubminor, userModuleBuild,
10061006
versionString.str());
10071007

1008-
if (!options.SDKName.empty())
1009-
SDKName.emit(ScratchRecord, options.SDKName);
1008+
if (!Options.SDKName.empty())
1009+
SDKName.emit(ScratchRecord, Options.SDKName);
10101010

1011-
for (auto &name: options.AllowableClients) {
1011+
for (auto &name : Options.AllowableClients) {
10121012
Allowable.emit(ScratchRecord, name);
10131013
}
10141014
Target.emit(ScratchRecord, M->getASTContext().LangOpts.Target.str());
@@ -1020,20 +1020,20 @@ void Serializer::writeHeader(const SerializationOptions &options) {
10201020
forcedDebugRevision : version::getCurrentCompilerSerializationTag();
10211021
Revision.emit(ScratchRecord, revision);
10221022

1023-
IsOSSA.emit(ScratchRecord, options.IsOSSA);
1023+
IsOSSA.emit(ScratchRecord, Options.IsOSSA);
10241024

10251025
{
10261026
llvm::BCBlockRAII restoreBlock(Out, OPTIONS_BLOCK_ID, 4);
10271027

10281028
options_block::IsSIBLayout IsSIB(Out);
1029-
IsSIB.emit(ScratchRecord, options.IsSIB);
1029+
IsSIB.emit(ScratchRecord, Options.IsSIB);
10301030

1031-
if (options.StaticLibrary) {
1031+
if (Options.StaticLibrary) {
10321032
options_block::IsStaticLibraryLayout IsStaticLibrary(Out);
10331033
IsStaticLibrary.emit(ScratchRecord);
10341034
}
10351035

1036-
if (options.HermeticSealAtLink) {
1036+
if (Options.HermeticSealAtLink) {
10371037
options_block::HasHermeticSealAtLinkLayout HasHermeticSealAtLink(Out);
10381038
HasHermeticSealAtLink.emit(ScratchRecord);
10391039
}
@@ -1095,17 +1095,17 @@ void Serializer::writeHeader(const SerializationOptions &options) {
10951095
CxxInteroperabilityEnabled.emit(ScratchRecord);
10961096
}
10971097

1098-
if (options.SerializeOptionsForDebugging) {
1098+
if (Options.SerializeOptionsForDebugging) {
10991099
options_block::SDKPathLayout SDKPath(Out);
11001100
options_block::XCCLayout XCC(Out);
11011101

1102-
const auto &PathRemapper = options.DebuggingOptionsPrefixMap;
1103-
const auto &PathObfuscator = options.PathObfuscator;
1102+
const auto &PathRemapper = Options.DebuggingOptionsPrefixMap;
1103+
const auto &PathObfuscator = Options.PathObfuscator;
11041104
auto sdkPath = M->getASTContext().SearchPathOpts.getSDKPath();
11051105
SDKPath.emit(
11061106
ScratchRecord,
11071107
PathObfuscator.obfuscate(PathRemapper.remapPath(sdkPath)));
1108-
auto &Opts = options.ExtraClangOptions;
1108+
auto &Opts = Options.ExtraClangOptions;
11091109
for (auto Arg = Opts.begin(), E = Opts.end(); Arg != E; ++Arg) {
11101110
StringRef arg(*Arg);
11111111
if (arg.startswith("-ivfsoverlay")) {
@@ -1137,7 +1137,7 @@ void Serializer::writeHeader(const SerializationOptions &options) {
11371137

11381138
// Macro plugins
11391139
options_block::PluginSearchOptionLayout PluginSearchOpt(Out);
1140-
for (auto &elem : options.PluginSearchOptions) {
1140+
for (auto &elem : Options.PluginSearchOptions) {
11411141
switch (elem.getKind()) {
11421142
case PluginSearchOption::Kind::PluginPath: {
11431143
auto &opt = elem.get<PluginSearchOption::PluginPath>();
@@ -1213,7 +1213,7 @@ static ImportSet getImportsAsSet(const ModuleDecl *M,
12131213
return importSet;
12141214
}
12151215

1216-
void Serializer::writeInputBlock(const SerializationOptions &options) {
1216+
void Serializer::writeInputBlock() {
12171217
BCBlockRAII restoreBlock(Out, INPUT_BLOCK_ID, 4);
12181218
input_block::ImportedModuleLayout importedModule(Out);
12191219
input_block::ImportedModuleLayoutSPI ImportedModuleSPI(Out);
@@ -1225,9 +1225,9 @@ void Serializer::writeInputBlock(const SerializationOptions &options) {
12251225
input_block::DependencyDirectoryLayout DependencyDirectory(Out);
12261226
input_block::ModuleInterfaceLayout ModuleInterface(Out);
12271227

1228-
if (options.SerializeOptionsForDebugging) {
1229-
const auto &PathObfuscator = options.PathObfuscator;
1230-
const auto &PathMapper = options.DebuggingOptionsPrefixMap;
1228+
if (Options.SerializeOptionsForDebugging) {
1229+
const auto &PathObfuscator = Options.PathObfuscator;
1230+
const auto &PathMapper = Options.DebuggingOptionsPrefixMap;
12311231
const SearchPathOptions &searchPathOpts = M->getASTContext().SearchPathOpts;
12321232
// Put the framework search paths first so that they'll be preferred upon
12331233
// deserialization.
@@ -1242,7 +1242,7 @@ void Serializer::writeInputBlock(const SerializationOptions &options) {
12421242
// Note: We're not using StringMap here because we don't need to own the
12431243
// strings.
12441244
llvm::DenseMap<StringRef, unsigned> dependencyDirectories;
1245-
for (auto const &dep : options.Dependencies) {
1245+
for (auto const &dep : Options.Dependencies) {
12461246
StringRef directoryName = llvm::sys::path::parent_path(dep.getPath());
12471247
unsigned &dependencyDirectoryIndex = dependencyDirectories[directoryName];
12481248
if (!dependencyDirectoryIndex) {
@@ -1259,8 +1259,8 @@ void Serializer::writeInputBlock(const SerializationOptions &options) {
12591259
llvm::sys::path::filename(dep.getPath()));
12601260
}
12611261

1262-
if (!options.ModuleInterface.empty())
1263-
ModuleInterface.emit(ScratchRecord, options.ModuleInterface);
1262+
if (!Options.ModuleInterface.empty())
1263+
ModuleInterface.emit(ScratchRecord, Options.ModuleInterface);
12641264

12651265
SmallVector<ImportedModule, 8> allLocalImports;
12661266
M->getImportedModules(allLocalImports, ModuleDecl::getImportFilterLocal());
@@ -1291,15 +1291,15 @@ void Serializer::writeInputBlock(const SerializationOptions &options) {
12911291
off_t importedHeaderSize = 0;
12921292
time_t importedHeaderModTime = 0;
12931293
std::string contents;
1294-
if (!options.ImportedHeader.empty()) {
1294+
if (!Options.ImportedHeader.empty()) {
12951295
contents = clangImporter->getBridgingHeaderContents(
1296-
options.ImportedHeader, importedHeaderSize, importedHeaderModTime);
1296+
Options.ImportedHeader, importedHeaderSize, importedHeaderModTime);
12971297
}
12981298
assert(publicImportSet.count(bridgingHeaderImport));
12991299
ImportedHeader.emit(ScratchRecord,
13001300
publicImportSet.count(bridgingHeaderImport),
13011301
importedHeaderSize, importedHeaderModTime,
1302-
options.ImportedHeader);
1302+
Options.ImportedHeader);
13031303
if (!contents.empty()) {
13041304
contents.push_back('\0');
13051305
ImportedHeaderContents.emit(ScratchRecord, contents);
@@ -1348,13 +1348,13 @@ void Serializer::writeInputBlock(const SerializationOptions &options) {
13481348
}
13491349
}
13501350

1351-
if (!options.ModuleLinkName.empty()) {
1351+
if (!Options.ModuleLinkName.empty()) {
13521352
LinkLibrary.emit(ScratchRecord, serialization::LibraryKind::Library,
1353-
options.AutolinkForceLoad, options.ModuleLinkName);
1353+
Options.AutolinkForceLoad, Options.ModuleLinkName);
13541354
}
1355-
for (auto dependentLib : options.PublicDependentLibraries) {
1355+
for (auto dependentLib : Options.PublicDependentLibraries) {
13561356
LinkLibrary.emit(ScratchRecord, serialization::LibraryKind::Library,
1357-
options.AutolinkForceLoad, dependentLib);
1357+
Options.AutolinkForceLoad, dependentLib);
13581358
}
13591359
}
13601360

@@ -6568,15 +6568,15 @@ void Serializer::writeToStream(
65686568
const SILModule *SILMod,
65696569
const SerializationOptions &options,
65706570
const fine_grained_dependencies::SourceFileDepGraph *DepGraph) {
6571-
Serializer S{SWIFTMODULE_SIGNATURE, DC};
6571+
Serializer S{SWIFTMODULE_SIGNATURE, DC, options};
65726572

65736573
// FIXME: This is only really needed for debugging. We don't actually use it.
65746574
S.writeBlockInfoBlock();
65756575

65766576
{
65776577
BCBlockRAII moduleBlock(S.Out, MODULE_BLOCK_ID, 2);
6578-
S.writeHeader(options);
6579-
S.writeInputBlock(options);
6578+
S.writeHeader();
6579+
S.writeInputBlock();
65806580
S.writeSIL(SILMod, options.SerializeAllSIL);
65816581
S.writeAST(DC);
65826582
if (!options.DisableCrossModuleIncrementalInfo && DepGraph) {

lib/Serialization/Serialization.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ class Serializer : public SerializerBase {
8383
class TypeSerializer;
8484
friend class TypeSerializer;
8585

86+
const SerializationOptions &Options;
87+
8688
/// A map from non-identifier uniqued strings to their serialized IDs.
8789
///
8890
/// Since we never remove items from this map, we can use a BumpPtrAllocator
@@ -321,11 +323,11 @@ class Serializer : public SerializerBase {
321323

322324
/// Writes the Swift module file header and name, plus metadata determining
323325
/// if the module can be loaded.
324-
void writeHeader(const SerializationOptions &options = {});
326+
void writeHeader();
325327

326328
/// Writes the dependencies used to build this module: its imported
327329
/// modules and its source files.
328-
void writeInputBlock(const SerializationOptions &options);
330+
void writeInputBlock();
329331

330332
/// Check if a decl is cross-referenced.
331333
bool isDeclXRef(const Decl *D) const;
@@ -424,6 +426,10 @@ class Serializer : public SerializerBase {
424426
using SerializerBase::writeToStream;
425427

426428
public:
429+
Serializer(ArrayRef<unsigned char> signature, ModuleOrSourceFile DC,
430+
const SerializationOptions &options)
431+
: SerializerBase(signature, DC), Options(options) {}
432+
427433
/// Serialize a module to the given stream.
428434
static void
429435
writeToStream(raw_ostream &os, ModuleOrSourceFile DC,

0 commit comments

Comments
 (0)