Home | History | Annotate | Download | only in BitReader_3_0
      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 
     17 using 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. */
     22 LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf,
     23                           LLVMModuleRef *OutModule, char **OutMessage) {
     24   return LLVMParseBitcodeInContext(wrap(&getGlobalContext()), MemBuf, OutModule,
     25                                    OutMessage);
     26 }
     27 
     28 LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef,
     29                                    LLVMMemoryBufferRef MemBuf,
     30                                    LLVMModuleRef *OutModule,
     31                                    char **OutMessage) {
     32   std::string Message;
     33 
     34   *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), *unwrap(ContextRef),
     35                                      &Message));
     36   if (!*OutModule) {
     37     if (OutMessage)
     38       *OutMessage = strdup(Message.c_str());
     39     return 1;
     40   }
     41 
     42   return 0;
     43 }
     44 
     45 /* Reads a module from the specified path, returning via the OutModule parameter
     46    a module provider which performs lazy deserialization. Returns 0 on success.
     47    Optionally returns a human-readable error message via OutMessage. */
     48 LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef,
     49                                        LLVMMemoryBufferRef MemBuf,
     50                                        LLVMModuleRef *OutM,
     51                                        char **OutMessage) {
     52   std::string Message;
     53 
     54   *OutM = wrap(getLazyBitcodeModule(unwrap(MemBuf), *unwrap(ContextRef),
     55                                     &Message));
     56   if (!*OutM) {
     57     if (OutMessage)
     58       *OutMessage = strdup(Message.c_str());
     59     return 1;
     60   }
     61 
     62   return 0;
     63 
     64 }
     65 
     66 LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
     67                               char **OutMessage) {
     68   return LLVMGetBitcodeModuleInContext(LLVMGetGlobalContext(), MemBuf, OutM,
     69                                        OutMessage);
     70 }
     71 
     72 /* Deprecated: Use LLVMGetBitcodeModuleInContext instead. */
     73 LLVMBool LLVMGetBitcodeModuleProviderInContext(LLVMContextRef ContextRef,
     74                                                LLVMMemoryBufferRef MemBuf,
     75                                                LLVMModuleProviderRef *OutMP,
     76                                                char **OutMessage) {
     77   return LLVMGetBitcodeModuleInContext(ContextRef, MemBuf,
     78                                        reinterpret_cast<LLVMModuleRef*>(OutMP),
     79                                        OutMessage);
     80 }
     81 
     82 /* Deprecated: Use LLVMGetBitcodeModule instead. */
     83 LLVMBool LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf,
     84                                       LLVMModuleProviderRef *OutMP,
     85                                       char **OutMessage) {
     86   return LLVMGetBitcodeModuleProviderInContext(LLVMGetGlobalContext(), MemBuf,
     87                                                OutMP, OutMessage);
     88 }
     89