BitReader.cpp revision 249423
168349Sobrien//===-- BitReader.cpp -----------------------------------------------------===// 2133359Sobrien// 3133359Sobrien// The LLVM Compiler Infrastructure 4133359Sobrien// 5133359Sobrien// This file is distributed under the University of Illinois Open Source 6133359Sobrien// License. See LICENSE.TXT for details. 7133359Sobrien// 8133359Sobrien//===----------------------------------------------------------------------===// 9133359Sobrien 10133359Sobrien#include "llvm-c/BitReader.h" 11133359Sobrien#include "llvm/Bitcode/ReaderWriter.h" 12133359Sobrien#include "llvm/IR/LLVMContext.h" 13133359Sobrien#include "llvm/Support/MemoryBuffer.h" 14133359Sobrien#include <cstring> 15133359Sobrien#include <string> 16133359Sobrien 17133359Sobrienusing namespace llvm; 18133359Sobrien 19133359Sobrien/* Builds a module from the bitcode in the specified memory buffer, returning a 20133359Sobrien reference to the module via the OutModule parameter. Returns 0 on success. 21133359Sobrien Optionally returns a human-readable error message via OutMessage. */ 22133359SobrienLLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, 23133359Sobrien LLVMModuleRef *OutModule, char **OutMessage) { 24133359Sobrien return LLVMParseBitcodeInContext(wrap(&getGlobalContext()), MemBuf, OutModule, 25133359Sobrien OutMessage); 26133359Sobrien} 27133359Sobrien 28133359SobrienLLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef, 2968349Sobrien LLVMMemoryBufferRef MemBuf, 3068349Sobrien LLVMModuleRef *OutModule, 3168349Sobrien char **OutMessage) { 3280588Sobrien std::string Message; 33191736Sobrien 34191736Sobrien *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), *unwrap(ContextRef), 35330569Sgordon &Message)); 36191736Sobrien if (!*OutModule) { 37191736Sobrien if (OutMessage) 38133359Sobrien *OutMessage = strdup(Message.c_str()); 3968349Sobrien return 1; 4084685Sobrien } 4184685Sobrien 4284685Sobrien return 0; 43267843Sdelphij} 44267843Sdelphij 45267843Sdelphij/* Reads a module from the specified path, returning via the OutModule parameter 4668349Sobrien a module provider which performs lazy deserialization. Returns 0 on success. 47169942Sobrien Optionally returns a human-readable error message via OutMessage. */ 4868349SobrienLLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef, 49103373Sobrien LLVMMemoryBufferRef MemBuf, 5074784Sobrien LLVMModuleRef *OutM, 5174784Sobrien char **OutMessage) { 5274784Sobrien std::string Message; 53186690Sobrien 54267843Sdelphij *OutM = wrap(getLazyBitcodeModule(unwrap(MemBuf), *unwrap(ContextRef), 55267843Sdelphij &Message)); 56267843Sdelphij if (!*OutM) { 5768349Sobrien if (OutMessage) 58267843Sdelphij *OutMessage = strdup(Message.c_str()); 59267843Sdelphij return 1; 60267843Sdelphij } 61267843Sdelphij 62267843Sdelphij return 0; 63267843Sdelphij 6468349Sobrien} 6568349Sobrien 6668349SobrienLLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, 6768349Sobrien char **OutMessage) { 6875937Sobrien return LLVMGetBitcodeModuleInContext(LLVMGetGlobalContext(), MemBuf, OutM, 6975937Sobrien OutMessage); 7075937Sobrien} 7175937Sobrien 7275937Sobrien/* Deprecated: Use LLVMGetBitcodeModuleInContext instead. */ 7375937SobrienLLVMBool LLVMGetBitcodeModuleProviderInContext(LLVMContextRef ContextRef, 7475937Sobrien LLVMMemoryBufferRef MemBuf, 7575937Sobrien LLVMModuleProviderRef *OutMP, 7675937Sobrien char **OutMessage) { 7768349Sobrien return LLVMGetBitcodeModuleInContext(ContextRef, MemBuf, 7875937Sobrien reinterpret_cast<LLVMModuleRef*>(OutMP), 7975937Sobrien OutMessage); 8075937Sobrien} 8168349Sobrien 8275937Sobrien/* Deprecated: Use LLVMGetBitcodeModule instead. */ 8375937SobrienLLVMBool LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf, 8475937Sobrien LLVMModuleProviderRef *OutMP, 8575937Sobrien char **OutMessage) { 86267843Sdelphij return LLVMGetBitcodeModuleProviderInContext(LLVMGetGlobalContext(), MemBuf, 87267843Sdelphij OutMP, OutMessage); 88267843Sdelphij} 89330569Sgordon