BitReader.cpp revision 195340
1//===-- BitReader.cpp -----------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "llvm-c/BitReader.h" 11#include "llvm/Bitcode/ReaderWriter.h" 12#include "llvm/LLVMContext.h" 13#include "llvm/Support/MemoryBuffer.h" 14#include <string> 15#include <cstring> 16 17using namespace llvm; 18 19/* Builds a module from the bitcode in the specified memory buffer, returning a 20 reference to the module via the OutModule parameter. Returns 0 on success. 21 Optionally returns a human-readable error message via OutMessage. */ 22int LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, 23 LLVMModuleRef *OutModule, char **OutMessage) { 24 std::string Message; 25 26 *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), getGlobalContext(), 27 &Message)); 28 if (!*OutModule) { 29 if (OutMessage) 30 *OutMessage = strdup(Message.c_str()); 31 return 1; 32 } 33 34 return 0; 35} 36 37int LLVMParseBitcodeInContext(LLVMMemoryBufferRef MemBuf, 38 LLVMContextRef ContextRef, 39 LLVMModuleRef *OutModule, char **OutMessage) { 40 std::string Message; 41 42 *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), *unwrap(ContextRef), 43 &Message)); 44 if (!*OutModule) { 45 if (OutMessage) 46 *OutMessage = strdup(Message.c_str()); 47 return 1; 48 } 49 50 return 0; 51} 52 53/* Reads a module from the specified path, returning via the OutModule parameter 54 a module provider which performs lazy deserialization. Returns 0 on success. 55 Optionally returns a human-readable error message via OutMessage. */ 56int LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf, 57 LLVMModuleProviderRef *OutMP, 58 char **OutMessage) { 59 std::string Message; 60 61 *OutMP = wrap(getBitcodeModuleProvider(unwrap(MemBuf), getGlobalContext(), 62 &Message)); 63 64 if (!*OutMP) { 65 if (OutMessage) 66 *OutMessage = strdup(Message.c_str()); 67 return 1; 68 } 69 70 return 0; 71} 72 73int LLVMGetBitcodeModuleProviderInContext(LLVMMemoryBufferRef MemBuf, 74 LLVMContextRef ContextRef, 75 LLVMModuleProviderRef *OutMP, 76 char **OutMessage) { 77 std::string Message; 78 79 *OutMP = wrap(getBitcodeModuleProvider(unwrap(MemBuf), *unwrap(ContextRef), 80 &Message)); 81 if (!*OutMP) { 82 if (OutMessage) 83 *OutMessage = strdup(Message.c_str()); 84 return 1; 85 } 86 87 return 0; 88} 89