| 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 | /** | 
| 130 |  * Used to get the users and usees of a Value. | 
| 131 |  * | 
| 132 |  * @see llvm::Use */ | 
| 133 | typedef struct LLVMOpaqueUse *LLVMUseRef; | 
| 134 |  | 
| 135 | /** | 
| 136 |  * Used to represent an attributes. | 
| 137 |  * | 
| 138 |  * @see llvm::Attribute | 
| 139 |  */ | 
| 140 | typedef struct LLVMOpaqueAttributeRef *LLVMAttributeRef; | 
| 141 |  | 
| 142 | /** | 
| 143 |  * @see llvm::DiagnosticInfo | 
| 144 |  */ | 
| 145 | typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef; | 
| 146 |  | 
| 147 | /** | 
| 148 |  * @see llvm::Comdat | 
| 149 |  */ | 
| 150 | typedef struct LLVMComdat *LLVMComdatRef; | 
| 151 |  | 
| 152 | /** | 
| 153 |  * @see llvm::Module::ModuleFlagEntry | 
| 154 |  */ | 
| 155 | typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry; | 
| 156 |  | 
| 157 | /** | 
| 158 |  * @see llvm::JITEventListener | 
| 159 |  */ | 
| 160 | typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef; | 
| 161 |  | 
| 162 | /** | 
| 163 |  * @see llvm::object::Binary | 
| 164 |  */ | 
| 165 | typedef struct LLVMOpaqueBinary *LLVMBinaryRef; | 
| 166 |  | 
| 167 | /** | 
| 168 |  * @} | 
| 169 |  */ | 
| 170 |  | 
| 171 | LLVM_C_EXTERN_C_END | 
| 172 |  | 
| 173 | #endif | 
| 174 |  |