Adding bindings for memory buffers and module providers. Switching

to exceptions rather than variants for error handling in Ocaml.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45226 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Gordon Henriksen
2007-12-19 22:30:40 +00:00
parent 696f768daf
commit da1435f86e
16 changed files with 350 additions and 154 deletions

View File

@ -14,19 +14,14 @@
using namespace llvm;
int LLVMReadBitcodeFromFile(const char *Path, LLVMModuleRef *OutModule,
char **OutMessage) {
/* Builds a module from the bitcode in the specified memory buffer, returning a
reference to the module via the OutModule parameter. Returns 0 on success.
Optionally returns a human-readable error message via OutMessage. */
int LLVMParseBitcode(LLVMMemoryBufferRef MemBuf,
LLVMModuleRef *OutModule, char **OutMessage) {
std::string Message;
MemoryBuffer *buf = MemoryBuffer::getFile(Path, strlen(Path), &Message);
if (!buf) {
if (!OutMessage)
*OutMessage = strdup(Message.c_str());
return 1;
}
*OutModule = wrap(ParseBitcodeFile(buf, &Message));
*OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), &Message));
if (!*OutModule) {
if (OutMessage)
*OutMessage = strdup(Message.c_str());
@ -36,7 +31,20 @@ int LLVMReadBitcodeFromFile(const char *Path, LLVMModuleRef *OutModule,
return 0;
}
void LLVMDisposeBitcodeReaderMessage(char *Message) {
if (Message)
free(Message);
/* Reads a module from the specified path, returning via the OutModule parameter
a module provider which performs lazy deserialization. Returns 0 on success.
Optionally returns a human-readable error message via OutMessage. */
int LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf,
LLVMModuleProviderRef *OutMP,
char **OutMessage) {
std::string Message;
*OutMP = wrap(getBitcodeModuleProvider(unwrap(MemBuf), &Message));
if (!*OutMP) {
if (OutMessage)
*OutMessage = strdup(Message.c_str());
return 1;
}
return 0;
}