//===--- SerializedSILLoader.cpp - A loader for SIL sections --------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See http://swift.org/LICENSE.txt for license information // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// #define DEBUG_TYPE "serialized-sil-loader" #include "DeserializeSIL.h" #include "swift/Serialization/ModuleFile.h" #include "swift/Serialization/SerializedSILLoader.h" #include "swift/SIL/SILModule.h" #include "llvm/Support/Debug.h" using namespace swift; SerializedSILLoader::SerializedSILLoader(ASTContext &Ctx, SILModule *SILMod, Callback *callback) { // Get a list of SerializedModules from ASTContext. for (auto &Entry : Ctx.LoadedModules) { for (auto File : Entry.getValue()->getFiles()) { if (auto LoadedAST = dyn_cast(File)) { auto Des = new SILDeserializer(&LoadedAST->File, *SILMod, callback); #ifndef NDEBUG SILMod->verify(); #endif LoadedSILSections.emplace_back(Des); } } } } SerializedSILLoader::~SerializedSILLoader() {} SILFunction *SerializedSILLoader::lookupSILFunction(SILFunction *Callee) { for (auto &Des : LoadedSILSections) { if (auto Func = Des->lookupSILFunction(Callee)) { DEBUG(llvm::dbgs() << "Deserialized " << Func->getName() << " from " << Des->getModuleIdentifier().str() << "\n"); return Func; } } return nullptr; } SILVTable *SerializedSILLoader::lookupVTable(Identifier Name) { for (auto &Des : LoadedSILSections) { if (auto VT = Des->lookupVTable(Name)) return VT; } return nullptr; } void SerializedSILLoader::getAll() { for (auto &Des : LoadedSILSections) Des->getAll(); } void SerializedSILLoader::getAllSILFunctions() { for (auto &Des : LoadedSILSections) Des->getAllSILFunctions(); } /// Deserialize all VTables in all SILModules. void SerializedSILLoader::getAllVTables() { for (auto &Des : LoadedSILSections) Des->getAllVTables(); } /// Deserialize all WitnessTables in all SILModules. void SerializedSILLoader::getAllWitnessTables() { for (auto &Des : LoadedSILSections) Des->getAllWitnessTables(); } // Anchor the SerializedSILLoader v-table. void SerializedSILLoader::Callback::_anchor() {}