diff options
Diffstat (limited to 'lib/ExecutionEngine/Orc/Legacy.cpp')
| -rw-r--r-- | lib/ExecutionEngine/Orc/Legacy.cpp | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/lib/ExecutionEngine/Orc/Legacy.cpp b/lib/ExecutionEngine/Orc/Legacy.cpp index 18be9a042f7f..ddb72544b770 100644 --- a/lib/ExecutionEngine/Orc/Legacy.cpp +++ b/lib/ExecutionEngine/Orc/Legacy.cpp @@ -18,47 +18,47 @@ JITSymbolResolverAdapter::JITSymbolResolverAdapter( ExecutionSession &ES, SymbolResolver &R, MaterializationResponsibility *MR) : ES(ES), R(R), MR(MR) {} -Expected<JITSymbolResolverAdapter::LookupResult> -JITSymbolResolverAdapter::lookup(const LookupSet &Symbols) { +void JITSymbolResolverAdapter::lookup(const LookupSet &Symbols, + OnResolvedFunction OnResolved) { SymbolNameSet InternedSymbols; for (auto &S : Symbols) - InternedSymbols.insert(ES.getSymbolStringPool().intern(S)); + InternedSymbols.insert(ES.intern(S)); - auto LookupFn = [&, this](std::shared_ptr<AsynchronousSymbolQuery> Q, - SymbolNameSet Unresolved) { - return R.lookup(std::move(Q), std::move(Unresolved)); - }; + auto OnResolvedWithUnwrap = [OnResolved](Expected<SymbolMap> InternedResult) { + if (!InternedResult) { + OnResolved(InternedResult.takeError()); + return; + } - auto RegisterDependencies = [&](const SymbolDependenceMap &Deps) { - if (MR) - MR->addDependenciesForAll(Deps); + LookupResult Result; + for (auto &KV : *InternedResult) + Result[*KV.first] = std::move(KV.second); + OnResolved(Result); }; - auto InternedResult = - ES.legacyLookup(ES, std::move(LookupFn), std::move(InternedSymbols), - false, RegisterDependencies); - - if (!InternedResult) - return InternedResult.takeError(); + auto Q = std::make_shared<AsynchronousSymbolQuery>( + InternedSymbols, OnResolvedWithUnwrap, + [this](Error Err) { ES.reportError(std::move(Err)); }); - JITSymbolResolver::LookupResult Result; - for (auto &KV : *InternedResult) - Result[*KV.first] = KV.second; - - return Result; + auto Unresolved = R.lookup(Q, InternedSymbols); + if (Unresolved.empty()) { + if (MR) + MR->addDependenciesForAll(Q->QueryRegistrations); + } else + ES.legacyFailQuery(*Q, make_error<SymbolsNotFound>(std::move(Unresolved))); } -Expected<JITSymbolResolverAdapter::LookupFlagsResult> -JITSymbolResolverAdapter::lookupFlags(const LookupSet &Symbols) { +Expected<JITSymbolResolverAdapter::LookupSet> +JITSymbolResolverAdapter::getResponsibilitySet(const LookupSet &Symbols) { SymbolNameSet InternedSymbols; for (auto &S : Symbols) - InternedSymbols.insert(ES.getSymbolStringPool().intern(S)); + InternedSymbols.insert(ES.intern(S)); - SymbolFlagsMap SymbolFlags = R.lookupFlags(InternedSymbols); - LookupFlagsResult Result; - for (auto &KV : SymbolFlags) { - ResolvedStrings.insert(KV.first); - Result[*KV.first] = KV.second; + auto InternedResult = R.getResponsibilitySet(InternedSymbols); + LookupSet Result; + for (auto &S : InternedResult) { + ResolvedStrings.insert(S); + Result.insert(*S); } return Result; |
