LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BitReader.cpp
Go to the documentation of this file.
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"
12 #include "llvm/IR/LLVMContext.h"
13 #include "llvm/IR/Module.h"
15 #include <cstring>
16 #include <string>
17 
18 using namespace llvm;
19 
20 /* Builds a module from the bitcode in the specified memory buffer, returning a
21  reference to the module via the OutModule parameter. Returns 0 on success.
22  Optionally returns a human-readable error message via OutMessage. */
24  LLVMModuleRef *OutModule, char **OutMessage) {
25  return LLVMParseBitcodeInContext(wrap(&getGlobalContext()), MemBuf, OutModule,
26  OutMessage);
27 }
28 
30  LLVMMemoryBufferRef MemBuf,
31  LLVMModuleRef *OutModule,
32  char **OutMessage) {
33  std::string Message;
34 
35  *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), *unwrap(ContextRef),
36  &Message));
37  if (!*OutModule) {
38  if (OutMessage)
39  *OutMessage = strdup(Message.c_str());
40  return 1;
41  }
42 
43  return 0;
44 }
45 
46 /* Reads a module from the specified path, returning via the OutModule parameter
47  a module provider which performs lazy deserialization. Returns 0 on success.
48  Optionally returns a human-readable error message via OutMessage. */
50  LLVMMemoryBufferRef MemBuf,
51  LLVMModuleRef *OutM,
52  char **OutMessage) {
53  std::string Message;
54 
55  *OutM = wrap(getLazyBitcodeModule(unwrap(MemBuf), *unwrap(ContextRef),
56  &Message));
57  if (!*OutM) {
58  if (OutMessage)
59  *OutMessage = strdup(Message.c_str());
60  return 1;
61  }
62 
63  return 0;
64 
65 }
66 
68  char **OutMessage) {
70  OutMessage);
71 }
72 
73 /* Deprecated: Use LLVMGetBitcodeModuleInContext instead. */
75  LLVMMemoryBufferRef MemBuf,
76  LLVMModuleProviderRef *OutMP,
77  char **OutMessage) {
78  return LLVMGetBitcodeModuleInContext(ContextRef, MemBuf,
79  reinterpret_cast<LLVMModuleRef*>(OutMP),
80  OutMessage);
81 }
82 
83 /* Deprecated: Use LLVMGetBitcodeModule instead. */
85  LLVMModuleProviderRef *OutMP,
86  char **OutMessage) {
88  OutMP, OutMessage);
89 }
Module * getLazyBitcodeModule(MemoryBuffer *Buffer, LLVMContext &Context, std::string *ErrMsg=0)
int LLVMBool
Definition: Core.h:65
LLVMContext ** unwrap(LLVMContextRef *Tys)
Definition: LLVMContext.h:119
LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule, char **OutMessage)
Definition: BitReader.cpp:23
LLVMBool LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef *OutMP, char **OutMessage)
Definition: BitReader.cpp:84
LLVMBool LLVMGetBitcodeModuleProviderInContext(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef *OutMP, char **OutMessage)
Definition: BitReader.cpp:74
struct LLVMOpaqueMemoryBuffer * LLVMMemoryBufferRef
Definition: Core.h:122
struct LLVMOpaqueModuleProvider * LLVMModuleProviderRef
Definition: Core.h:115
LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule, char **OutMessage)
Definition: BitReader.cpp:29
struct LLVMOpaqueContext * LLVMContextRef
Definition: Core.h:72
LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, char **OutMessage)
Definition: BitReader.cpp:67
char *strdup(const char *s1);
LLVMContextRef * wrap(const LLVMContext **Tys)
Definition: LLVMContext.h:123
LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, char **OutMessage)
Definition: BitReader.cpp:49
Module * ParseBitcodeFile(MemoryBuffer *Buffer, LLVMContext &Context, std::string *ErrMsg=0)
struct LLVMOpaqueModule * LLVMModuleRef
Definition: Core.h:80
LLVMContextRef LLVMGetGlobalContext(void)
Definition: Core.cpp:76
LLVMContext & getGlobalContext()
Definition: LLVMContext.cpp:27