blob c534addf (9763B) - Raw
1 /* 2 * Copyright (c) 2019 Andrew Kelley 3 * 4 * This file is part of zig, which is MIT licensed. 5 * See http://opensource.org/licenses/MIT 6 */ 7 8 #ifndef ZIG_ZIG_CLANG_H 9 #define ZIG_ZIG_CLANG_H 10 11 #ifdef __cplusplus 12 #define ZIG_EXTERN_C extern "C" 13 #else 14 #define ZIG_EXTERN_C 15 #endif 16 17 // ATTENTION: If you modify this file, be sure to update the corresponding 18 // extern function declarations in the self-hosted compiler. 19 // Note: not yet, we don't have the corresponding clang.zig yet. 20 21 struct ZigClangSourceLocation { 22 unsigned ID; 23 }; 24 25 struct ZigClangQualType { 26 void *ptr; 27 }; 28 29 struct ZigClangAPValue; 30 struct ZigClangASTContext; 31 struct ZigClangASTUnit; 32 struct ZigClangArraySubscriptExpr; 33 struct ZigClangArrayType; 34 struct ZigClangAttributedType; 35 struct ZigClangBinaryOperator; 36 struct ZigClangBreakStmt; 37 struct ZigClangBuiltinType; 38 struct ZigClangCStyleCastExpr; 39 struct ZigClangCallExpr; 40 struct ZigClangCaseStmt; 41 struct ZigClangCompoundAssignOperator; 42 struct ZigClangCompoundStmt; 43 struct ZigClangConditionalOperator; 44 struct ZigClangConstantArrayType; 45 struct ZigClangContinueStmt; 46 struct ZigClangDecayedType; 47 struct ZigClangDecl; 48 struct ZigClangDeclRefExpr; 49 struct ZigClangDeclStmt; 50 struct ZigClangDefaultStmt; 51 struct ZigClangDiagnosticOptions; 52 struct ZigClangDiagnosticsEngine; 53 struct ZigClangDoStmt; 54 struct ZigClangElaboratedType; 55 struct ZigClangEnumConstantDecl; 56 struct ZigClangEnumDecl; 57 struct ZigClangEnumType; 58 struct ZigClangExpr; 59 struct ZigClangFieldDecl; 60 struct ZigClangFileID; 61 struct ZigClangForStmt; 62 struct ZigClangFullSourceLoc; 63 struct ZigClangFunctionDecl; 64 struct ZigClangFunctionProtoType; 65 struct ZigClangIfStmt; 66 struct ZigClangImplicitCastExpr; 67 struct ZigClangIncompleteArrayType; 68 struct ZigClangIntegerLiteral; 69 struct ZigClangMacroDefinitionRecord; 70 struct ZigClangMemberExpr; 71 struct ZigClangNamedDecl; 72 struct ZigClangNone; 73 struct ZigClangPCHContainerOperations; 74 struct ZigClangParenExpr; 75 struct ZigClangParenType; 76 struct ZigClangParmVarDecl; 77 struct ZigClangPointerType; 78 struct ZigClangPreprocessedEntity; 79 struct ZigClangRecordDecl; 80 struct ZigClangRecordType; 81 struct ZigClangReturnStmt; 82 struct ZigClangSkipFunctionBodiesScope; 83 struct ZigClangSourceManager; 84 struct ZigClangSourceRange; 85 struct ZigClangStmt; 86 struct ZigClangStorageClass; 87 struct ZigClangStringLiteral; 88 struct ZigClangStringRef; 89 struct ZigClangSwitchStmt; 90 struct ZigClangTagDecl; 91 struct ZigClangType; 92 struct ZigClangTypedefNameDecl; 93 struct ZigClangTypedefType; 94 struct ZigClangUnaryExprOrTypeTraitExpr; 95 struct ZigClangUnaryOperator; 96 struct ZigClangValueDecl; 97 struct ZigClangVarDecl; 98 struct ZigClangWhileStmt; 99 100 enum ZigClangBO { 101 ZigClangBO_PtrMemD, 102 ZigClangBO_PtrMemI, 103 ZigClangBO_Mul, 104 ZigClangBO_Div, 105 ZigClangBO_Rem, 106 ZigClangBO_Add, 107 ZigClangBO_Sub, 108 ZigClangBO_Shl, 109 ZigClangBO_Shr, 110 ZigClangBO_Cmp, 111 ZigClangBO_LT, 112 ZigClangBO_GT, 113 ZigClangBO_LE, 114 ZigClangBO_GE, 115 ZigClangBO_EQ, 116 ZigClangBO_NE, 117 ZigClangBO_And, 118 ZigClangBO_Xor, 119 ZigClangBO_Or, 120 ZigClangBO_LAnd, 121 ZigClangBO_LOr, 122 ZigClangBO_Assign, 123 ZigClangBO_MulAssign, 124 ZigClangBO_DivAssign, 125 ZigClangBO_RemAssign, 126 ZigClangBO_AddAssign, 127 ZigClangBO_SubAssign, 128 ZigClangBO_ShlAssign, 129 ZigClangBO_ShrAssign, 130 ZigClangBO_AndAssign, 131 ZigClangBO_XorAssign, 132 ZigClangBO_OrAssign, 133 ZigClangBO_Comma, 134 }; 135 136 enum ZigClangUO { 137 ZigClangUO_PostInc, 138 ZigClangUO_PostDec, 139 ZigClangUO_PreInc, 140 ZigClangUO_PreDec, 141 ZigClangUO_AddrOf, 142 ZigClangUO_Deref, 143 ZigClangUO_Plus, 144 ZigClangUO_Minus, 145 ZigClangUO_Not, 146 ZigClangUO_LNot, 147 ZigClangUO_Real, 148 ZigClangUO_Imag, 149 ZigClangUO_Extension, 150 ZigClangUO_Coawait, 151 }; 152 153 //struct ZigClangCC_AAPCS; 154 //struct ZigClangCC_AAPCS_VFP; 155 //struct ZigClangCC_C; 156 //struct ZigClangCC_IntelOclBicc; 157 //struct ZigClangCC_OpenCLKernel; 158 //struct ZigClangCC_PreserveAll; 159 //struct ZigClangCC_PreserveMost; 160 //struct ZigClangCC_SpirFunction; 161 //struct ZigClangCC_Swift; 162 //struct ZigClangCC_Win64; 163 //struct ZigClangCC_X86FastCall; 164 //struct ZigClangCC_X86Pascal; 165 //struct ZigClangCC_X86RegCall; 166 //struct ZigClangCC_X86StdCall; 167 //struct ZigClangCC_X86ThisCall; 168 //struct ZigClangCC_X86VectorCall; 169 //struct ZigClangCC_X86_64SysV; 170 171 //struct ZigClangCK_ARCConsumeObject; 172 //struct ZigClangCK_ARCExtendBlockObject; 173 //struct ZigClangCK_ARCProduceObject; 174 //struct ZigClangCK_ARCReclaimReturnedObject; 175 //struct ZigClangCK_AddressSpaceConversion; 176 //struct ZigClangCK_AnyPointerToBlockPointerCast; 177 //struct ZigClangCK_ArrayToPointerDecay; 178 //struct ZigClangCK_AtomicToNonAtomic; 179 //struct ZigClangCK_BaseToDerived; 180 //struct ZigClangCK_BaseToDerivedMemberPointer; 181 //struct ZigClangCK_BitCast; 182 //struct ZigClangCK_BlockPointerToObjCPointerCast; 183 //struct ZigClangCK_BooleanToSignedIntegral; 184 //struct ZigClangCK_BuiltinFnToFnPtr; 185 //struct ZigClangCK_CPointerToObjCPointerCast; 186 //struct ZigClangCK_ConstructorConversion; 187 //struct ZigClangCK_CopyAndAutoreleaseBlockObject; 188 //struct ZigClangCK_Dependent; 189 //struct ZigClangCK_DerivedToBase; 190 //struct ZigClangCK_DerivedToBaseMemberPointer; 191 //struct ZigClangCK_Dynamic; 192 //struct ZigClangCK_FloatingCast; 193 //struct ZigClangCK_FloatingComplexCast; 194 //struct ZigClangCK_FloatingComplexToBoolean; 195 //struct ZigClangCK_FloatingComplexToIntegralComplex; 196 //struct ZigClangCK_FloatingComplexToReal; 197 //struct ZigClangCK_FloatingRealToComplex; 198 //struct ZigClangCK_FloatingToBoolean; 199 //struct ZigClangCK_FloatingToIntegral; 200 //struct ZigClangCK_FunctionToPointerDecay; 201 //struct ZigClangCK_IntToOCLSampler; 202 //struct ZigClangCK_IntegralCast; 203 //struct ZigClangCK_IntegralComplexCast; 204 //struct ZigClangCK_IntegralComplexToBoolean; 205 //struct ZigClangCK_IntegralComplexToFloatingComplex; 206 //struct ZigClangCK_IntegralComplexToReal; 207 //struct ZigClangCK_IntegralRealToComplex; 208 //struct ZigClangCK_IntegralToBoolean; 209 //struct ZigClangCK_IntegralToFloating; 210 //struct ZigClangCK_IntegralToPointer; 211 //struct ZigClangCK_LValueBitCast; 212 //struct ZigClangCK_LValueToRValue; 213 //struct ZigClangCK_MemberPointerToBoolean; 214 //struct ZigClangCK_NoOp; 215 //struct ZigClangCK_NonAtomicToAtomic; 216 //struct ZigClangCK_NullToMemberPointer; 217 //struct ZigClangCK_NullToPointer; 218 //struct ZigClangCK_ObjCObjectLValueCast; 219 //struct ZigClangCK_PointerToBoolean; 220 //struct ZigClangCK_PointerToIntegral; 221 //struct ZigClangCK_ReinterpretMemberPointer; 222 //struct ZigClangCK_ToUnion; 223 //struct ZigClangCK_ToVoid; 224 //struct ZigClangCK_UncheckedDerivedToBase; 225 //struct ZigClangCK_UserDefinedConversion; 226 //struct ZigClangCK_VectorSplat; 227 //struct ZigClangCK_ZeroToOCLEvent; 228 //struct ZigClangCK_ZeroToOCLQueue; 229 230 //struct ZigClangETK_Class; 231 //struct ZigClangETK_Enum; 232 //struct ZigClangETK_Interface; 233 //struct ZigClangETK_None; 234 //struct ZigClangETK_Struct; 235 //struct ZigClangETK_Typename; 236 //struct ZigClangETK_Union; 237 238 //struct ZigClangSC_None; 239 //struct ZigClangSC_PrivateExtern; 240 //struct ZigClangSC_Static; 241 242 //struct ZigClangTU_Complete; 243 244 ZIG_EXTERN_C ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const ZigClangSourceManager *, 245 ZigClangSourceLocation Loc); 246 ZIG_EXTERN_C const char *ZigClangSourceManager_getFilename(const ZigClangSourceManager *, 247 ZigClangSourceLocation SpellingLoc); 248 ZIG_EXTERN_C unsigned ZigClangSourceManager_getSpellingLineNumber(const ZigClangSourceManager *, 249 ZigClangSourceLocation Loc); 250 ZIG_EXTERN_C unsigned ZigClangSourceManager_getSpellingColumnNumber(const ZigClangSourceManager *, 251 ZigClangSourceLocation Loc); 252 ZIG_EXTERN_C const char* ZigClangSourceManager_getCharacterData(const ZigClangSourceManager *, 253 ZigClangSourceLocation SL); 254 255 ZIG_EXTERN_C ZigClangQualType ZigClangASTContext_getPointerType(const ZigClangASTContext*, ZigClangQualType T); 256 257 ZIG_EXTERN_C ZigClangASTContext *ZigClangASTUnit_getASTContext(ZigClangASTUnit *); 258 ZIG_EXTERN_C ZigClangSourceManager *ZigClangASTUnit_getSourceManager(ZigClangASTUnit *); 259 ZIG_EXTERN_C bool ZigClangASTUnit_visitLocalTopLevelDecls(ZigClangASTUnit *, void *context, 260 bool (*Fn)(void *context, const ZigClangDecl *decl)); 261 262 ZIG_EXTERN_C const ZigClangRecordDecl *ZigClangRecordType_getDecl(const ZigClangRecordType *record_ty); 263 ZIG_EXTERN_C const ZigClangEnumDecl *ZigClangEnumType_getDecl(const ZigClangEnumType *record_ty); 264 265 ZIG_EXTERN_C const ZigClangTagDecl *ZigClangRecordDecl_getCanonicalDecl(const ZigClangRecordDecl *record_decl); 266 ZIG_EXTERN_C const ZigClangTagDecl *ZigClangEnumDecl_getCanonicalDecl(const ZigClangEnumDecl *); 267 ZIG_EXTERN_C const ZigClangTypedefNameDecl *ZigClangTypedefNameDecl_getCanonicalDecl(const ZigClangTypedefNameDecl *); 268 269 ZIG_EXTERN_C const ZigClangRecordDecl *ZigClangRecordDecl_getDefinition(const ZigClangRecordDecl *); 270 ZIG_EXTERN_C const ZigClangEnumDecl *ZigClangEnumDecl_getDefinition(const ZigClangEnumDecl *); 271 272 ZIG_EXTERN_C ZigClangSourceLocation ZigClangRecordDecl_getLocation(const ZigClangRecordDecl *); 273 ZIG_EXTERN_C ZigClangSourceLocation ZigClangEnumDecl_getLocation(const ZigClangEnumDecl *); 274 ZIG_EXTERN_C ZigClangSourceLocation ZigClangTypedefNameDecl_getLocation(const ZigClangTypedefNameDecl *); 275 276 ZIG_EXTERN_C bool ZigClangRecordDecl_isUnion(const ZigClangRecordDecl *record_decl); 277 ZIG_EXTERN_C bool ZigClangRecordDecl_isStruct(const ZigClangRecordDecl *record_decl); 278 ZIG_EXTERN_C bool ZigClangRecordDecl_isAnonymousStructOrUnion(const ZigClangRecordDecl *record_decl); 279 280 ZIG_EXTERN_C ZigClangQualType ZigClangEnumDecl_getIntegerType(const ZigClangEnumDecl *); 281 282 ZIG_EXTERN_C const char *ZigClangDecl_getName_bytes_begin(const ZigClangDecl *decl); 283 284 ZIG_EXTERN_C bool ZigClangSourceLocation_eq(ZigClangSourceLocation a, ZigClangSourceLocation b); 285 286 ZIG_EXTERN_C const ZigClangTypedefNameDecl *ZigClangTypedefType_getDecl(const ZigClangTypedefType *); 287 ZIG_EXTERN_C ZigClangQualType ZigClangTypedefNameDecl_getUnderlyingType(const ZigClangTypedefNameDecl *); 288 #endif