Skip to content

Commit 3f893dd

Browse files
authored
Merge pull request #37213 from nkcsgexi/refactor-compiler-flag-extractor
ModuleInterface: refactor out a utility to extract compiler flags from a module interface file. NFC
2 parents a6915e7 + 3d6662f commit 3f893dd

File tree

5 files changed

+18
-12
lines changed

5 files changed

+18
-12
lines changed

include/swift/Frontend/ModuleInterfaceSupport.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ std::string getSwiftInterfaceCompilerVersionForCurrentCompiler(ASTContext &ctx);
5757

5858
llvm::Regex getSwiftInterfaceFormatVersionRegex();
5959
llvm::Regex getSwiftInterfaceCompilerVersionRegex();
60-
llvm::Regex getSwiftInterfaceModuleFlagsRegex();
6160

6261
/// Emit a stable module interface for \p M, which can be used by a client
6362
/// source file to import this module, subject to options given by \p Opts.

include/swift/Serialization/SerializedModuleLoader.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,9 @@ class SerializedASTFile final : public LoadedFile {
461461
}
462462
};
463463

464-
464+
/// Extract compiler arguments from an interface file buffer.
465+
bool extractCompilerFlagsFromInterface(StringRef buffer, llvm::StringSaver &ArgSaver,
466+
SmallVectorImpl<const char *> &SubArgs);
465467
} // end namespace swift
466468

467469
#endif

lib/Frontend/ModuleInterfaceLoader.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,24 +1191,21 @@ bool InterfaceSubContextDelegateImpl::extractSwiftInterfaceVersionAndArgs(
11911191
auto SB = FileOrError.get()->getBuffer();
11921192
auto VersRe = getSwiftInterfaceFormatVersionRegex();
11931193
auto CompRe = getSwiftInterfaceCompilerVersionRegex();
1194-
auto FlagRe = getSwiftInterfaceModuleFlagsRegex();
1195-
SmallVector<StringRef, 1> VersMatches, FlagMatches, CompMatches;
1194+
SmallVector<StringRef, 1> VersMatches, CompMatches;
11961195

11971196
if (!VersRe.match(SB, &VersMatches)) {
11981197
diagnose(interfacePath, diagnosticLoc,
11991198
diag::error_extracting_version_from_module_interface);
12001199
return true;
12011200
}
1202-
if (!FlagRe.match(SB, &FlagMatches)) {
1201+
if (extractCompilerFlagsFromInterface(SB, ArgSaver, SubArgs)) {
12031202
diagnose(interfacePath, diagnosticLoc,
12041203
diag::error_extracting_version_from_module_interface);
12051204
return true;
12061205
}
12071206
assert(VersMatches.size() == 2);
1208-
assert(FlagMatches.size() == 2);
12091207
// FIXME We should diagnose this at a location that makes sense:
12101208
auto Vers = swift::version::Version(VersMatches[1], SourceLoc(), &Diags);
1211-
llvm::cl::TokenizeGNUCommandLine(FlagMatches[1], ArgSaver, SubArgs);
12121209

12131210
if (CompRe.match(SB, &CompMatches)) {
12141211
assert(CompMatches.size() == 2);

lib/Frontend/ModuleInterfaceSupport.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,6 @@ llvm::Regex swift::getSwiftInterfaceFormatVersionRegex() {
6969
": ([0-9\\.]+)$", llvm::Regex::Newline);
7070
}
7171

72-
llvm::Regex swift::getSwiftInterfaceModuleFlagsRegex() {
73-
return llvm::Regex("^// " SWIFT_MODULE_FLAGS_KEY ":(.*)$",
74-
llvm::Regex::Newline);
75-
}
76-
7772
llvm::Regex swift::getSwiftInterfaceCompilerVersionRegex() {
7873
return llvm::Regex("^// " SWIFT_COMPILER_VERSION_KEY
7974
": (.+)$", llvm::Regex::Newline);

lib/Serialization/SerializedModuleLoader.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "llvm/Support/Host.h"
3131
#include "llvm/Support/MemoryBuffer.h"
3232
#include "llvm/Support/Path.h"
33+
#include "llvm/Support/CommandLine.h"
3334
#include <system_error>
3435

3536
using namespace swift;
@@ -947,6 +948,18 @@ void swift::serialization::diagnoseSerializedASTLoadFailure(
947948
}
948949
}
949950

951+
bool swift::extractCompilerFlagsFromInterface(StringRef buffer,
952+
llvm::StringSaver &ArgSaver,
953+
SmallVectorImpl<const char *> &SubArgs) {
954+
SmallVector<StringRef, 1> FlagMatches;
955+
auto FlagRe = llvm::Regex("^// swift-module-flags:(.*)$", llvm::Regex::Newline);
956+
if (!FlagRe.match(buffer, &FlagMatches))
957+
return true;
958+
assert(FlagMatches.size() == 2);
959+
llvm::cl::TokenizeGNUCommandLine(FlagMatches[1], ArgSaver, SubArgs);
960+
return false;
961+
}
962+
950963
bool SerializedModuleLoaderBase::canImportModule(
951964
ImportPath::Element mID, llvm::VersionTuple version, bool underlyingVersion) {
952965
// Look on disk.

0 commit comments

Comments
 (0)