]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/ExecutionEngine/Orc/LambdaResolver.h
Merge clang 7.0.1 and several follow-up changes
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / ExecutionEngine / Orc / LambdaResolver.h
1 //===- LambdaResolverMM - Redirect symbol lookup via a functor --*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //   Defines a RuntimeDyld::SymbolResolver subclass that uses a user-supplied
11 // functor for symbol resolution.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H
16 #define LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H
17
18 #include "llvm/ADT/STLExtras.h"
19 #include "llvm/ExecutionEngine/JITSymbol.h"
20 #include <memory>
21
22 namespace llvm {
23 namespace orc {
24
25 template <typename DylibLookupFtorT, typename ExternalLookupFtorT>
26 class LambdaResolver : public LegacyJITSymbolResolver {
27 public:
28   LambdaResolver(DylibLookupFtorT DylibLookupFtor,
29                  ExternalLookupFtorT ExternalLookupFtor)
30       : DylibLookupFtor(DylibLookupFtor),
31         ExternalLookupFtor(ExternalLookupFtor) {}
32
33   JITSymbol findSymbolInLogicalDylib(const std::string &Name) final {
34     return DylibLookupFtor(Name);
35   }
36
37   JITSymbol findSymbol(const std::string &Name) final {
38     return ExternalLookupFtor(Name);
39   }
40
41 private:
42   DylibLookupFtorT DylibLookupFtor;
43   ExternalLookupFtorT ExternalLookupFtor;
44 };
45
46 template <typename DylibLookupFtorT,
47           typename ExternalLookupFtorT>
48 std::shared_ptr<LambdaResolver<DylibLookupFtorT, ExternalLookupFtorT>>
49 createLambdaResolver(DylibLookupFtorT DylibLookupFtor,
50                      ExternalLookupFtorT ExternalLookupFtor) {
51   using LR = LambdaResolver<DylibLookupFtorT, ExternalLookupFtorT>;
52   return make_unique<LR>(std::move(DylibLookupFtor),
53                          std::move(ExternalLookupFtor));
54 }
55
56 } // end namespace orc
57 } // end namespace llvm
58
59 #endif // LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H