1 /*===-- llvm-c/Support.h - C Interface Types declarations ---------*- C -*-===*\
2 |*                                                                            *|
3 |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
4 |* Exceptions.                                                                *|
5 |* See https://llvm.org/LICENSE.txt for license information.                  *|
6 |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
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 #include "llvm-c/ExternC.h"
19 
20 LLVM_C_EXTERN_C_BEGIN
21 
22 /**
23  * @defgroup LLVMCSupportTypes Types and Enumerations
24  *
25  * @{
26  */
27 
28 typedef int LLVMBool;
29 
30 /* Opaque types. */
31 
32 /**
33  * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore
34  * parameters must be passed as base types. Despite the declared types, most
35  * of the functions provided operate only on branches of the type hierarchy.
36  * The declared parameter names are descriptive and specify which type is
37  * required. Additionally, each type hierarchy is documented along with the
38  * functions that operate upon it. For more detail, refer to LLVM's C++ code.
39  * If in doubt, refer to Core.cpp, which performs parameter downcasts in the
40  * form unwrap<RequiredType>(Param).
41  */
42 
43 /**
44  * Used to pass regions of memory through LLVM interfaces.
45  *
46  * @see llvm::MemoryBuffer
47  */
48 typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
49 
50 /**
51  * The top-level container for all LLVM global data. See the LLVMContext class.
52  */
53 typedef struct LLVMOpaqueContext *LLVMContextRef;
54 
55 /**
56  * The top-level container for all other LLVM Intermediate Representation (IR)
57  * objects.
58  *
59  * @see llvm::Module
60  */
61 typedef struct LLVMOpaqueModule *LLVMModuleRef;
62 
63 /**
64  * Each value in the LLVM IR has a type, an LLVMTypeRef.
65  *
66  * @see llvm::Type
67  */
68 typedef struct LLVMOpaqueType *LLVMTypeRef;
69 
70 /**
71  * Represents an individual value in LLVM IR.
72  *
73  * This models llvm::Value.
74  */
75 typedef struct LLVMOpaqueValue *LLVMValueRef;
76 
77 /**
78  * Represents a basic block of instructions in LLVM IR.
79  *
80  * This models llvm::BasicBlock.
81  */
82 typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
83 
84 /**
85  * Represents an LLVM Metadata.
86  *
87  * This models llvm::Metadata.
88  */
89 typedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
90 
91 /**
92  * Represents an LLVM Named Metadata Node.
93  *
94  * This models llvm::NamedMDNode.
95  */
96 typedef struct LLVMOpaqueNamedMDNode *LLVMNamedMDNodeRef;
97 
98 /**
99  * Represents an entry in a Global Object's metadata attachments.
100  *
101  * This models std::pair<unsigned, MDNode *>
102  */
103 typedef struct LLVMOpaqueValueMetadataEntry LLVMValueMetadataEntry;
104 
105 /**
106  * Represents an LLVM basic block builder.
107  *
108  * This models llvm::IRBuilder.
109  */
110 typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
111 
112 /**
113  * Represents an LLVM debug info builder.
114  *
115  * This models llvm::DIBuilder.
116  */
117 typedef struct LLVMOpaqueDIBuilder *LLVMDIBuilderRef;
118 
119 /**
120  * Interface used to provide a module to JIT or interpreter.
121  * This is now just a synonym for llvm::Module, but we have to keep using the
122  * different type to keep binary compatibility.
123  */
124 typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
125 
126 /** @see llvm::PassManagerBase */
127 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
128 
129 /** @see llvm::PassRegistry */
130 typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
131 
132 /**
133  * Used to get the users and usees of a Value.
134  *
135  * @see llvm::Use */
136 typedef struct LLVMOpaqueUse *LLVMUseRef;
137 
138 /**
139  * Used to represent an attributes.
140  *
141  * @see llvm::Attribute
142  */
143 typedef struct LLVMOpaqueAttributeRef *LLVMAttributeRef;
144 
145 /**
146  * @see llvm::DiagnosticInfo
147  */
148 typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef;
149 
150 /**
151  * @see llvm::Comdat
152  */
153 typedef struct LLVMComdat *LLVMComdatRef;
154 
155 /**
156  * @see llvm::Module::ModuleFlagEntry
157  */
158 typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry;
159 
160 /**
161  * @see llvm::JITEventListener
162  */
163 typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef;
164 
165 /**
166  * @see llvm::object::Binary
167  */
168 typedef struct LLVMOpaqueBinary *LLVMBinaryRef;
169 
170 /**
171  * @}
172  */
173 
174 LLVM_C_EXTERN_C_END
175 
176 #endif
177