[ORC] Pacify MSVC by adding explicit move construction/assignment to
[oota-llvm.git] / include / llvm / ExecutionEngine / Orc / JITSymbol.h
index c02975730ba6b7773233ac037aa9cad8bdbe17b1..422a3761837c23ed965fe508de03ae722a726c67 100644 (file)
 #ifndef LLVM_EXECUTIONENGINE_ORC_JITSYMBOL_H
 #define LLVM_EXECUTIONENGINE_ORC_JITSYMBOL_H
 
-#include "llvm/Support/Compiler.h"
+#include "llvm/ExecutionEngine/JITSymbolFlags.h"
+#include "llvm/Support/DataTypes.h"
 #include <cassert>
 #include <functional>
 
 namespace llvm {
+namespace orc {
 
 /// @brief Represents an address in the target process's address space.
 typedef uint64_t TargetAddress;
 
 /// @brief Represents a symbol in the JIT.
-class JITSymbol {
+class JITSymbol : public JITSymbolBase {
 public:
+
   typedef std::function<TargetAddress()> GetAddressFtor;
 
-  JITSymbol(std::nullptr_t) : CachedAddr(0) {}
+  /// @brief Create a 'null' symbol that represents failure to find a symbol
+  ///        definition.
+  JITSymbol(std::nullptr_t)
+      : JITSymbolBase(JITSymbolFlags::None), CachedAddr(0) {}
+
+  /// @brief Create a symbol for a definition with a known address.
+  JITSymbol(TargetAddress Addr, JITSymbolFlags Flags)
+    : JITSymbolBase(Flags), CachedAddr(Addr) {}
 
-  JITSymbol(GetAddressFtor GetAddress)
-      : CachedAddr(0), GetAddress(std::move(GetAddress)) {}
+  /// @brief Create a symbol for a definition that doesn't have a known address
+  ///        yet.
+  /// @param GetAddress A functor to materialize a definition (fixing the
+  ///        address) on demand.
+  ///
+  ///   This constructor allows a JIT layer to provide a reference to a symbol
+  /// definition without actually materializing the definition up front. The
+  /// user can materialize the definition at any time by calling the getAddress
+  /// method.
+  JITSymbol(GetAddressFtor GetAddress, JITSymbolFlags Flags)
+      : JITSymbolBase(Flags), GetAddress(std::move(GetAddress)), CachedAddr(0) {}
 
   /// @brief Returns true if the symbol exists, false otherwise.
   explicit operator bool() const { return CachedAddr || GetAddress; }
@@ -48,10 +67,11 @@ public:
   }
 
 private:
-  TargetAddress CachedAddr;
   GetAddressFtor GetAddress;
+  TargetAddress CachedAddr;
 };
 
-}
+} // End namespace orc.
+} // End namespace llvm.
 
 #endif // LLVM_EXECUTIONENGINE_ORC_JITSYMBOL_H