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
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 Metadata.
87 *
88 * This models llvm::Metadata.
89 */
90typedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
91
92/**
93 * Represents an LLVM Named Metadata Node.
94 *
95 * This models llvm::NamedMDNode.
96 */
97typedef 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 */
104typedef struct LLVMOpaqueValueMetadataEntry LLVMValueMetadataEntry;
105
106/**
107 * Represents an LLVM basic block builder.
108 *
109 * This models llvm::IRBuilder.
110 */
111typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
112
113/**
114 * Represents an LLVM debug info builder.
115 *
116 * This models llvm::DIBuilder.
117 */
118typedef 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 */
125typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
126
127/** @see llvm::PassManagerBase */
128typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
129
130/** @see llvm::PassRegistry */
131typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
132
133/**
134 * Used to get the users and usees of a Value.
135 *
136 * @see llvm::Use */
137typedef struct LLVMOpaqueUse *LLVMUseRef;
138
139/**
140 * Used to represent an attributes.
141 *
142 * @see llvm::Attribute
143 */
144typedef struct LLVMOpaqueAttributeRef *LLVMAttributeRef;
145
146/**
147 * @see llvm::DiagnosticInfo
148 */
149typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef;
150
151/**
152 * @see llvm::Comdat
153 */
154typedef struct LLVMComdat *LLVMComdatRef;
155
156/**
157 * @see llvm::Module::ModuleFlagEntry
158 */
159typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry;
160
161/**
162 * @see llvm::JITEventListener
163 */
164typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef;
165
166/**
167 * @}
168 */
169
170#ifdef __cplusplus
171}
172#endif
173
174#endif
175