[ModuleInterface] <rdar://46081260> Fallback behaviour and testing env vars.

This commit is contained in:
Graydon Hoare
2018-11-21 23:44:53 -08:00
committed by Jordan Rose
parent 0ccfe34513
commit f7200e87bd
6 changed files with 103 additions and 33 deletions

View File

@@ -20,6 +20,13 @@
namespace swift {
class ModuleFile;
enum class ModuleLoadingMode {
PreferParseable,
PreferSerialized,
OnlyParseable,
OnlySerialized
};
/// Common functionality shared between \c SerializedModuleLoader and
/// \c ParseableInterfaceModuleLoader.
class SerializedModuleLoaderBase : public ModuleLoader {
@@ -32,7 +39,9 @@ class SerializedModuleLoaderBase : public ModuleLoader {
protected:
llvm::StringMap<std::unique_ptr<llvm::MemoryBuffer>> MemoryBuffers;
ASTContext &Ctx;
SerializedModuleLoaderBase(ASTContext &ctx, DependencyTracker *tracker);
ModuleLoadingMode LoadMode;
SerializedModuleLoaderBase(ASTContext &ctx, DependencyTracker *tracker,
ModuleLoadingMode LoadMode);
using AccessPathElem = std::pair<Identifier, SourceLoc>;
bool findModule(AccessPathElem moduleID,
@@ -100,8 +109,9 @@ public:
/// Imports serialized Swift modules into an ASTContext.
class SerializedModuleLoader : public SerializedModuleLoaderBase {
SerializedModuleLoader(ASTContext &ctx, DependencyTracker *tracker)
: SerializedModuleLoaderBase(ctx, tracker)
SerializedModuleLoader(ASTContext &ctx, DependencyTracker *tracker,
ModuleLoadingMode loadMode)
: SerializedModuleLoaderBase(ctx, tracker, loadMode)
{}
public:
@@ -120,9 +130,10 @@ public:
/// Create a new importer that can load serialized Swift modules
/// into the given ASTContext.
static std::unique_ptr<SerializedModuleLoader>
create(ASTContext &ctx, DependencyTracker *tracker = nullptr) {
create(ASTContext &ctx, DependencyTracker *tracker = nullptr,
ModuleLoadingMode loadMode = ModuleLoadingMode::PreferSerialized) {
return std::unique_ptr<SerializedModuleLoader>{
new SerializedModuleLoader(ctx, tracker)
new SerializedModuleLoader(ctx, tracker, loadMode)
};
}
};