| //===------- Legacy.cpp - Adapters for ExecutionEngine API interop --------===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "llvm/ExecutionEngine/Orc/Legacy.h" | |
| namespace llvm { | |
| namespace orc { | |
| void SymbolResolver::anchor() {} | |
| JITSymbolResolverAdapter::JITSymbolResolverAdapter( | |
| ExecutionSession &ES, SymbolResolver &R, MaterializationResponsibility *MR) | |
| : ES(ES), R(R), MR(MR) {} | |
| Expected<JITSymbolResolverAdapter::LookupResult> | |
| JITSymbolResolverAdapter::lookup(const LookupSet &Symbols) { | |
| SymbolNameSet InternedSymbols; | |
| for (auto &S : Symbols) | |
| InternedSymbols.insert(ES.getSymbolStringPool().intern(S)); | |
| auto LookupFn = [&, this](std::shared_ptr<AsynchronousSymbolQuery> Q, | |
| SymbolNameSet Unresolved) { | |
| return R.lookup(std::move(Q), std::move(Unresolved)); | |
| }; | |
| auto RegisterDependencies = [&](const SymbolDependenceMap &Deps) { | |
| if (MR) | |
| MR->addDependenciesForAll(Deps); | |
| }; | |
| auto InternedResult = | |
| ES.legacyLookup(ES, std::move(LookupFn), std::move(InternedSymbols), | |
| false, RegisterDependencies); | |
| if (!InternedResult) | |
| return InternedResult.takeError(); | |
| JITSymbolResolver::LookupResult Result; | |
| for (auto &KV : *InternedResult) | |
| Result[*KV.first] = KV.second; | |
| return Result; | |
| } | |
| Expected<JITSymbolResolverAdapter::LookupFlagsResult> | |
| JITSymbolResolverAdapter::lookupFlags(const LookupSet &Symbols) { | |
| SymbolNameSet InternedSymbols; | |
| for (auto &S : Symbols) | |
| InternedSymbols.insert(ES.getSymbolStringPool().intern(S)); | |
| SymbolFlagsMap SymbolFlags = R.lookupFlags(InternedSymbols); | |
| LookupFlagsResult Result; | |
| for (auto &KV : SymbolFlags) { | |
| ResolvedStrings.insert(KV.first); | |
| Result[*KV.first] = KV.second; | |
| } | |
| return Result; | |
| } | |
| } // End namespace orc. | |
| } // End namespace llvm. |