LambdaResolver.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. #ifndef LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H
  15. #define LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H
  16. #include "llvm/ADT/STLExtras.h"
  17. #include "llvm/ExecutionEngine/RuntimeDyld.h"
  18. #include <memory>
  19. #include <vector>
  20. namespace llvm {
  21. namespace orc {
  22. template <typename ExternalLookupFtorT, typename DylibLookupFtorT>
  23. class LambdaResolver : public RuntimeDyld::SymbolResolver {
  24. public:
  25. LambdaResolver(ExternalLookupFtorT ExternalLookupFtor,
  26. DylibLookupFtorT DylibLookupFtor)
  27. : ExternalLookupFtor(ExternalLookupFtor),
  28. DylibLookupFtor(DylibLookupFtor) {}
  29. RuntimeDyld::SymbolInfo findSymbol(const std::string &Name) final {
  30. return ExternalLookupFtor(Name);
  31. }
  32. RuntimeDyld::SymbolInfo
  33. findSymbolInLogicalDylib(const std::string &Name) final {
  34. return DylibLookupFtor(Name);
  35. }
  36. private:
  37. ExternalLookupFtorT ExternalLookupFtor;
  38. DylibLookupFtorT DylibLookupFtor;
  39. };
  40. template <typename ExternalLookupFtorT,
  41. typename DylibLookupFtorT>
  42. std::unique_ptr<LambdaResolver<ExternalLookupFtorT, DylibLookupFtorT>>
  43. createLambdaResolver(ExternalLookupFtorT ExternalLookupFtor,
  44. DylibLookupFtorT DylibLookupFtor) {
  45. typedef LambdaResolver<ExternalLookupFtorT, DylibLookupFtorT> LR;
  46. return make_unique<LR>(std::move(ExternalLookupFtor),
  47. std::move(DylibLookupFtor));
  48. }
  49. } // End namespace orc.
  50. } // End namespace llvm.
  51. #endif // LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H