1/*===-- llvm-c/Support.h - C Interface Types declarations ---------*- C -*-===*\
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|* This file defines types used by the the C interface to LLVM.               *|
11|*                                                                            *|
12\*===----------------------------------------------------------------------===*/
13
14#ifndef LLVM_C_TYPES_H
15#define LLVM_C_TYPES_H
16
17#include "llvm/Support/DataTypes.h"
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23/**
24 * @defgroup LLVMCSupportTypes Types and Enumerations
25 *
26 * @{
27 */
28
29typedef int LLVMBool;
30
31/* Opaque types. */
32
33/**
34 * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore
35 * parameters must be passed as base types. Despite the declared types, most
36 * of the functions provided operate only on branches of the type hierarchy.
37 * The declared parameter names are descriptive and specify which type is
38 * required. Additionally, each type hierarchy is documented along with the
39 * functions that operate upon it. For more detail, refer to LLVM's C++ code.
40 * If in doubt, refer to Core.cpp, which performs parameter downcasts in the
41 * form unwrap<RequiredType>(Param).
42 */
43
44/**
45 * Used to pass regions of memory through LLVM interfaces.
46 *
47 * @see llvm::MemoryBuffer
48 */
49typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
50
51/**
52 * The top-level container for all LLVM global data. See the LLVMContext class.
53 */
54typedef struct LLVMOpaqueContext *LLVMContextRef;
55
56/**
57 * The top-level container for all other LLVM Intermediate Representation (IR)
58 * objects.
59 *
60 * @see llvm::Module
61 */
62typedef struct LLVMOpaqueModule *LLVMModuleRef;
63
64/**
65 * Each value in the LLVM IR has a type, an LLVMTypeRef.
66 *
67 * @see llvm::Type
68 */
69typedef struct LLVMOpaqueType *LLVMTypeRef;
70
71/**
72 * Represents an individual value in LLVM IR.
73 *
74 * This models llvm::Value.
75 */
76typedef struct LLVMOpaqueValue *LLVMValueRef;
77
78/**
79 * Represents a basic block of instructions in LLVM IR.
80 *
81 * This models llvm::BasicBlock.
82 */
83typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
84
85/**
86 * Represents an LLVM basic block builder.
87 *
88 * This models llvm::IRBuilder.
89 */
90typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
91
92/**
93 * Interface used to provide a module to JIT or interpreter.
94 * This is now just a synonym for llvm::Module, but we have to keep using the
95 * different type to keep binary compatibility.
96 */
97typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
98
99/** @see llvm::PassManagerBase */
100typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
101
102/** @see llvm::PassRegistry */
103typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
104
105/**
106 * Used to get the users and usees of a Value.
107 *
108 * @see llvm::Use */
109typedef struct LLVMOpaqueUse *LLVMUseRef;
110
111/**
112 * @see llvm::DiagnosticInfo
113 */
114typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef;
115
116/**
117 * @}
118 */
119
120#ifdef __cplusplus
121}
122#endif
123
124#endif
125