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/Support/MemoryBuffer.h" 13 #include <string> 14 #include <cstring> 15 16 using namespace llvm; 17 18 /* Builds a module from the bitcode in the specified memory buffer, returning a 19 reference to the module via the OutModule parameter. Returns 0 on success. 20 Optionally returns a human-readable error message via OutMessage. */ 21 int LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMContextRef ContextRef, 22 LLVMModuleRef *OutModule, char **OutMessage) { 23 std::string Message; 24 25 *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), *unwrap(ContextRef), 26 &Message)); 27 if (!*OutModule) { 28 if (OutMessage) 29 *OutMessage = strdup(Message.c_str()); 30 return 1; 31 } 32 33 return 0; 34 } 35 36 /* Reads a module from the specified path, returning via the OutModule parameter 37 a module provider which performs lazy deserialization. Returns 0 on success. 38 Optionally returns a human-readable error message via OutMessage. */ 39 int LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf, 40 LLVMContextRef ContextRef, 41 LLVMModuleProviderRef *OutMP, 42 char **OutMessage) { 43 std::string Message; 44 45 *OutMP = wrap(getBitcodeModuleProvider(unwrap(MemBuf), *unwrap(ContextRef), 46 &Message)); 47 if (!*OutMP) { 48 if (OutMessage) 49 *OutMessage = strdup(Message.c_str()); 50 return 1; 51 } 52 53 return 0; 54 } 55