| #ifndef INCLUDED_RUSTC_LLVM_LLVMWRAPPER_H | |
| #define INCLUDED_RUSTC_LLVM_LLVMWRAPPER_H | |
| #include "SuppressLLVMWarnings.h" | |
| #include "llvm/Config/llvm-config.h" // LLVM_VERSION_MAJOR, LLVM_VERSION_MINOR | |
| #include "llvm/Support/raw_ostream.h" // llvm::raw_ostream | |
| #include <cstddef> // size_t etc | |
| #include <cstdint> // uint64_t etc | |
| #define LLVM_VERSION_GE(major, minor) \ | |
| (LLVM_VERSION_MAJOR > (major) || \ | |
| LLVM_VERSION_MAJOR == (major) && LLVM_VERSION_MINOR >= (minor)) | |
| #define LLVM_VERSION_LT(major, minor) (!LLVM_VERSION_GE((major), (minor))) | |
| extern "C" void LLVMRustSetLastError(const char *); | |
| enum class LLVMRustResult { Success, Failure }; | |
| typedef struct OpaqueRustString *RustStringRef; | |
| typedef struct LLVMOpaqueTwine *LLVMTwineRef; | |
| typedef struct LLVMOpaqueSMDiagnostic *LLVMSMDiagnosticRef; | |
| extern "C" void LLVMRustStringWriteImpl(RustStringRef buf, | |
| const char *slice_ptr, | |
| size_t slice_len); | |
| class RawRustStringOstream : public llvm::raw_ostream { | |
| RustStringRef Str; | |
| uint64_t Pos; | |
| void write_impl(const char *Ptr, size_t Size) override { | |
| LLVMRustStringWriteImpl(Str, Ptr, Size); | |
| Pos += Size; | |
| } | |
| uint64_t current_pos() const override { return Pos; } | |
| public: | |
| explicit RawRustStringOstream(RustStringRef Str) : Str(Str), Pos(0) {} | |
| ~RawRustStringOstream() { | |
| // LLVM requires this. | |
| flush(); | |
| } | |
| }; | |
| struct LLVMRustBuffer { | |
| std::string data; | |
| }; | |
| #endif // INCLUDED_RUSTC_LLVM_LLVMWRAPPER_H |