| #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(); |
| } |
| }; |
| |
| #endif // INCLUDED_RUSTC_LLVM_LLVMWRAPPER_H |