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 C interface to LLVM. *| |
11 | |* *| |
12 | \*===----------------------------------------------------------------------===*/ |
13 | |
14 | #ifndef LLVM_C_TYPES_H |
15 | #define LLVM_C_TYPES_H |
16 | |
17 | #include "llvm-c/DataTypes.h" |
18 | |
19 | #ifdef __cplusplus |
20 | extern "C" { |
21 | #endif |
22 | |
23 | /** |
24 | * @defgroup LLVMCSupportTypes Types and Enumerations |
25 | * |
26 | * @{ |
27 | */ |
28 | |
29 | typedef 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 | */ |
49 | typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef; |
50 | |
51 | /** |
52 | * The top-level container for all LLVM global data. See the LLVMContext class. |
53 | */ |
54 | typedef 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 | */ |
62 | typedef struct LLVMOpaqueModule *LLVMModuleRef; |
63 | |
64 | /** |
65 | * Each value in the LLVM IR has a type, an LLVMTypeRef. |
66 | * |
67 | * @see llvm::Type |
68 | */ |
69 | typedef struct LLVMOpaqueType *LLVMTypeRef; |
70 | |
71 | /** |
72 | * Represents an individual value in LLVM IR. |
73 | * |
74 | * This models llvm::Value. |
75 | */ |
76 | typedef struct LLVMOpaqueValue *LLVMValueRef; |
77 | |
78 | /** |
79 | * Represents a basic block of instructions in LLVM IR. |
80 | * |
81 | * This models llvm::BasicBlock. |
82 | */ |
83 | typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef; |
84 | |
85 | /** |
86 | * Represents an LLVM Metadata. |
87 | * |
88 | * This models llvm::Metadata. |
89 | */ |
90 | typedef struct LLVMOpaqueMetadata *LLVMMetadataRef; |
91 | |
92 | /** |
93 | * Represents an LLVM Named Metadata Node. |
94 | * |
95 | * This models llvm::NamedMDNode. |
96 | */ |
97 | typedef struct LLVMOpaqueNamedMDNode *LLVMNamedMDNodeRef; |
98 | |
99 | /** |
100 | * Represents an entry in a Global Object's metadata attachments. |
101 | * |
102 | * This models std::pair<unsigned, MDNode *> |
103 | */ |
104 | typedef struct LLVMOpaqueValueMetadataEntry LLVMValueMetadataEntry; |
105 | |
106 | /** |
107 | * Represents an LLVM basic block builder. |
108 | * |
109 | * This models llvm::IRBuilder. |
110 | */ |
111 | typedef struct LLVMOpaqueBuilder *LLVMBuilderRef; |
112 | |
113 | /** |
114 | * Represents an LLVM debug info builder. |
115 | * |
116 | * This models llvm::DIBuilder. |
117 | */ |
118 | typedef struct LLVMOpaqueDIBuilder *LLVMDIBuilderRef; |
119 | |
120 | /** |
121 | * Interface used to provide a module to JIT or interpreter. |
122 | * This is now just a synonym for llvm::Module, but we have to keep using the |
123 | * different type to keep binary compatibility. |
124 | */ |
125 | typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef; |
126 | |
127 | /** @see llvm::PassManagerBase */ |
128 | typedef struct LLVMOpaquePassManager *LLVMPassManagerRef; |
129 | |
130 | /** @see llvm::PassRegistry */ |
131 | typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef; |
132 | |
133 | /** |
134 | * Used to get the users and usees of a Value. |
135 | * |
136 | * @see llvm::Use */ |
137 | typedef struct LLVMOpaqueUse *LLVMUseRef; |
138 | |
139 | /** |
140 | * Used to represent an attributes. |
141 | * |
142 | * @see llvm::Attribute |
143 | */ |
144 | typedef struct LLVMOpaqueAttributeRef *LLVMAttributeRef; |
145 | |
146 | /** |
147 | * @see llvm::DiagnosticInfo |
148 | */ |
149 | typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef; |
150 | |
151 | /** |
152 | * @see llvm::Comdat |
153 | */ |
154 | typedef struct LLVMComdat *LLVMComdatRef; |
155 | |
156 | /** |
157 | * @see llvm::Module::ModuleFlagEntry |
158 | */ |
159 | typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry; |
160 | |
161 | /** |
162 | * @see llvm::JITEventListener |
163 | */ |
164 | typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef; |
165 | |
166 | /** |
167 | * @} |
168 | */ |
169 | |
170 | #ifdef __cplusplus |
171 | } |
172 | #endif |
173 | |
174 | #endif |
175 | |