diff options
author | Gordon Henriksen <gordonhenriksen@mac.com> | 2007-12-19 22:30:40 +0000 |
---|---|---|
committer | Gordon Henriksen <gordonhenriksen@mac.com> | 2007-12-19 22:30:40 +0000 |
commit | 34eb6d877eb8e563bc3b546dbcd9f9c1644e7a98 (patch) | |
tree | a0f5bd941ea91cf6f36a4149e33ac79163ad5d84 /llvm/lib/VMCore/Core.cpp | |
parent | 9a53275918ef130dedc7b09234f42c5db6de8068 (diff) | |
download | bcm5719-llvm-34eb6d877eb8e563bc3b546dbcd9f9c1644e7a98.tar.gz bcm5719-llvm-34eb6d877eb8e563bc3b546dbcd9f9c1644e7a98.zip |
Adding bindings for memory buffers and module providers. Switching
to exceptions rather than variants for error handling in Ocaml.
llvm-svn: 45226
Diffstat (limited to 'llvm/lib/VMCore/Core.cpp')
-rw-r--r-- | llvm/lib/VMCore/Core.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/lib/VMCore/Core.cpp b/llvm/lib/VMCore/Core.cpp index 4c56e556eb3..2b54fb31525 100644 --- a/llvm/lib/VMCore/Core.cpp +++ b/llvm/lib/VMCore/Core.cpp @@ -19,11 +19,20 @@ #include "llvm/GlobalVariable.h" #include "llvm/TypeSymbolTable.h" #include "llvm/ModuleProvider.h" +#include "llvm/Support/MemoryBuffer.h" #include <cassert> +#include <cstdlib> using namespace llvm; +/*===-- Error handling ----------------------------------------------------===*/ + +void LLVMDisposeMessage(char *Message) { + free(Message); +} + + /*===-- Operations on modules ---------------------------------------------===*/ LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID) { @@ -1048,3 +1057,33 @@ void LLVMDisposeModuleProvider(LLVMModuleProviderRef MP) { delete unwrap(MP); } + +/*===-- Memory buffers ----------------------------------------------------===*/ + +int LLVMCreateMemoryBufferWithContentsOfFile(const char *Path, + LLVMMemoryBufferRef *OutMemBuf, + char **OutMessage) { + std::string Error; + if (MemoryBuffer *MB = MemoryBuffer::getFile(Path, strlen(Path), &Error)) { + *OutMemBuf = wrap(MB); + return 0; + } + + *OutMessage = strdup(Error.c_str()); + return 1; +} + +int LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf, + char **OutMessage) { + if (MemoryBuffer *MB = MemoryBuffer::getSTDIN()) { + *OutMemBuf = wrap(MB); + return 0; + } + + *OutMessage = strdup("stdin is empty."); + return 1; +} + +void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf) { + delete unwrap(MemBuf); +} |