1bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen/*===-- llvm-c/BitReader.h - BitReader Library C Interface ------*- C++ -*-===*\
2bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|*                                                                            *|
3bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|*                     The LLVM Compiler Infrastructure                       *|
4bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|*                                                                            *|
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner|* This file is distributed under the University of Illinois Open Source      *|
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner|* License. See LICENSE.TXT for details.                                      *|
7bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|*                                                                            *|
8bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|*===----------------------------------------------------------------------===*|
9bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|*                                                                            *|
10bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|* This header declares the C interface to libLLVMBitReader.a, which          *|
11bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|* implements input of the LLVM bitcode format.                               *|
12bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|*                                                                            *|
13bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|* Many exotic languages can interoperate with C code but have a harder time  *|
14bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|* with C++ due to name mangling. So in addition to C, this interface enables *|
15bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|* tools written in such languages.                                           *|
16bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen|*                                                                            *|
17bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen\*===----------------------------------------------------------------------===*/
18bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen
19bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen#ifndef LLVM_C_BITCODEREADER_H
20bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen#define LLVM_C_BITCODEREADER_H
21bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen
22bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen#include "llvm-c/Core.h"
23bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen
24bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen#ifdef __cplusplus
25bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksenextern "C" {
26bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen#endif
27bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen
286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCBitReader Bit Reader
306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @ingroup LLVMC
316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
34bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen
35da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* Builds a module from the bitcode in the specified memory buffer, returning a
36da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen   reference to the module via the OutModule parameter. Returns 0 on success.
37e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi   Optionally returns a human-readable error message via OutMessage. */
38d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf,
39d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                          LLVMModuleRef *OutModule, char **OutMessage);
40da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
41d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef,
42d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                   LLVMMemoryBufferRef MemBuf,
43d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                   LLVMModuleRef *OutModule, char **OutMessage);
44c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson
45df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar/** Reads a module from the specified path, returning via the OutMP parameter
46df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar    a module provider which performs lazy deserialization. Returns 0 on success.
47e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi    Optionally returns a human-readable error message via OutMessage. */
48df7df075b723e926e51555bf5aff6e231279a479Erick TryzelaarLLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef,
49df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar                                       LLVMMemoryBufferRef MemBuf,
50df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar                                       LLVMModuleRef *OutM,
51df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar                                       char **OutMessage);
52df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar
53df7df075b723e926e51555bf5aff6e231279a479Erick TryzelaarLLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
54df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar                              char **OutMessage);
55d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner
56df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar
57df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar/** Deprecated: Use LLVMGetBitcodeModuleInContext instead. */
58d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMGetBitcodeModuleProviderInContext(LLVMContextRef ContextRef,
59d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                               LLVMMemoryBufferRef MemBuf,
60d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                               LLVMModuleProviderRef *OutMP,
61d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                               char **OutMessage);
62c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson
63df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar/** Deprecated: Use LLVMGetBitcodeModule instead. */
64df7df075b723e926e51555bf5aff6e231279a479Erick TryzelaarLLVMBool LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf,
65df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar                                      LLVMModuleProviderRef *OutMP,
66df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar                                      char **OutMessage);
67bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen
686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
72bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen#ifdef __cplusplus
73bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen}
74bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen#endif
75bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen
76bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen#endif
77