diff --git a/clang/bindings/python/clang/clang_c.pxd b/clang/bindings/python/clang/clang_c.pxd new file mode 100644 --- /dev/null +++ b/clang/bindings/python/clang/clang_c.pxd @@ -0,0 +1,1624 @@ +#cython: language_level=3 + +from libc.time cimport time_t + +cdef extern from "clang-c/CXString.h": + ctypedef struct CXString: + const void* data + unsigned private_flags + + ctypedef struct CXStringSet: + CXString* Strings + unsigned Count + + const char *clang_getCString(CXString string) + void clang_disposeString(CXString string) + void clang_disposeStringSet(CXStringSet *set) + +cdef extern from "clang-c/CXErrorCode.h": + ctypedef enum CXErrorCode: + CXError_Success = 0, + CXError_Failure = 1, + CXError_Crashed = 2, + CXError_InvalidArguments = 3, + CXError_ASTReadError = 4 + +cdef extern from "clang-c/CXFile.h": + ctypedef void* CXFile + + CXString clang_getFileName(CXFile SFile) + time_t clang_getFileTime(CXFile SFile) + + ctypedef struct CXFileUniqueID: + unsigned long long data[3] + + int clang_getFileUniqueID(CXFile file, CXFileUniqueID *outID) + int clang_File_isEqual(CXFile file1, CXFile file2) + CXString clang_File_tryGetRealPathName(CXFile file) + +cdef extern from "clang-c/BuildSystem.h": + unsigned long long clang_getBuildSessionTimestamp() + + ctypedef struct CXVirtualFileOverlayImpl: + pass + ctypedef CXVirtualFileOverlayImpl* CXVirtualFileOverlay + + CXVirtualFileOverlay clang_VirtualFileOverlay_create(unsigned options) + CXErrorCode clang_VirtualFileOverlay_addFileMapping(CXVirtualFileOverlay, const char *virtualPath, + const char *realPath) + CXErrorCode clang_VirtualFileOverlay_setCaseSensitivity(CXVirtualFileOverlay, int caseSensitive) + CXErrorCode clang_VirtualFileOverlay_writeToBuffer(CXVirtualFileOverlay, unsigned options, char ** out_buffer_ptr, + unsigned *out_buffer_size) + void clang_free(void *buffer) + void clang_VirtualFileOverlay_dispose(CXVirtualFileOverlay) + + ctypedef struct CXModuleMapDescriptorImpl: + pass + ctypedef CXModuleMapDescriptorImpl* CXModuleMapDescriptor + + CXModuleMapDescriptor clang_ModuleMapDescriptor_create(unsigned options) + CXErrorCode clang_ModuleMapDescriptor_setFrameworkModuleName(CXModuleMapDescriptor, const char *name) + CXErrorCode clang_ModuleMapDescriptor_setUmbrellaHeader(CXModuleMapDescriptor, const char *name) + CXErrorCode clang_ModuleMapDescriptor_writeToBuffer(CXModuleMapDescriptor, unsigned options, + char **out_buffer_ptr, unsigned *out_buffer_size) + void clang_ModuleMapDescriptor_dispose(CXModuleMapDescriptor) + +cdef extern from "clang-c/CXDiagnostic.h": + enum CXDiagnosticSeverity: + CXDiagnostic_Ignored = 0, + CXDiagnostic_Note = 1, + CXDiagnostic_Warning = 2 + CXDiagnostic_Error = 3 + CXDiagnostic_Fatal = 4 + + ctypedef void *CXDiagnostic + ctypedef void *CXDiagnosticSet + + unsigned clang_getNumDiagnosticsInSet(CXDiagnosticSet Diags) + CXDiagnostic clang_getDiagnosticInSet(CXDiagnosticSet Diags, unsigned Index) + + enum CXLoadDiag_Error: + CXLoadDiag_None = 0 + CXLoadDiag_Unknown = 1 + CXLoadDiag_CannotLoad = 2 + CXLoadDiag_InvalidFile = 3 + + CXDiagnosticSet clang_loadDiagnostics(const char *file, CXLoadDiag_Error *error, CXString *errorString) + void clang_disposeDiagnosticSet(CXDiagnosticSet Diags) + CXDiagnosticSet clang_getChildDiagnostics(CXDiagnostic D) + void clang_disposeDiagnostic(CXDiagnostic Diagnostic) + enum CXDiagnosticDisplayOptions: + CXDiagnostic_DisplaySourceLocation = 0x01, + CXDiagnostic_DisplayColumn = 0x02, + CXDiagnostic_DisplaySourceRanges = 0x04, + CXDiagnostic_DisplayOption = 0x08, + CXDiagnostic_DisplayCategoryId = 0x10, + CXDiagnostic_DisplayCategoryName = 0x20 + + CXString clang_formatDiagnostic(CXDiagnostic Diagnostic, unsigned Options) + unsigned clang_defaultDiagnosticDisplayOptions() + CXDiagnosticSeverity clang_getDiagnosticSeverity(CXDiagnostic) + CXSourceLocation clang_getDiagnosticLocation(CXDiagnostic) + CXString clang_getDiagnosticSpelling(CXDiagnostic) + CXString clang_getDiagnosticOption(CXDiagnostic Diag, CXString *Disable) + unsigned clang_getDiagnosticCategory(CXDiagnostic) + CXString clang_getDiagnosticCategoryName(unsigned Category) + CXString clang_getDiagnosticCategoryText(CXDiagnostic) + unsigned clang_getDiagnosticNumRanges(CXDiagnostic) + CXSourceRange clang_getDiagnosticRange(CXDiagnostic Diagnostic, unsigned Range) + unsigned clang_getDiagnosticNumFixIts(CXDiagnostic Diagnostic) + CXString clang_getDiagnosticFixIt(CXDiagnostic Diagnostic, unsigned FixIt, CXSourceRange *ReplacementRange) + +cdef extern from "clang-c/CXSourceLocation.h": + ctypedef struct CXSourceLocation: + const void *ptr_data[2] + unsigned int_data + + ctypedef struct CXSourceRange: + const void * ptr_data[2] + unsigned begin_int_data + unsigned end_int_data + + CXSourceLocation clang_getNullLocation() + unsigned clang_equalLocations(CXSourceLocation loc1, CXSourceLocation loc2) + int clang_Location_isInSystemHeader(CXSourceLocation location) + int clang_Location_isFromMainFile(CXSourceLocation location) + CXSourceRange clang_getNullRange() + CXSourceRange clang_getRange(CXSourceLocation begin, CXSourceLocation end) + unsigned clang_equalRanges(CXSourceRange range1, CXSourceRange range2) + int clang_Range_isNull(CXSourceRange range) + void clang_getExpansionLocation(CXSourceLocation location, CXFile *file, unsigned *line, unsigned *column, + unsigned *offset) + void clang_getPresumedLocation(CXSourceLocation location, CXString *filename, unsigned *line, unsigned *column) + void clang_getInstantiationLocation(CXSourceLocation location, CXFile *file, unsigned *line, unsigned *column, + unsigned *offset) + void clang_getSpellingLocation(CXSourceLocation location, CXFile *file, unsigned *line, unsigned *column, + unsigned *offset) + void clang_getFileLocation(CXSourceLocation location, CXFile *file, unsigned *line, unsigned *column, + unsigned *offset) + CXSourceLocation clang_getRangeStart(CXSourceRange range) + CXSourceLocation clang_getRangeEnd(CXSourceRange range) + ctypedef struct CXSourceRangeList: + unsigned count + CXSourceRange* ranges + + void clang_disposeSourceRangeList(CXSourceRangeList *ranges) + +cdef extern from "clang-c/CXCompilationDatabase.h": + ctypedef void* CXCompilationDatabase + ctypedef void* CXCompileCommands + ctypedef void* CXCompileCommand + + ctypedef enum CXCompilationDatabase_Error: + CXCompilationDatabase_NoError = 0, + CXCompilationDatabase_CanNotLoadDatabase = 1 + + CXCompilationDatabase clang_CompilationDatabase_fromDirectory(const char *BuildDir, + CXCompilationDatabase_Error *ErrorCode) + + void clang_CompilationDatabase_dispose(CXCompilationDatabase) + CXCompileCommands clang_CompilationDatabase_getCompileCommands(CXCompilationDatabase, const char *CompleteFileName) + CXCompileCommands clang_CompilationDatabase_getAllCompileCommands(CXCompilationDatabase) + void clang_CompileCommands_dispose(CXCompileCommands) + unsigned clang_CompileCommands_getSize(CXCompileCommands) + CXCompileCommand clang_CompileCommands_getCommand(CXCompileCommands, unsigned I) + CXString clang_CompileCommand_getDirectory(CXCompileCommand) + CXString clang_CompileCommand_getFilename(CXCompileCommand) + unsigned clang_CompileCommand_getNumArgs(CXCompileCommand) + CXString clang_CompileCommand_getArg(CXCompileCommand, unsigned I) + unsigned clang_CompileCommand_getNumMappedSources(CXCompileCommand) + CXString clang_CompileCommand_getMappedSourcePath(CXCompileCommand, unsigned I) + CXString clang_CompileCommand_getMappedSourceContent(CXCompileCommand, unsigned I) + +cdef extern from "clang-c/Index.h": + ctypedef void *CXIndex + + ctypedef struct CXTargetInfoImpl: + pass + ctypedef CXTargetInfoImpl *CXTargetInfo + + ctypedef struct CXTranslationUnitImpl: + pass + ctypedef CXTranslationUnitImpl *CXTranslationUnit + + ctypedef void *CXClientData + + cdef struct CXUnsavedFile: + const char *Filename + const char *Contents + unsigned long Length + + enum CXAvailabilityKind: + CXAvailability_Available + CXAvailability_Deprecated + CXAvailability_NotAvailable + CXAvailability_NotAccessible + + ctypedef struct CXVersion: + int Major + int Minor + int Subminor + + enum CXCursor_ExceptionSpecificationKind: + CXCursor_ExceptionSpecificationKind_None + CXCursor_ExceptionSpecificationKind_DynamicNone + CXCursor_ExceptionSpecificationKind_Dynamic + CXCursor_ExceptionSpecificationKind_MSAny + CXCursor_ExceptionSpecificationKind_BasicNoexcept + CXCursor_ExceptionSpecificationKind_ComputedNoexcept + CXCursor_ExceptionSpecificationKind_Unevaluated + CXCursor_ExceptionSpecificationKind_Uninstantiated + CXCursor_ExceptionSpecificationKind_Unparsed + CXCursor_ExceptionSpecificationKind_NoThrow + + CXIndex clang_createIndex(int excludeDeclarationsFromPCH, int displayDiagnostics) + void clang_disposeIndex(CXIndex index) + + ctypedef enum CXGlobalOptFlags: + CXGlobalOpt_None = 0x0, + CXGlobalOpt_ThreadBackgroundPriorityForIndexing = 0x1, + CXGlobalOpt_ThreadBackgroundPriorityForEditing = 0x2, + CXGlobalOpt_ThreadBackgroundPriorityForAll = 0x3 + + void clang_CXIndex_setGlobalOptions(CXIndex, unsigned options) + unsigned clang_CXIndex_getGlobalOptions(CXIndex) + void clang_CXIndex_setInvocationEmissionPathOption(CXIndex, const char *Path) + unsigned clang_isFileMultipleIncludeGuarded(CXTranslationUnit tu, CXFile file) + CXFile clang_getFile(CXTranslationUnit tu, const char *file_name) + const char *clang_getFileContents(CXTranslationUnit tu, CXFile file, size_t *size) + + CXSourceLocation clang_getLocation(CXTranslationUnit tu, CXFile file, unsigned line, unsigned column) + CXSourceLocation clang_getLocationForOffset(CXTranslationUnit tu, CXFile file, unsigned offset) + CXSourceRangeList *clang_getSkippedRanges(CXTranslationUnit tu, CXFile file) + CXSourceRangeList *clang_getAllSkippedRanges(CXTranslationUnit tu) + unsigned clang_getNumDiagnostics(CXTranslationUnit Unit) + CXDiagnostic clang_getDiagnostic(CXTranslationUnit Unit, unsigned Index) + CXDiagnosticSet clang_getDiagnosticSetFromTU(CXTranslationUnit Unit) + CXString clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit) + CXTranslationUnit clang_createTranslationUnitFromSourceFile(CXIndex CIdx, const char *source_filename, + int num_clang_command_line_args, + const char * const * clang_command_line_args, + unsigned num_unsaved_files, + CXUnsavedFile *unsaved_files) + CXTranslationUnit clang_createTranslationUnit(CXIndex CIdx, const char *ast_filename) + CXErrorCode clang_createTranslationUnit2(CXIndex CIdx, const char *ast_filename, CXTranslationUnit *out_TU) + + enum CXTranslationUnit_Flags: + CXTranslationUnit_None = 0x0, + CXTranslationUnit_DetailedPreprocessingRecord = 0x01, + CXTranslationUnit_Incomplete = 0x02, + CXTranslationUnit_PrecompiledPreamble = 0x04, + CXTranslationUnit_CacheCompletionResults = 0x08, + CXTranslationUnit_ForSerialization = 0x10, + CXTranslationUnit_CXXChainedPCH = 0x20, + CXTranslationUnit_SkipFunctionBodies = 0x40, + CXTranslationUnit_IncludeBriefCommentsInCodeCompletion = 0x80, + CXTranslationUnit_CreatePreambleOnFirstParse = 0x100, + CXTranslationUnit_KeepGoing = 0x200, + CXTranslationUnit_SingleFileParse = 0x400, + CXTranslationUnit_LimitSkipFunctionBodiesToPreamble = 0x800, + CXTranslationUnit_IncludeAttributedTypes = 0x1000, + CXTranslationUnit_VisitImplicitAttributes = 0x2000, + CXTranslationUnit_IgnoreNonErrorsFromIncludedFiles = 0x4000, + CXTranslationUnit_RetainExcludedConditionalBlocks = 0x8000 + + unsigned clang_defaultEditingTranslationUnitOptions() + CXTranslationUnit clang_parseTranslationUnit(CXIndex CIdx, const char *source_filename, + const char * const * command_line_args, int num_command_line_args, + CXUnsavedFile *unsaved_files, unsigned num_unsaved_files, + unsigned options) + CXErrorCode clang_parseTranslationUnit2(CXIndex CIdx, const char *source_filename, + const char * const * command_line_args, + int num_command_line_args, CXUnsavedFile *unsaved_files, + unsigned num_unsaved_files, unsigned options, CXTranslationUnit* out_TU) + CXErrorCode clang_parseTranslationUnit2FullArgv(CXIndex CIdx, const char *source_filename, + const char * const * command_line_args, int num_command_line_args, + CXUnsavedFile *unsaved_files, unsigned num_unsaved_files, + unsigned options, CXTranslationUnit* out_TU) + + enum CXSaveTranslationUnit_Flags: + CXSaveTranslationUnit_None = 0x0 + + unsigned clang_defaultSaveOptions(CXTranslationUnit TU) + + enum CXSaveError: + CXSaveError_None = 0, + CXSaveError_Unknown = 1, + CXSaveError_TranslationErrors = 2, + CXSaveError_InvalidTU = 3 + + int clang_saveTranslationUnit(CXTranslationUnit TU, const char *FileName, unsigned options) + unsigned clang_suspendTranslationUnit(CXTranslationUnit) + void clang_disposeTranslationUnit(CXTranslationUnit) + + enum CXReparse_Flags: + CXReparse_None = 0x0 + + unsigned clang_defaultReparseOptions(CXTranslationUnit TU) + int clang_reparseTranslationUnit(CXTranslationUnit TU, unsigned num_unsaved_files, CXUnsavedFile* unsaved_files, + unsigned options) + + enum CXTUResourceUsageKind: + CXTUResourceUsage_AST = 1, + CXTUResourceUsage_Identifiers = 2, + CXTUResourceUsage_Selectors = 3, + CXTUResourceUsage_GlobalCompletionResults = 4, + CXTUResourceUsage_SourceManagerContentCache = 5, + CXTUResourceUsage_AST_SideTables = 6, + CXTUResourceUsage_SourceManager_Membuffer_Malloc = 7, + CXTUResourceUsage_SourceManager_Membuffer_MMap = 8, + CXTUResourceUsage_ExternalASTSource_Membuffer_Malloc = 9, + CXTUResourceUsage_ExternalASTSource_Membuffer_MMap = 10, + CXTUResourceUsage_Preprocessor = 11, + CXTUResourceUsage_PreprocessingRecord = 12, + CXTUResourceUsage_SourceManager_DataStructures = 13, + CXTUResourceUsage_Preprocessor_HeaderSearch = 14, + CXTUResourceUsage_MEMORY_IN_BYTES_BEGIN = 1, + CXTUResourceUsage_MEMORY_IN_BYTES_END = 14, + CXTUResourceUsage_First = 1, + CXTUResourceUsage_Last = 14 + + const char *clang_getTUResourceUsageName(CXTUResourceUsageKind kind) + + ctypedef struct CXTUResourceUsageEntry: + CXTUResourceUsageKind kind + unsigned long amount + + ctypedef struct CXTUResourceUsage: + void *data + unsigned numEntries + CXTUResourceUsageEntry *entries + + CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) + void clang_disposeCXTUResourceUsage(CXTUResourceUsage usage) + CXTargetInfo clang_getTranslationUnitTargetInfo(CXTranslationUnit CTUnit) + void clang_TargetInfo_dispose(CXTargetInfo Info) + CXString clang_TargetInfo_getTriple(CXTargetInfo Info) + int clang_TargetInfo_getPointerWidth(CXTargetInfo Info) + + enum CXCursorKind: + CXCursor_UnexposedDecl = 1, + CXCursor_StructDecl = 2, + CXCursor_UnionDecl = 3, + CXCursor_ClassDecl = 4, + CXCursor_EnumDecl = 5, + CXCursor_FieldDecl = 6, + CXCursor_EnumConstantDecl = 7, + CXCursor_FunctionDecl = 8, + CXCursor_VarDecl = 9, + CXCursor_ParmDecl = 10, + CXCursor_ObjCInterfaceDecl = 11, + CXCursor_ObjCCategoryDecl = 12, + CXCursor_ObjCProtocolDecl = 13, + CXCursor_ObjCPropertyDecl = 14, + CXCursor_ObjCIvarDecl = 15, + CXCursor_ObjCInstanceMethodDecl = 16, + CXCursor_ObjCClassMethodDecl = 17, + CXCursor_ObjCImplementationDecl = 18, + CXCursor_ObjCCategoryImplDecl = 19, + CXCursor_TypedefDecl = 20, + CXCursor_CXXMethod = 21, + CXCursor_Namespace = 22, + CXCursor_LinkageSpec = 23, + CXCursor_Constructor = 24, + CXCursor_Destructor = 25, + CXCursor_ConversionFunction = 26, + CXCursor_TemplateTypeParameter = 27, + CXCursor_NonTypeTemplateParameter = 28, + CXCursor_TemplateTemplateParameter = 29, + CXCursor_FunctionTemplate = 30, + CXCursor_ClassTemplate = 31, + CXCursor_ClassTemplatePartialSpecialization = 32, + CXCursor_NamespaceAlias = 33, + CXCursor_UsingDirective = 34, + CXCursor_UsingDeclaration = 35, + CXCursor_TypeAliasDecl = 36, + CXCursor_ObjCSynthesizeDecl = 37, + CXCursor_ObjCDynamicDecl = 38, + CXCursor_CXXAccessSpecifier = 39, + CXCursor_FirstDecl = CXCursor_UnexposedDecl, + CXCursor_LastDecl = CXCursor_CXXAccessSpecifier, + CXCursor_FirstRef = 40, + CXCursor_ObjCSuperClassRef = 40, + CXCursor_ObjCProtocolRef = 41, + CXCursor_ObjCClassRef = 42, + CXCursor_TypeRef = 43, + CXCursor_CXXBaseSpecifier = 44, + CXCursor_TemplateRef = 45, + CXCursor_NamespaceRef = 46, + CXCursor_MemberRef = 47, + CXCursor_LabelRef = 48, + CXCursor_OverloadedDeclRef = 49, + CXCursor_VariableRef = 50, + CXCursor_LastRef = CXCursor_VariableRef, + CXCursor_FirstInvalid = 70, + CXCursor_InvalidFile = 70, + CXCursor_NoDeclFound = 71, + CXCursor_NotImplemented = 72, + CXCursor_InvalidCode = 73, + CXCursor_LastInvalid = CXCursor_InvalidCode, + CXCursor_FirstExpr = 100, + CXCursor_UnexposedExpr = 100, + CXCursor_DeclRefExpr = 101, + CXCursor_MemberRefExpr = 102, + CXCursor_CallExpr = 103, + CXCursor_ObjCMessageExpr = 104, + CXCursor_BlockExpr = 105, + CXCursor_IntegerLiteral = 106, + CXCursor_FloatingLiteral = 107, + CXCursor_ImaginaryLiteral = 108, + CXCursor_StringLiteral = 109, + CXCursor_CharacterLiteral = 110, + CXCursor_ParenExpr = 111, + CXCursor_UnaryOperator = 112, + CXCursor_ArraySubscriptExpr = 113, + CXCursor_BinaryOperator = 114, + CXCursor_CompoundAssignOperator = 115, + CXCursor_ConditionalOperator = 116, + CXCursor_CStyleCastExpr = 117, + CXCursor_CompoundLiteralExpr = 118, + CXCursor_InitListExpr = 119, + CXCursor_AddrLabelExpr = 120, + CXCursor_StmtExpr = 121, + CXCursor_GenericSelectionExpr = 122, + CXCursor_GNUNullExpr = 123, + CXCursor_CXXStaticCastExpr = 124, + CXCursor_CXXDynamicCastExpr = 125, + CXCursor_CXXReinterpretCastExpr = 126, + CXCursor_CXXConstCastExpr = 127, + CXCursor_CXXFunctionalCastExpr = 128, + CXCursor_CXXTypeidExpr = 129, + CXCursor_CXXBoolLiteralExpr = 130, + CXCursor_CXXNullPtrLiteralExpr = 131, + CXCursor_CXXThisExpr = 132, + CXCursor_CXXThrowExpr = 133, + CXCursor_CXXNewExpr = 134, + CXCursor_CXXDeleteExpr = 135, + CXCursor_UnaryExpr = 136, + CXCursor_ObjCStringLiteral = 137, + CXCursor_ObjCEncodeExpr = 138, + CXCursor_ObjCSelectorExpr = 139, + CXCursor_ObjCProtocolExpr = 140, + CXCursor_ObjCBridgedCastExpr = 141, + CXCursor_PackExpansionExpr = 142, + CXCursor_SizeOfPackExpr = 143, + CXCursor_LambdaExpr = 144, + CXCursor_ObjCBoolLiteralExpr = 145, + CXCursor_ObjCSelfExpr = 146, + CXCursor_OMPArraySectionExpr = 147, + CXCursor_ObjCAvailabilityCheckExpr = 148, + CXCursor_FixedPointLiteral = 149, + CXCursor_OMPArrayShapingExpr = 150, + CXCursor_OMPIteratorExpr = 151, + CXCursor_CXXAddrspaceCastExpr = 152, + CXCursor_ConceptSpecializationExpr = 153, + CXCursor_RequiresExpr = 154, + CXCursor_CXXParenListInitExpr = 155, + CXCursor_LastExpr = CXCursor_CXXParenListInitExpr, + CXCursor_FirstStmt = 200, + CXCursor_UnexposedStmt = 200, + CXCursor_LabelStmt = 201, + CXCursor_CompoundStmt = 202, + CXCursor_CaseStmt = 203, + CXCursor_DefaultStmt = 204, + CXCursor_IfStmt = 205, + CXCursor_SwitchStmt = 206, + CXCursor_WhileStmt = 207, + CXCursor_DoStmt = 208, + CXCursor_ForStmt = 209, + CXCursor_GotoStmt = 210, + CXCursor_IndirectGotoStmt = 211, + CXCursor_ContinueStmt = 212, + CXCursor_BreakStmt = 213, + CXCursor_ReturnStmt = 214, + CXCursor_GCCAsmStmt = 215, + CXCursor_AsmStmt = CXCursor_GCCAsmStmt, + CXCursor_ObjCAtTryStmt = 216, + CXCursor_ObjCAtCatchStmt = 217, + CXCursor_ObjCAtFinallyStmt = 218, + CXCursor_ObjCAtThrowStmt = 219, + CXCursor_ObjCAtSynchronizedStmt = 220, + CXCursor_ObjCAutoreleasePoolStmt = 221, + CXCursor_ObjCForCollectionStmt = 222, + CXCursor_CXXCatchStmt = 223, + CXCursor_CXXTryStmt = 224, + CXCursor_CXXForRangeStmt = 225, + CXCursor_SEHTryStmt = 226, + CXCursor_SEHExceptStmt = 227, + CXCursor_SEHFinallyStmt = 228, + CXCursor_MSAsmStmt = 229, + CXCursor_NullStmt = 230, + CXCursor_DeclStmt = 231, + CXCursor_OMPParallelDirective = 232, + CXCursor_OMPSimdDirective = 233, + CXCursor_OMPForDirective = 234, + CXCursor_OMPSectionsDirective = 235, + CXCursor_OMPSectionDirective = 236, + CXCursor_OMPSingleDirective = 237, + CXCursor_OMPParallelForDirective = 238, + CXCursor_OMPParallelSectionsDirective = 239, + CXCursor_OMPTaskDirective = 240, + CXCursor_OMPMasterDirective = 241, + CXCursor_OMPCriticalDirective = 242, + CXCursor_OMPTaskyieldDirective = 243, + CXCursor_OMPBarrierDirective = 244, + CXCursor_OMPTaskwaitDirective = 245, + CXCursor_OMPFlushDirective = 246, + CXCursor_SEHLeaveStmt = 247, + CXCursor_OMPOrderedDirective = 248, + CXCursor_OMPAtomicDirective = 249, + CXCursor_OMPForSimdDirective = 250, + CXCursor_OMPParallelForSimdDirective = 251, + CXCursor_OMPTargetDirective = 252, + CXCursor_OMPTeamsDirective = 253, + CXCursor_OMPTaskgroupDirective = 254, + CXCursor_OMPCancellationPointDirective = 255, + CXCursor_OMPCancelDirective = 256, + CXCursor_OMPTargetDataDirective = 257, + CXCursor_OMPTaskLoopDirective = 258, + CXCursor_OMPTaskLoopSimdDirective = 259, + CXCursor_OMPDistributeDirective = 260, + CXCursor_OMPTargetEnterDataDirective = 261, + CXCursor_OMPTargetExitDataDirective = 262, + CXCursor_OMPTargetParallelDirective = 263, + CXCursor_OMPTargetParallelForDirective = 264, + CXCursor_OMPTargetUpdateDirective = 265, + CXCursor_OMPDistributeParallelForDirective = 266, + CXCursor_OMPDistributeParallelForSimdDirective = 267, + CXCursor_OMPDistributeSimdDirective = 268, + CXCursor_OMPTargetParallelForSimdDirective = 269, + CXCursor_OMPTargetSimdDirective = 270, + CXCursor_OMPTeamsDistributeDirective = 271, + CXCursor_OMPTeamsDistributeSimdDirective = 272, + CXCursor_OMPTeamsDistributeParallelForSimdDirective = 273, + CXCursor_OMPTeamsDistributeParallelForDirective = 274, + CXCursor_OMPTargetTeamsDirective = 275, + CXCursor_OMPTargetTeamsDistributeDirective = 276, + CXCursor_OMPTargetTeamsDistributeParallelForDirective = 277, + CXCursor_OMPTargetTeamsDistributeParallelForSimdDirective = 278, + CXCursor_OMPTargetTeamsDistributeSimdDirective = 279, + CXCursor_BuiltinBitCastExpr = 280, + CXCursor_OMPMasterTaskLoopDirective = 281, + CXCursor_OMPParallelMasterTaskLoopDirective = 282, + CXCursor_OMPMasterTaskLoopSimdDirective = 283, + CXCursor_OMPParallelMasterTaskLoopSimdDirective = 284, + CXCursor_OMPParallelMasterDirective = 285, + CXCursor_OMPDepobjDirective = 286, + CXCursor_OMPScanDirective = 287, + CXCursor_OMPTileDirective = 288, + CXCursor_OMPCanonicalLoop = 289, + CXCursor_OMPInteropDirective = 290, + CXCursor_OMPDispatchDirective = 291, + CXCursor_OMPMaskedDirective = 292, + CXCursor_OMPUnrollDirective = 293, + CXCursor_OMPMetaDirective = 294, + CXCursor_OMPGenericLoopDirective = 295, + CXCursor_OMPTeamsGenericLoopDirective = 296, + CXCursor_OMPTargetTeamsGenericLoopDirective = 297, + CXCursor_OMPParallelGenericLoopDirective = 298, + CXCursor_OMPTargetParallelGenericLoopDirective = 299, + CXCursor_OMPParallelMaskedDirective = 300, + CXCursor_OMPMaskedTaskLoopDirective = 301, + CXCursor_OMPMaskedTaskLoopSimdDirective = 302, + CXCursor_OMPParallelMaskedTaskLoopDirective = 303, + CXCursor_OMPParallelMaskedTaskLoopSimdDirective = 304, + CXCursor_OMPErrorDirective = 305, + CXCursor_LastStmt = CXCursor_OMPErrorDirective, + CXCursor_TranslationUnit = 350, + CXCursor_FirstAttr = 400, + CXCursor_UnexposedAttr = 400, + CXCursor_IBActionAttr = 401, + CXCursor_IBOutletAttr = 402, + CXCursor_IBOutletCollectionAttr = 403, + CXCursor_CXXFinalAttr = 404, + CXCursor_CXXOverrideAttr = 405, + CXCursor_AnnotateAttr = 406, + CXCursor_AsmLabelAttr = 407, + CXCursor_PackedAttr = 408, + CXCursor_PureAttr = 409, + CXCursor_ConstAttr = 410, + CXCursor_NoDuplicateAttr = 411, + CXCursor_CUDAConstantAttr = 412, + CXCursor_CUDADeviceAttr = 413, + CXCursor_CUDAGlobalAttr = 414, + CXCursor_CUDAHostAttr = 415, + CXCursor_CUDASharedAttr = 416, + CXCursor_VisibilityAttr = 417, + CXCursor_DLLExport = 418, + CXCursor_DLLImport = 419, + CXCursor_NSReturnsRetained = 420, + CXCursor_NSReturnsNotRetained = 421, + CXCursor_NSReturnsAutoreleased = 422, + CXCursor_NSConsumesSelf = 423, + CXCursor_NSConsumed = 424, + CXCursor_ObjCException = 425, + CXCursor_ObjCNSObject = 426, + CXCursor_ObjCIndependentClass = 427, + CXCursor_ObjCPreciseLifetime = 428, + CXCursor_ObjCReturnsInnerPointer = 429, + CXCursor_ObjCRequiresSuper = 430, + CXCursor_ObjCRootClass = 431, + CXCursor_ObjCSubclassingRestricted = 432, + CXCursor_ObjCExplicitProtocolImpl = 433, + CXCursor_ObjCDesignatedInitializer = 434, + CXCursor_ObjCRuntimeVisible = 435, + CXCursor_ObjCBoxable = 436, + CXCursor_FlagEnum = 437, + CXCursor_ConvergentAttr = 438, + CXCursor_WarnUnusedAttr = 439, + CXCursor_WarnUnusedResultAttr = 440, + CXCursor_AlignedAttr = 441, + CXCursor_LastAttr = CXCursor_AlignedAttr, + CXCursor_PreprocessingDirective = 500, + CXCursor_MacroDefinition = 501, + CXCursor_MacroExpansion = 502, + CXCursor_MacroInstantiation = CXCursor_MacroExpansion, + CXCursor_InclusionDirective = 503, + CXCursor_FirstPreprocessing = CXCursor_PreprocessingDirective, + CXCursor_LastPreprocessing = CXCursor_InclusionDirective, + CXCursor_ModuleImportDecl = 600, + CXCursor_TypeAliasTemplateDecl = 601, + CXCursor_StaticAssert = 602, + CXCursor_FriendDecl = 603, + CXCursor_ConceptDecl = 604, + CXCursor_FirstExtraDecl = CXCursor_ModuleImportDecl, + CXCursor_LastExtraDecl = CXCursor_ConceptDecl, + CXCursor_OverloadCandidate = 700 + + ctypedef struct CXCursor: + CXCursorKind kind + int xdata + const void * data[3] + + CXCursor clang_getNullCursor() + CXCursor clang_getTranslationUnitCursor(CXTranslationUnit) + unsigned clang_equalCursors(CXCursor, CXCursor) + int clang_Cursor_isNull(CXCursor cursor) + unsigned clang_hashCursor(CXCursor) + CXCursorKind clang_getCursorKind(CXCursor) + unsigned clang_isDeclaration(CXCursorKind) + unsigned clang_isInvalidDeclaration(CXCursor) + unsigned clang_isReference(CXCursorKind) + unsigned clang_isExpression(CXCursorKind) + unsigned clang_isStatement(CXCursorKind) + unsigned clang_isAttribute(CXCursorKind) + unsigned clang_Cursor_hasAttrs(CXCursor C) + unsigned clang_isInvalid(CXCursorKind) + unsigned clang_isTranslationUnit(CXCursorKind) + unsigned clang_isPreprocessing(CXCursorKind) + unsigned clang_isUnexposed(CXCursorKind) + + enum CXLinkageKind: + CXLinkage_Invalid + CXLinkage_NoLinkage + CXLinkage_Internal + CXLinkage_UniqueExternal + CXLinkage_External + + CXLinkageKind clang_getCursorLinkage(CXCursor cursor) + + enum CXVisibilityKind: + CXVisibility_Invalid + CXVisibility_Hidden + CXVisibility_Protected + CXVisibility_Default + + CXVisibilityKind clang_getCursorVisibility(CXCursor cursor) + CXAvailabilityKind clang_getCursorAvailability(CXCursor cursor) + + ctypedef struct CXPlatformAvailability: + CXString Platform + CXVersion Introduced + CXVersion Deprecated + CXVersion Obsoleted + int Unavailable + CXString Message + + int clang_getCursorPlatformAvailability(CXCursor cursor, int *always_deprecated, CXString *deprecated_message, + int *always_unavailable, CXString *unavailable_message, + CXPlatformAvailability *availability, int availability_size) + void clang_disposeCXPlatformAvailability(CXPlatformAvailability * availability) + CXCursor clang_Cursor_getVarDeclInitializer(CXCursor cursor) + int clang_Cursor_hasVarDeclGlobalStorage(CXCursor cursor) + int clang_Cursor_hasVarDeclExternalStorage(CXCursor cursor) + + enum CXLanguageKind: + CXLanguage_Invalid = 0, + CXLanguage_C, + CXLanguage_ObjC, + CXLanguage_CPlusPlus + + CXLanguageKind clang_getCursorLanguage(CXCursor cursor) + + enum CXTLSKind: + CXTLS_None = 0, + CXTLS_Dynamic, + CXTLS_Static + + CXTLSKind clang_getCursorTLSKind(CXCursor cursor) + CXTranslationUnit clang_Cursor_getTranslationUnit(CXCursor) + + ctypedef struct CXCursorSetImpl: + pass + ctypedef CXCursorSetImpl* CXCursorSet + + CXCursorSet clang_createCXCursorSet() + void clang_disposeCXCursorSet(CXCursorSet cset) + unsigned clang_CXCursorSet_contains(CXCursorSet cset, CXCursor cursor) + unsigned clang_CXCursorSet_insert(CXCursorSet cset, CXCursor cursor) + CXCursor clang_getCursorSemanticParent(CXCursor cursor) + CXCursor clang_getCursorLexicalParent(CXCursor cursor) + void clang_getOverriddenCursors(CXCursor cursor, CXCursor ** overridden, unsigned *num_overridden) + void clang_disposeOverriddenCursors(CXCursor *overridden) + CXFile clang_getIncludedFile(CXCursor cursor) + CXCursor clang_getCursor(CXTranslationUnit, CXSourceLocation) + CXSourceLocation clang_getCursorLocation(CXCursor) + CXSourceRange clang_getCursorExtent(CXCursor) + + enum CXTypeKind: + CXType_Invalid = 0, + CXType_Unexposed = 1, + CXType_Void = 2, + CXType_Bool = 3, + CXType_Char_U = 4, + CXType_UChar = 5, + CXType_Char16 = 6, + CXType_Char32 = 7, + CXType_UShort = 8, + CXType_UInt = 9, + CXType_ULong = 10, + CXType_ULongLong = 11, + CXType_UInt128 = 12, + CXType_Char_S = 13, + CXType_SChar = 14, + CXType_WChar = 15, + CXType_Short = 16, + CXType_Int = 17, + CXType_Long = 18, + CXType_LongLong = 19, + CXType_Int128 = 20, + CXType_Float = 21, + CXType_Double = 22, + CXType_LongDouble = 23, + CXType_NullPtr = 24, + CXType_Overload = 25, + CXType_Dependent = 26, + CXType_ObjCId = 27, + CXType_ObjCClass = 28, + CXType_ObjCSel = 29, + CXType_Float128 = 30, + CXType_Half = 31, + CXType_Float16 = 32, + CXType_ShortAccum = 33, + CXType_Accum = 34, + CXType_LongAccum = 35, + CXType_UShortAccum = 36, + CXType_UAccum = 37, + CXType_ULongAccum = 38, + CXType_BFloat16 = 39, + CXType_Ibm128 = 40, + CXType_FirstBuiltin = CXType_Void, + CXType_LastBuiltin = CXType_Ibm128, + CXType_Complex = 100, + CXType_Pointer = 101, + CXType_BlockPointer = 102, + CXType_LValueReference = 103, + CXType_RValueReference = 104, + CXType_Record = 105, + CXType_Enum = 106, + CXType_Typedef = 107, + CXType_ObjCInterface = 108, + CXType_ObjCObjectPointer = 109, + CXType_FunctionNoProto = 110, + CXType_FunctionProto = 111, + CXType_ConstantArray = 112, + CXType_Vector = 113, + CXType_IncompleteArray = 114, + CXType_VariableArray = 115, + CXType_DependentSizedArray = 116, + CXType_MemberPointer = 117, + CXType_Auto = 118, + CXType_Elaborated = 119, + CXType_Pipe = 120, + CXType_OCLImage1dRO = 121, + CXType_OCLImage1dArrayRO = 122, + CXType_OCLImage1dBufferRO = 123, + CXType_OCLImage2dRO = 124, + CXType_OCLImage2dArrayRO = 125, + CXType_OCLImage2dDepthRO = 126, + CXType_OCLImage2dArrayDepthRO = 127, + CXType_OCLImage2dMSAARO = 128, + CXType_OCLImage2dArrayMSAARO = 129, + CXType_OCLImage2dMSAADepthRO = 130, + CXType_OCLImage2dArrayMSAADepthRO = 131, + CXType_OCLImage3dRO = 132, + CXType_OCLImage1dWO = 133, + CXType_OCLImage1dArrayWO = 134, + CXType_OCLImage1dBufferWO = 135, + CXType_OCLImage2dWO = 136, + CXType_OCLImage2dArrayWO = 137, + CXType_OCLImage2dDepthWO = 138, + CXType_OCLImage2dArrayDepthWO = 139, + CXType_OCLImage2dMSAAWO = 140, + CXType_OCLImage2dArrayMSAAWO = 141, + CXType_OCLImage2dMSAADepthWO = 142, + CXType_OCLImage2dArrayMSAADepthWO = 143, + CXType_OCLImage3dWO = 144, + CXType_OCLImage1dRW = 145, + CXType_OCLImage1dArrayRW = 146, + CXType_OCLImage1dBufferRW = 147, + CXType_OCLImage2dRW = 148, + CXType_OCLImage2dArrayRW = 149, + CXType_OCLImage2dDepthRW = 150, + CXType_OCLImage2dArrayDepthRW = 151, + CXType_OCLImage2dMSAARW = 152, + CXType_OCLImage2dArrayMSAARW = 153, + CXType_OCLImage2dMSAADepthRW = 154, + CXType_OCLImage2dArrayMSAADepthRW = 155, + CXType_OCLImage3dRW = 156, + CXType_OCLSampler = 157, + CXType_OCLEvent = 158, + CXType_OCLQueue = 159, + CXType_OCLReserveID = 160, + CXType_ObjCObject = 161, + CXType_ObjCTypeParam = 162, + CXType_Attributed = 163, + CXType_OCLIntelSubgroupAVCMcePayload = 164, + CXType_OCLIntelSubgroupAVCImePayload = 165, + CXType_OCLIntelSubgroupAVCRefPayload = 166, + CXType_OCLIntelSubgroupAVCSicPayload = 167, + CXType_OCLIntelSubgroupAVCMceResult = 168, + CXType_OCLIntelSubgroupAVCImeResult = 169, + CXType_OCLIntelSubgroupAVCRefResult = 170, + CXType_OCLIntelSubgroupAVCSicResult = 171, + CXType_OCLIntelSubgroupAVCImeResultSingleRefStreamout = 172, + CXType_OCLIntelSubgroupAVCImeResultDualRefStreamout = 173, + CXType_OCLIntelSubgroupAVCImeSingleRefStreamin = 174, + CXType_OCLIntelSubgroupAVCImeDualRefStreamin = 175, + CXType_ExtVector = 176, + CXType_Atomic = 177, + CXType_BTFTagAttributed = 178 + + enum CXCallingConv: + CXCallingConv_Default = 0, + CXCallingConv_C = 1, + CXCallingConv_X86StdCall = 2, + CXCallingConv_X86FastCall = 3, + CXCallingConv_X86ThisCall = 4, + CXCallingConv_X86Pascal = 5, + CXCallingConv_AAPCS = 6, + CXCallingConv_AAPCS_VFP = 7, + CXCallingConv_X86RegCall = 8, + CXCallingConv_IntelOclBicc = 9, + CXCallingConv_Win64 = 10, + CXCallingConv_X86_64Win64 = CXCallingConv_Win64, + CXCallingConv_X86_64SysV = 11, + CXCallingConv_X86VectorCall = 12, + CXCallingConv_Swift = 13, + CXCallingConv_PreserveMost = 14, + CXCallingConv_PreserveAll = 15, + CXCallingConv_AArch64VectorCall = 16, + CXCallingConv_SwiftAsync = 17, + CXCallingConv_AArch64SVEPCS = 18, + CXCallingConv_Invalid = 100, + CXCallingConv_Unexposed = 200 + + ctypedef struct CXType: + CXTypeKind kind + void * data[2] + + CXType clang_getCursorType(CXCursor C) + CXString clang_getTypeSpelling(CXType CT) + CXType clang_getTypedefDeclUnderlyingType(CXCursor C) + CXType clang_getEnumDeclIntegerType(CXCursor C) + long long clang_getEnumConstantDeclValue(CXCursor C) + unsigned long long clang_getEnumConstantDeclUnsignedValue(CXCursor C) + int clang_getFieldDeclBitWidth(CXCursor C) + int clang_Cursor_getNumArguments(CXCursor C) + CXCursor clang_Cursor_getArgument(CXCursor C, unsigned i) + + enum CXTemplateArgumentKind: + CXTemplateArgumentKind_Null, + CXTemplateArgumentKind_Type, + CXTemplateArgumentKind_Declaration, + CXTemplateArgumentKind_NullPtr, + CXTemplateArgumentKind_Integral, + CXTemplateArgumentKind_Template, + CXTemplateArgumentKind_TemplateExpansion, + CXTemplateArgumentKind_Expression, + CXTemplateArgumentKind_Pack, + CXTemplateArgumentKind_Invalid + + int clang_Cursor_getNumTemplateArguments(CXCursor C) + CXTemplateArgumentKind clang_Cursor_getTemplateArgumentKind(CXCursor C, unsigned I) + CXType clang_Cursor_getTemplateArgumentType(CXCursor C, unsigned I) + long long clang_Cursor_getTemplateArgumentValue(CXCursor C, unsigned I) + unsigned long long clang_Cursor_getTemplateArgumentUnsignedValue(CXCursor C, unsigned I) + unsigned clang_equalTypes(CXType A, CXType B) + CXType clang_getCanonicalType(CXType T) + unsigned clang_isConstQualifiedType(CXType T) + unsigned clang_Cursor_isMacroFunctionLike(CXCursor C) + unsigned clang_Cursor_isMacroBuiltin(CXCursor C) + unsigned clang_Cursor_isFunctionInlined(CXCursor C) + unsigned clang_isVolatileQualifiedType(CXType T) + unsigned clang_isRestrictQualifiedType(CXType T) + unsigned clang_getAddressSpace(CXType T) + CXString clang_getTypedefName(CXType CT) + CXType clang_getPointeeType(CXType T) + CXType clang_getUnqualifiedType(CXType CT) + CXType clang_getNonReferenceType(CXType CT) + CXCursor clang_getTypeDeclaration(CXType T) + CXString clang_getDeclObjCTypeEncoding(CXCursor C) + CXString clang_Type_getObjCEncoding(CXType type) + CXString clang_getTypeKindSpelling(CXTypeKind K) + CXCallingConv clang_getFunctionTypeCallingConv(CXType T) + CXType clang_getResultType(CXType T) + int clang_getExceptionSpecificationType(CXType T) + int clang_getNumArgTypes(CXType T) + CXType clang_getArgType(CXType T, unsigned i) + CXType clang_Type_getObjCObjectBaseType(CXType T) + unsigned clang_Type_getNumObjCProtocolRefs(CXType T) + CXCursor clang_Type_getObjCProtocolDecl(CXType T, unsigned i) + unsigned clang_Type_getNumObjCTypeArgs(CXType T) + CXType clang_Type_getObjCTypeArg(CXType T, unsigned i) + unsigned clang_isFunctionTypeVariadic(CXType T) + CXType clang_getCursorResultType(CXCursor C) + int clang_getCursorExceptionSpecificationType(CXCursor C) + unsigned clang_isPODType(CXType T) + CXType clang_getElementType(CXType T) + long long clang_getNumElements(CXType T) + CXType clang_getArrayElementType(CXType T) + long long clang_getArraySize(CXType T) + CXType clang_Type_getNamedType(CXType T) + unsigned clang_Type_isTransparentTagTypedef(CXType T) + + enum CXTypeNullabilityKind: + CXTypeNullability_NonNull = 0, + CXTypeNullability_Nullable = 1, + CXTypeNullability_Unspecified = 2, + CXTypeNullability_Invalid = 3, + CXTypeNullability_NullableResult = 4 + + CXTypeNullabilityKind clang_Type_getNullability(CXType T) + + enum CXTypeLayoutError: + CXTypeLayoutError_Invalid = -1, + CXTypeLayoutError_Incomplete = -2, + CXTypeLayoutError_Dependent = -3, + CXTypeLayoutError_NotConstantSize = -4, + CXTypeLayoutError_InvalidFieldName = -5, + CXTypeLayoutError_Undeduced = -6 + + long long clang_Type_getAlignOf(CXType T) + CXType clang_Type_getClassType(CXType T) + long long clang_Type_getSizeOf(CXType T) + long long clang_Type_getOffsetOf(CXType T, const char *S) + CXType clang_Type_getModifiedType(CXType T) + CXType clang_Type_getValueType(CXType CT) + long long clang_Cursor_getOffsetOfField(CXCursor C) + unsigned clang_Cursor_isAnonymous(CXCursor C) + unsigned clang_Cursor_isAnonymousRecordDecl(CXCursor C) + unsigned clang_Cursor_isInlineNamespace(CXCursor C) + + enum CXRefQualifierKind: + CXRefQualifier_None = 0, + CXRefQualifier_LValue, + CXRefQualifier_RValue + + int clang_Type_getNumTemplateArguments(CXType T) + CXType clang_Type_getTemplateArgumentAsType(CXType T, unsigned i) + CXRefQualifierKind clang_Type_getCXXRefQualifier(CXType T) + unsigned clang_Cursor_isBitField(CXCursor C) + unsigned clang_isVirtualBase(CXCursor) + + enum CX_CXXAccessSpecifier: + CX_CXXInvalidAccessSpecifier, + CX_CXXPublic, + CX_CXXProtected, + CX_CXXPrivate + + CX_CXXAccessSpecifier clang_getCXXAccessSpecifier(CXCursor) + + enum CX_StorageClass: + CX_SC_Invalid, + CX_SC_None, + CX_SC_Extern, + CX_SC_Static, + CX_SC_PrivateExtern, + CX_SC_OpenCLWorkGroupLocal, + CX_SC_Auto, + CX_SC_Register + + CX_StorageClass clang_Cursor_getStorageClass(CXCursor) + unsigned clang_getNumOverloadedDecls(CXCursor cursor) + CXCursor clang_getOverloadedDecl(CXCursor cursor, unsigned index) + CXType clang_getIBOutletCollectionType(CXCursor) + + enum CXChildVisitResult: + CXChildVisit_Break + CXChildVisit_Continue + CXChildVisit_Recurse + + ctypedef CXChildVisitResult (*CXCursorVisitor)(CXCursor cursor, CXCursor parent, CXClientData client_data) + unsigned clang_visitChildren(CXCursor parent, CXCursorVisitor visitor, CXClientData client_data) + CXString clang_getCursorUSR(CXCursor) + CXString clang_constructUSR_ObjCClass(const char *class_name) + CXString clang_constructUSR_ObjCCategory(const char *class_name, const char *category_name) + CXString clang_constructUSR_ObjCProtocol(const char *protocol_name) + CXString clang_constructUSR_ObjCIvar(const char *name, CXString classUSR) + CXString clang_constructUSR_ObjCMethod(const char *name, unsigned isInstanceMethod, CXString classUSR) + CXString clang_constructUSR_ObjCProperty(const char *property, CXString classUSR) + CXString clang_getCursorSpelling(CXCursor) + CXSourceRange clang_Cursor_getSpellingNameRange(CXCursor, unsigned pieceIndex, unsigned options) + + ctypedef void *CXPrintingPolicy + + enum CXPrintingPolicyProperty: + CXPrintingPolicy_Indentation, + CXPrintingPolicy_SuppressSpecifiers, + CXPrintingPolicy_SuppressTagKeyword, + CXPrintingPolicy_IncludeTagDefinition, + CXPrintingPolicy_SuppressScope, + CXPrintingPolicy_SuppressUnwrittenScope, + CXPrintingPolicy_SuppressInitializers, + CXPrintingPolicy_ConstantArraySizeAsWritten, + CXPrintingPolicy_AnonymousTagLocations, + CXPrintingPolicy_SuppressStrongLifetime, + CXPrintingPolicy_SuppressLifetimeQualifiers, + CXPrintingPolicy_SuppressTemplateArgsInCXXConstructors, + CXPrintingPolicy_Bool, + CXPrintingPolicy_Restrict, + CXPrintingPolicy_Alignof, + CXPrintingPolicy_UnderscoreAlignof, + CXPrintingPolicy_UseVoidForZeroParams, + CXPrintingPolicy_TerseOutput, + CXPrintingPolicy_PolishForDeclaration, + CXPrintingPolicy_Half, + CXPrintingPolicy_MSWChar, + CXPrintingPolicy_IncludeNewlines, + CXPrintingPolicy_MSVCFormatting, + CXPrintingPolicy_ConstantsAsWritten, + CXPrintingPolicy_SuppressImplicitBase, + CXPrintingPolicy_FullyQualifiedName, + CXPrintingPolicy_LastProperty = CXPrintingPolicy_FullyQualifiedName + + unsigned clang_PrintingPolicy_getProperty(CXPrintingPolicy Policy, CXPrintingPolicyProperty Property) + void clang_PrintingPolicy_setProperty(CXPrintingPolicy Policy, CXPrintingPolicyProperty Property, unsigned Value) + CXPrintingPolicy clang_getCursorPrintingPolicy(CXCursor) + void clang_PrintingPolicy_dispose(CXPrintingPolicy Policy) + CXString clang_getCursorPrettyPrinted(CXCursor Cursor, CXPrintingPolicy Policy) + CXString clang_getCursorDisplayName(CXCursor) + CXCursor clang_getCursorReferenced(CXCursor) + CXCursor clang_getCursorDefinition(CXCursor) + unsigned clang_isCursorDefinition(CXCursor) + CXCursor clang_getCanonicalCursor(CXCursor) + int clang_Cursor_getObjCSelectorIndex(CXCursor) + int clang_Cursor_isDynamicCall(CXCursor C) + CXType clang_Cursor_getReceiverType(CXCursor C) + + ctypedef enum CXObjCPropertyAttrKind: + CXObjCPropertyAttr_noattr = 0x00, + CXObjCPropertyAttr_readonly = 0x01, + CXObjCPropertyAttr_getter = 0x02, + CXObjCPropertyAttr_assign = 0x04, + CXObjCPropertyAttr_readwrite = 0x08, + CXObjCPropertyAttr_retain = 0x10, + CXObjCPropertyAttr_copy = 0x20, + CXObjCPropertyAttr_nonatomic = 0x40, + CXObjCPropertyAttr_setter = 0x80, + CXObjCPropertyAttr_atomic = 0x100, + CXObjCPropertyAttr_weak = 0x200, + CXObjCPropertyAttr_strong = 0x400, + CXObjCPropertyAttr_unsafe_unretained = 0x800, + CXObjCPropertyAttr_class = 0x1000 + + unsigned clang_Cursor_getObjCPropertyAttributes(CXCursor C, unsigned reserved) + CXString clang_Cursor_getObjCPropertyGetterName(CXCursor C) + CXString clang_Cursor_getObjCPropertySetterName(CXCursor C) + + ctypedef enum CXObjCDeclQualifierKind: + CXObjCDeclQualifier_None = 0x0, + CXObjCDeclQualifier_In = 0x1, + CXObjCDeclQualifier_Inout = 0x2, + CXObjCDeclQualifier_Out = 0x4, + CXObjCDeclQualifier_Bycopy = 0x8, + CXObjCDeclQualifier_Byref = 0x10, + CXObjCDeclQualifier_Oneway = 0x20 + + unsigned clang_Cursor_getObjCDeclQualifiers(CXCursor C) + unsigned clang_Cursor_isObjCOptional(CXCursor C) + unsigned clang_Cursor_isVariadic(CXCursor C) + unsigned clang_Cursor_isExternalSymbol(CXCursor C, CXString *language, CXString *definedIn, unsigned *isGenerated) + CXSourceRange clang_Cursor_getCommentRange(CXCursor C) + CXString clang_Cursor_getRawCommentText(CXCursor C) + CXString clang_Cursor_getBriefCommentText(CXCursor C) + CXString clang_Cursor_getMangling(CXCursor) + CXStringSet *clang_Cursor_getCXXManglings(CXCursor) + CXStringSet *clang_Cursor_getObjCManglings(CXCursor) + + ctypedef void* CXModule + + CXModule clang_Cursor_getModule(CXCursor C) + CXModule clang_getModuleForFile(CXTranslationUnit, CXFile) + CXFile clang_Module_getASTFile(CXModule Module) + CXModule clang_Module_getParent(CXModule Module) + CXString clang_Module_getName(CXModule Module) + CXString clang_Module_getFullName(CXModule Module) + int clang_Module_isSystem(CXModule Module) + unsigned clang_Module_getNumTopLevelHeaders(CXTranslationUnit, CXModule Module) + CXFile clang_Module_getTopLevelHeader(CXTranslationUnit, CXModule Module, unsigned Index) + unsigned clang_CXXConstructor_isConvertingConstructor(CXCursor C) + unsigned clang_CXXConstructor_isCopyConstructor(CXCursor C) + unsigned clang_CXXConstructor_isDefaultConstructor(CXCursor C) + unsigned clang_CXXConstructor_isMoveConstructor(CXCursor C) + unsigned clang_CXXField_isMutable(CXCursor C) + unsigned clang_CXXMethod_isDefaulted(CXCursor C) + unsigned clang_CXXMethod_isDeleted(CXCursor C) + unsigned clang_CXXMethod_isPureVirtual(CXCursor C) + unsigned clang_CXXMethod_isStatic(CXCursor C) + unsigned clang_CXXMethod_isVirtual(CXCursor C) + unsigned clang_CXXMethod_isCopyAssignmentOperator(CXCursor C) + unsigned clang_CXXMethod_isMoveAssignmentOperator(CXCursor C) + unsigned clang_CXXMethod_isExplicit(CXCursor C) + unsigned clang_CXXRecord_isAbstract(CXCursor C) + unsigned clang_EnumDecl_isScoped(CXCursor C) + unsigned clang_CXXMethod_isConst(CXCursor C) + CXCursorKind clang_getTemplateCursorKind(CXCursor C) + CXCursor clang_getSpecializedCursorTemplate(CXCursor C) + CXSourceRange clang_getCursorReferenceNameRange(CXCursor C, unsigned NameFlags, unsigned PieceIndex) + + enum CXNameRefFlags: + CXNameRange_WantQualifier = 0x1, + CXNameRange_WantTemplateArgs = 0x2, + CXNameRange_WantSinglePiece = 0x4 + + ctypedef enum CXTokenKind: + CXToken_Punctuation + CXToken_Keyword + CXToken_Identifier + CXToken_Literal + CXToken_Comment + + ctypedef struct CXToken: + unsigned int_data[4] + void* ptr_data + + CXToken* clang_getToken(CXTranslationUnit TU, CXSourceLocation Location) + CXTokenKind clang_getTokenKind(CXToken) + CXString clang_getTokenSpelling(CXTranslationUnit, CXToken) + CXSourceLocation clang_getTokenLocation(CXTranslationUnit, CXToken) + CXSourceRange clang_getTokenExtent(CXTranslationUnit, CXToken) + void clang_tokenize(CXTranslationUnit TU, CXSourceRange Range, CXToken ** Tokens, unsigned *NumTokens) + void clang_annotateTokens(CXTranslationUnit TU, CXToken *Tokens, unsigned NumTokens, CXCursor *Cursors) + void clang_disposeTokens(CXTranslationUnit TU, CXToken *Tokens, unsigned NumTokens) + CXString clang_getCursorKindSpelling(CXCursorKind Kind) + void clang_getDefinitionSpellingAndExtent(CXCursor, const char ** startBuf, const char ** endBuf, + unsigned *startLine, unsigned *startColumn, unsigned *endLine, + unsigned *endColumn) + void clang_enableStackTraces() + void clang_executeOnThread(void (*fn)(void *), void *user_data, unsigned stack_size) + + ctypedef void* CXCompletionString + + ctypedef struct CXCompletionResult: + CXCursorKind CursorKind + CXCompletionString CompletionString + + enum CXCompletionChunkKind: + CXCompletionChunk_Optional + CXCompletionChunk_TypedText + CXCompletionChunk_Text + CXCompletionChunk_Placeholder + CXCompletionChunk_Informative + CXCompletionChunk_CurrentParameter + CXCompletionChunk_LeftParen + CXCompletionChunk_RightParen + CXCompletionChunk_LeftBracket + CXCompletionChunk_RightBracket + CXCompletionChunk_LeftBrace + CXCompletionChunk_RightBrace + CXCompletionChunk_LeftAngle + CXCompletionChunk_RightAngle + CXCompletionChunk_Comma + CXCompletionChunk_ResultType + CXCompletionChunk_Colon + CXCompletionChunk_SemiColon + CXCompletionChunk_Equal + CXCompletionChunk_HorizontalSpace + CXCompletionChunk_VerticalSpace + + CXCompletionChunkKind clang_getCompletionChunkKind(CXCompletionString completion_string, unsigned chunk_number) + CXString clang_getCompletionChunkText(CXCompletionString completion_string, unsigned chunk_number) + CXCompletionString clang_getCompletionChunkCompletionString(CXCompletionString completion_string, + unsigned chunk_number) + unsigned clang_getNumCompletionChunks(CXCompletionString completion_string) + unsigned clang_getCompletionPriority(CXCompletionString completion_string) + CXAvailabilityKind clang_getCompletionAvailability(CXCompletionString completion_string) + unsigned clang_getCompletionNumAnnotations(CXCompletionString completion_string) + CXString clang_getCompletionAnnotation(CXCompletionString completion_string, unsigned annotation_number) + CXString clang_getCompletionParent(CXCompletionString completion_string, CXCursorKind* kind) + CXString clang_getCompletionBriefComment(CXCompletionString completion_string) + CXCompletionString clang_getCursorCompletionString(CXCursor cursor) + + ctypedef struct CXCodeCompleteResults: + CXCompletionResult* Results + unsigned NumResults + + unsigned clang_getCompletionNumFixIts(CXCodeCompleteResults *results, unsigned completion_index) + CXString clang_getCompletionFixIt(CXCodeCompleteResults *results, unsigned completion_index, unsigned fixit_index, + CXSourceRange *replacement_range) + + enum CXCodeComplete_Flags: + CXCodeComplete_IncludeMacros = 0x01, + CXCodeComplete_IncludeCodePatterns = 0x02, + CXCodeComplete_IncludeBriefComments = 0x04, + CXCodeComplete_SkipPreamble = 0x08, + CXCodeComplete_IncludeCompletionsWithFixIts = 0x10 + + enum CXCompletionContext: + CXCompletionContext_Unexposed = 0, + CXCompletionContext_AnyType = 1 << 0, + CXCompletionContext_AnyValue = 1 << 1, + CXCompletionContext_ObjCObjectValue = 1 << 2, + CXCompletionContext_ObjCSelectorValue = 1 << 3, + CXCompletionContext_CXXClassTypeValue = 1 << 4, + CXCompletionContext_DotMemberAccess = 1 << 5, + CXCompletionContext_ArrowMemberAccess = 1 << 6, + CXCompletionContext_ObjCPropertyAccess = 1 << 7, + CXCompletionContext_EnumTag = 1 << 8, + CXCompletionContext_UnionTag = 1 << 9, + CXCompletionContext_StructTag = 1 << 10, + CXCompletionContext_ClassTag = 1 << 11, + CXCompletionContext_Namespace = 1 << 12, + CXCompletionContext_NestedNameSpecifier = 1 << 13, + CXCompletionContext_ObjCInterface = 1 << 14, + CXCompletionContext_ObjCProtocol = 1 << 15, + CXCompletionContext_ObjCCategory = 1 << 16, + CXCompletionContext_ObjCInstanceMessage = 1 << 17, + CXCompletionContext_ObjCClassMessage = 1 << 18, + CXCompletionContext_ObjCSelectorName = 1 << 19, + CXCompletionContext_MacroName = 1 << 20, + CXCompletionContext_NaturalLanguage = 1 << 21, + CXCompletionContext_IncludedFile = 1 << 22, + CXCompletionContext_Unknown = ((1 << 23) - 1) + + unsigned clang_defaultCodeCompleteOptions() + CXCodeCompleteResults* clang_codeCompleteAt(CXTranslationUnit TU, const char *complete_filename, + unsigned complete_line, unsigned complete_column, + CXUnsavedFile* unsaved_files, unsigned num_unsaved_files, + unsigned options) + void clang_sortCodeCompletionResults(CXCompletionResult *Results, unsigned NumResults) + void clang_disposeCodeCompleteResults(CXCodeCompleteResults *Results) + unsigned clang_codeCompleteGetNumDiagnostics(CXCodeCompleteResults *Results) + CXDiagnostic clang_codeCompleteGetDiagnostic(CXCodeCompleteResults *Results, unsigned Index) + unsigned long long clang_codeCompleteGetContexts(CXCodeCompleteResults *Results) + CXCursorKind clang_codeCompleteGetContainerKind(CXCodeCompleteResults *Results, unsigned *IsIncomplete) + CXString clang_codeCompleteGetContainerUSR(CXCodeCompleteResults *Results) + CXString clang_codeCompleteGetObjCSelector(CXCodeCompleteResults *Results) + CXString clang_getClangVersion() + void clang_toggleCrashRecovery(unsigned isEnabled) + ctypedef void (*CXInclusionVisitor)(CXFile included_file, CXSourceLocation *inclusion_stack, + unsigned include_len,CXClientData client_data) + + void clang_getInclusions(CXTranslationUnit tu, CXInclusionVisitor visitor, CXClientData client_data) + ctypedef enum CXEvalResultKind: + CXEval_Int = 1, + CXEval_Float = 2, + CXEval_ObjCStrLiteral = 3, + CXEval_StrLiteral = 4, + CXEval_CFStr = 5, + CXEval_Other = 6, + CXEval_UnExposed = 0 + + ctypedef void* CXEvalResult + + CXEvalResult clang_Cursor_Evaluate(CXCursor C) + CXEvalResultKind clang_EvalResult_getKind(CXEvalResult E) + int clang_EvalResult_getAsInt(CXEvalResult E) + long long clang_EvalResult_getAsLongLong(CXEvalResult E) + unsigned clang_EvalResult_isUnsignedInt(CXEvalResult E) + unsigned long long clang_EvalResult_getAsUnsigned(CXEvalResult E) + double clang_EvalResult_getAsDouble(CXEvalResult E) + const char *clang_EvalResult_getAsStr(CXEvalResult E) + void clang_EvalResult_dispose(CXEvalResult E) + + ctypedef void* CXRemapping + + CXRemapping clang_getRemappings(const char *path) + CXRemapping clang_getRemappingsFromFileList(const char ** filePaths, unsigned numFiles) + unsigned clang_remap_getNumFiles(CXRemapping) + void clang_remap_getFilenames(CXRemapping, unsigned index, CXString *original, CXString *transformed) + void clang_remap_dispose(CXRemapping) + + enum CXVisitorResult: + CXVisit_Break, + CXVisit_Continue + + ctypedef struct CXCursorAndRangeVisitor: + void * context; + CXVisitorResult (*visit)(void * context, CXCursor, CXSourceRange) + + ctypedef enum CXResult: + CXResult_Success = 0, + CXResult_Invalid = 1, + CXResult_VisitBreak = 2 + + CXResult clang_findReferencesInFile(CXCursor cursor, CXFile file, CXCursorAndRangeVisitor visitor) + CXResult clang_findIncludesInFile(CXTranslationUnit TU, CXFile file, CXCursorAndRangeVisitor visitor) + + ctypedef void* CXIdxClientFile + ctypedef void* CXIdxClientEntity + ctypedef void* CXIdxClientContainer + ctypedef void* CXIdxClientASTFile + + ctypedef struct CXIdxLoc: + void * ptr_data[2] + unsigned int_data + + ctypedef struct CXIdxIncludedFileInfo: + CXIdxLoc hashLoc + const char* filename + CXFile file + int isImport + int isAngled + int isModuleImport + + ctypedef struct CXIdxImportedASTFileInfo: + CXFile file + CXModule module + CXIdxLoc loc + int isImplicit + + ctypedef enum CXIdxEntityKind: + CXIdxEntity_Unexposed = 0, + CXIdxEntity_Typedef = 1, + CXIdxEntity_Function = 2, + CXIdxEntity_Variable = 3, + CXIdxEntity_Field = 4, + CXIdxEntity_EnumConstant = 5, + CXIdxEntity_ObjCClass = 6, + CXIdxEntity_ObjCProtocol = 7, + CXIdxEntity_ObjCCategory = 8, + CXIdxEntity_ObjCInstanceMethod = 9, + CXIdxEntity_ObjCClassMethod = 10, + CXIdxEntity_ObjCProperty = 11, + CXIdxEntity_ObjCIvar = 12, + CXIdxEntity_Enum = 13, + CXIdxEntity_Struct = 14, + CXIdxEntity_Union = 15, + CXIdxEntity_CXXClass = 16, + CXIdxEntity_CXXNamespace = 17, + CXIdxEntity_CXXNamespaceAlias = 18, + CXIdxEntity_CXXStaticVariable = 19, + CXIdxEntity_CXXStaticMethod = 20, + CXIdxEntity_CXXInstanceMethod = 21, + CXIdxEntity_CXXConstructor = 22, + CXIdxEntity_CXXDestructor = 23, + CXIdxEntity_CXXConversionFunction = 24, + CXIdxEntity_CXXTypeAlias = 25, + CXIdxEntity_CXXInterface = 26, + CXIdxEntity_CXXConcept = 27 + + ctypedef enum CXIdxEntityLanguage: + CXIdxEntityLang_None = 0, + CXIdxEntityLang_C = 1, + CXIdxEntityLang_ObjC = 2, + CXIdxEntityLang_CXX = 3, + CXIdxEntityLang_Swift = 4 + + ctypedef enum CXIdxEntityCXXTemplateKind: + CXIdxEntity_NonTemplate = 0, + CXIdxEntity_Template = 1, + CXIdxEntity_TemplatePartialSpecialization = 2, + CXIdxEntity_TemplateSpecialization = 3 + + ctypedef enum CXIdxAttrKind: + CXIdxAttr_Unexposed = 0, + CXIdxAttr_IBAction = 1, + CXIdxAttr_IBOutlet = 2, + CXIdxAttr_IBOutletCollection = 3 + + ctypedef struct CXIdxAttrInfo: + CXIdxAttrKind kind + CXCursor cursor + CXIdxLoc loc + + ctypedef struct CXIdxEntityInfo: + CXIdxEntityKind kind + CXIdxEntityCXXTemplateKind templateKind + CXIdxEntityLanguage lang + const char *name + const char *USR + CXCursor cursor + const CXIdxAttrInfo * const * attributes + unsigned numAttributes + + ctypedef struct CXIdxContainerInfo: + CXCursor cursor + + ctypedef struct CXIdxIBOutletCollectionAttrInfo: + const CXIdxAttrInfo *attrInfo + const CXIdxEntityInfo *objcClass + CXCursor classCursor + CXIdxLoc classLoc + + ctypedef enum CXIdxDeclInfoFlags: + CXIdxDeclFlag_Skipped = 0x1 + + ctypedef struct CXIdxDeclInfo: + const CXIdxEntityInfo *entityInfo + CXCursor cursor + CXIdxLoc loc + const CXIdxContainerInfo *semanticContainer + const CXIdxContainerInfo *lexicalContainer + int isRedeclaration + int isDefinition + int isContainer + const CXIdxContainerInfo *declAsContainer + int isImplicit + const CXIdxAttrInfo * const * attributes + unsigned numAttributes + unsigned flags + + ctypedef enum CXIdxObjCContainerKind: + CXIdxObjCContainer_ForwardRef = 0, + CXIdxObjCContainer_Interface = 1, + CXIdxObjCContainer_Implementation = 2 + + ctypedef struct CXIdxObjCContainerDeclInfo: + const CXIdxDeclInfo *declInfo + CXIdxObjCContainerKind kind + + ctypedef struct CXIdxBaseClassInfo: + const CXIdxEntityInfo *base + CXCursor cursor + CXIdxLoc loc + + ctypedef struct CXIdxObjCProtocolRefInfo: + const CXIdxEntityInfo *protocol + CXCursor cursor + CXIdxLoc loc + + ctypedef struct CXIdxObjCProtocolRefListInfo: + const CXIdxObjCProtocolRefInfo * const * protocols + unsigned numProtocols + + ctypedef struct CXIdxObjCInterfaceDeclInfo: + const CXIdxObjCContainerDeclInfo *containerInfo + const CXIdxBaseClassInfo *superInfo + const CXIdxObjCProtocolRefListInfo *protocols + + ctypedef struct CXIdxObjCCategoryDeclInfo: + const CXIdxObjCContainerDeclInfo *containerInfo + const CXIdxEntityInfo *objcClass + CXCursor classCursor + CXIdxLoc classLoc + const CXIdxObjCProtocolRefListInfo *protocols + + ctypedef struct CXIdxObjCPropertyDeclInfo: + const CXIdxDeclInfo *declInfo + const CXIdxEntityInfo *getter + const CXIdxEntityInfo *setter + + ctypedef struct CXIdxCXXClassDeclInfo: + const CXIdxDeclInfo *declInfo + const CXIdxBaseClassInfo * const * bases + unsigned numBases + + ctypedef enum CXIdxEntityRefKind: + CXIdxEntityRef_Direct = 1, + CXIdxEntityRef_Implicit = 2 + + ctypedef enum CXSymbolRole: + CXSymbolRole_None = 0, + CXSymbolRole_Declaration = 1 << 0, + CXSymbolRole_Definition = 1 << 1, + CXSymbolRole_Reference = 1 << 2, + CXSymbolRole_Read = 1 << 3, + CXSymbolRole_Write = 1 << 4, + CXSymbolRole_Call = 1 << 5, + CXSymbolRole_Dynamic = 1 << 6, + CXSymbolRole_AddressOf = 1 << 7, + CXSymbolRole_Implicit = 1 << 8 + + ctypedef struct CXIdxEntityRefInfo: + CXIdxEntityRefKind kind + CXCursor cursor + CXIdxLoc loc + const CXIdxEntityInfo *referencedEntity + const CXIdxEntityInfo *parentEntity + const CXIdxContainerInfo *container + CXSymbolRole role + + ctypedef struct IndexerCallbacks: + int (*abortQuery)(CXClientData client_data, void *reserved) + void (*diagnostic)(CXClientData client_data, CXDiagnosticSet, void *reserved) + CXIdxClientFile (*enteredMainFile)(CXClientData client_data, CXFile mainFile, void * reserved) + CXIdxClientFile (*ppIncludedFile)(CXClientData client_data, const CXIdxIncludedFileInfo *) + CXIdxClientASTFile (*importedASTFile)(CXClientData client_data, const CXIdxImportedASTFileInfo *) + CXIdxClientContainer (*startedTranslationUnit)(CXClientData client_data, void *reserved) + void (*indexDeclaration)(CXClientData client_data, const CXIdxDeclInfo *) + void (*indexEntityReference)(CXClientData client_data, const CXIdxEntityRefInfo *) + + int clang_index_isEntityObjCContainerKind(CXIdxEntityKind) + const CXIdxObjCContainerDeclInfo* clang_index_getObjCContainerDeclInfo(const CXIdxDeclInfo *) + const CXIdxObjCInterfaceDeclInfo* clang_index_getObjCInterfaceDeclInfo(const CXIdxDeclInfo *) + const CXIdxObjCCategoryDeclInfo* clang_index_getObjCCategoryDeclInfo(const CXIdxDeclInfo *) + const CXIdxObjCProtocolRefListInfo* clang_index_getObjCProtocolRefListInfo(const CXIdxDeclInfo *) + const CXIdxObjCPropertyDeclInfo* clang_index_getObjCPropertyDeclInfo(const CXIdxDeclInfo *) + const CXIdxIBOutletCollectionAttrInfo* clang_index_getIBOutletCollectionAttrInfo(const CXIdxAttrInfo *) + const CXIdxCXXClassDeclInfo* clang_index_getCXXClassDeclInfo(const CXIdxDeclInfo *) + CXIdxClientContainer clang_index_getClientContainer(const CXIdxContainerInfo *) + void clang_index_setClientContainer(const CXIdxContainerInfo *, CXIdxClientContainer) + CXIdxClientEntity clang_index_getClientEntity(const CXIdxEntityInfo *) + void clang_index_setClientEntity(const CXIdxEntityInfo *, CXIdxClientEntity) + + ctypedef void* CXIndexAction + + CXIndexAction clang_IndexAction_create(CXIndex CIdx) + void clang_IndexAction_dispose(CXIndexAction) + + ctypedef enum CXIndexOptFlags: + CXIndexOpt_None = 0x0, + CXIndexOpt_SuppressRedundantRefs = 0x1, + CXIndexOpt_IndexFunctionLocalSymbols = 0x2, + CXIndexOpt_IndexImplicitTemplateInstantiations = 0x4, + CXIndexOpt_SuppressWarnings = 0x8, + CXIndexOpt_SkipParsedBodiesInSession = 0x10 + + int clang_indexSourceFile(CXIndexAction, CXClientData client_data, IndexerCallbacks *index_callbacks, + unsigned index_callbacks_size, unsigned index_options, + const char *source_filename, const char * const *command_line_args, + int num_command_line_args, CXUnsavedFile *unsaved_files, + unsigned num_unsaved_files, CXTranslationUnit *out_TU, unsigned TU_options) + + int clang_indexSourceFileFullArgv(CXIndexAction, CXClientData client_data, IndexerCallbacks *index_callbacks, + unsigned index_callbacks_size, unsigned index_options, + const char *source_filename, const char *const *command_line_args, + int num_command_line_args, CXUnsavedFile *unsaved_files, + unsigned num_unsaved_files, CXTranslationUnit *out_TU, unsigned TU_options) + + int clang_indexTranslationUnit(CXIndexAction, CXClientData client_data, IndexerCallbacks *index_callbacks, + unsigned index_callbacks_size, unsigned index_options, CXTranslationUnit) + + void clang_indexLoc_getFileLocation(CXIdxLoc loc, CXIdxClientFile *indexFile, CXFile *file, unsigned *line, + unsigned *column, unsigned *offset) + + CXSourceLocation clang_indexLoc_getCXSourceLocation(CXIdxLoc loc) + + ctypedef CXVisitorResult (*CXFieldVisitor)(CXCursor C, CXClientData client_data) + + unsigned clang_Type_visitFields(CXType T, CXFieldVisitor visitor, CXClientData client_data) + +cdef extern from "clang-c/Documentation.h": + ctypedef struct CXComment: + const void *ASTNode + CXTranslationUnit TranslationUnit + + CXComment clang_Cursor_getParsedComment(CXCursor C) + + enum CXCommentKind: + CXComment_Null = 0, + CXComment_Text = 1, + CXComment_InlineCommand = 2, + CXComment_HTMLStartTag = 3, + CXComment_HTMLEndTag = 4, + CXComment_Paragraph = 5, + CXComment_BlockCommand = 6, + CXComment_ParamCommand = 7, + CXComment_TParamCommand = 8, + CXComment_VerbatimBlockCommand = 9, + CXComment_VerbatimBlockLine = 10, + CXComment_VerbatimLine = 11, + CXComment_FullComment = 12 + + enum CXCommentInlineCommandRenderKind: + CXCommentInlineCommandRenderKind_Normal + CXCommentInlineCommandRenderKind_Bold + CXCommentInlineCommandRenderKind_Monospaced + CXCommentInlineCommandRenderKind_Emphasized + CXCommentInlineCommandRenderKind_Anchor + + enum CXCommentParamPassDirection: + CXCommentParamPassDirection_In + CXCommentParamPassDirection_Out + CXCommentParamPassDirection_InOut + + CXCommentKind clang_Comment_getKind(CXComment Comment) + unsigned clang_Comment_getNumChildren(CXComment Comment) + CXComment clang_Comment_getChild(CXComment Comment, unsigned ChildIdx) + unsigned clang_Comment_isWhitespace(CXComment Comment) + unsigned clang_InlineContentComment_hasTrailingNewline(CXComment Comment) + CXString clang_TextComment_getText(CXComment Comment) + CXString clang_InlineCommandComment_getCommandName(CXComment Comment) + CXCommentInlineCommandRenderKind clang_InlineCommandComment_getRenderKind(CXComment Comment) + unsigned clang_InlineCommandComment_getNumArgs(CXComment Comment) + CXString clang_InlineCommandComment_getArgText(CXComment Comment, unsigned ArgIdx) + CXString clang_HTMLTagComment_getTagName(CXComment Comment) + unsigned clang_HTMLStartTagComment_isSelfClosing(CXComment Comment) + unsigned clang_HTMLStartTag_getNumAttrs(CXComment Comment) + CXString clang_HTMLStartTag_getAttrName(CXComment Comment, unsigned AttrIdx) + CXString clang_HTMLStartTag_getAttrValue(CXComment Comment, unsigned AttrIdx) + CXString clang_BlockCommandComment_getCommandName(CXComment Comment) + unsigned clang_BlockCommandComment_getNumArgs(CXComment Comment) + CXString clang_BlockCommandComment_getArgText(CXComment Comment, unsigned ArgIdx) + CXComment clang_BlockCommandComment_getParagraph(CXComment Comment) + CXString clang_ParamCommandComment_getParamName(CXComment Comment) + unsigned clang_ParamCommandComment_isParamIndexValid(CXComment Comment) + unsigned clang_ParamCommandComment_getParamIndex(CXComment Comment) + unsigned clang_ParamCommandComment_isDirectionExplicit(CXComment Comment) + CXCommentParamPassDirection clang_ParamCommandComment_getDirection(CXComment Comment) + CXString clang_TParamCommandComment_getParamName(CXComment Comment) + unsigned clang_TParamCommandComment_isParamPositionValid(CXComment Comment) + unsigned clang_TParamCommandComment_getDepth(CXComment Comment) + unsigned clang_TParamCommandComment_getIndex(CXComment Comment, unsigned Depth) + CXString clang_VerbatimBlockLineComment_getText(CXComment Comment) + CXString clang_VerbatimLineComment_getText(CXComment Comment) + CXString clang_HTMLTagComment_getAsString(CXComment Comment) + CXString clang_FullComment_getAsHTML(CXComment Comment) + CXString clang_FullComment_getAsXML(CXComment Comment) + + ctypedef struct CXAPISetImpl: + pass + ctypedef CXAPISetImpl* CXAPISet + diff --git a/clang/bindings/python/clang/clang_c.pyx b/clang/bindings/python/clang/clang_c.pyx new file mode 100644 --- /dev/null +++ b/clang/bindings/python/clang/clang_c.pyx @@ -0,0 +1,14 @@ +#cython: language_level=3 + +cimport clang_c + +cdef class Index: + cdef clang_c.CXIndex index + + def __init__(self, exclude_pch: bool = False, diagnostics: bool = False): + self.index = clang_c.clang_createIndex(exclude_pch, diagnostics) + + def __del__(self): + if self.index is not NULL: + clang_c.clang_disposeIndex(self.index) + self.index = NULL diff --git a/llvm/bindings/python/llvm/llvm_c.pxd b/llvm/bindings/python/llvm/llvm_c.pxd new file mode 100644 --- /dev/null +++ b/llvm/bindings/python/llvm/llvm_c.pxd @@ -0,0 +1,1378 @@ +#cython: language_level=3 + +from libc.stdint cimport uint64_t, uint32_t, int64_t, uint8_t, int32_t + +cdef extern from "llvm-c/Error.h": + ctypedef struct LLVMOpaqueError: + pass + ctypedef LLVMOpaqueError *LLVMErrorRef + ctypedef const void *LLVMErrorTypeId + + LLVMErrorTypeId LLVMGetErrorTypeId(LLVMErrorRef Err) + void LLVMConsumeError(LLVMErrorRef Err) + char *LLVMGetErrorMessage(LLVMErrorRef Err) + void LLVMDisposeErrorMessage(char *ErrMsg) + LLVMErrorTypeId LLVMGetStringErrorTypeId() + LLVMErrorRef LLVMCreateStringError(const char *ErrMsg) + +cdef extern from "llvm-c/ErrorHandling.h": + ctypedef void(*LLVMFatalErrorHandler)(const char *Reason) + + void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler) + void LLVMResetFatalErrorHandler() + void LLVMEnablePrettyStackTrace() + +# Due to the way Cython handles ctypedef and structs we have to pull some hacky +# stuff to define the opaque struct and then typedef it, but broadly we end up +# with something equivalent which is a typedef that is a pointer to an opaque +# struct. Issue created to track this behavior at: +# https://github.com/cython/cython/issues/5304 +# +cdef extern from "llvm-c/Types.h": + ctypedef int LLVMBool + + ctypedef struct LLVMOpaqueMemoryBuffer: + pass + ctypedef LLVMOpaqueMemoryBuffer* LLVMMemoryBufferRef + + ctypedef struct LLVMOpaqueContext: + pass + ctypedef LLVMOpaqueContext* LLVMContextRef + + ctypedef struct LLVMOpaqueModule: + pass + ctypedef LLVMOpaqueModule* LLVMModuleRef + + ctypedef struct LLVMOpaqueType: + pass + ctypedef LLVMOpaqueType* LLVMTypeRef + + ctypedef struct LLVMOpaqueValue: + pass + ctypedef LLVMOpaqueValue* LLVMValueRef + + ctypedef struct LLVMOpaqueBasicBlock: + pass + ctypedef LLVMOpaqueBasicBlock* LLVMBasicBlockRef + + ctypedef struct LLVMOpaqueMetadata: + pass + ctypedef LLVMOpaqueMetadata* LLVMMetadataRef + + ctypedef struct LLVMOpaqueNamedMDNode: + pass + ctypedef LLVMOpaqueNamedMDNode* LLVMNamedMDNodeRef + + ctypedef struct LLVMOpaqueValueMetadataEntry: + pass + ctypedef LLVMOpaqueValueMetadataEntry LLVMValueMetadataEntry + + ctypedef struct LLVMOpaqueBuilder: + pass + ctypedef LLVMOpaqueBuilder* LLVMBuilderRef + + ctypedef struct LLVMOpaqueDIBuilder: + pass + ctypedef LLVMOpaqueDIBuilder* LLVMDIBuilderRef + + ctypedef struct LLVMOpaqueModuleProvider: + pass + ctypedef LLVMOpaqueModuleProvider* LLVMModuleProviderRef + + ctypedef struct LLVMOpaquePassManager: + pass + ctypedef LLVMOpaquePassManager* LLVMPassManagerRef + + ctypedef struct LLVMOpaquePassRegistry: + pass + ctypedef LLVMOpaquePassRegistry* LLVMPassRegistryRef + + ctypedef struct LLVMOpaqueUse: + pass + ctypedef LLVMOpaqueUse* LLVMUseRef + + ctypedef struct LLVMOpaqueAttributeRef: + pass + ctypedef LLVMOpaqueAttributeRef* LLVMAttributeRef + + ctypedef struct LLVMOpaqueDiagnosticInfo: + pass + ctypedef LLVMOpaqueDiagnosticInfo* LLVMDiagnosticInfoRef + + ctypedef struct LLVMComdat: + pass + ctypedef LLVMComdat* LLVMComdatRef + + ctypedef struct LLVMOpaqueModuleFlagEntry: + pass + ctypedef LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry + + ctypedef struct LLVMOpaqueJITEventListener: + pass + ctypedef LLVMOpaqueJITEventListener* LLVMJITEventListenerRef + + ctypedef struct LLVMOpaqueBinary: + pass + ctypedef LLVMOpaqueBinary* LLVMBinaryRef + + +cdef extern from "llvm-c/Core.h": + ctypedef enum LLVMOpcode: + #Terminator Instructions + LLVMRet = 1, + LLVMBr = 2, + LLVMSwitch = 3, + LLVMIndirectBr = 4, + LLVMInvoke = 5, + # removed 6 due to API changes + LLVMUnreachable = 7, + LLVMCallBr = 67, + # Standard Unary Operators + LLVMFNeg = 66, + # Standard Binary Operators + LLVMAdd = 8, + LLVMFAdd = 9, + LLVMSub = 10, + LLVMFSub = 11, + LLVMMul = 12, + LLVMFMul = 13, + LLVMUDiv = 14, + LLVMSDiv = 15, + LLVMFDiv = 16, + LLVMURem = 17, + LLVMSRem = 18, + LLVMFRem = 19, + # Logical Operators + LLVMShl = 20, + LLVMLShr = 21, + LLVMAShr = 22, + LLVMAnd = 23, + LLVMOr = 24, + LLVMXor = 25, + # Memory Operators + LLVMAlloca = 26, + LLVMLoad = 27, + LLVMStore = 28, + LLVMGetElementPtr = 29, + # Cast Operators + LLVMTrunc = 30, + LLVMZExt = 31, + LLVMSExt = 32, + LLVMFPToUI = 33, + LLVMFPToSI = 34, + LLVMUIToFP = 35, + LLVMSIToFP = 36, + LLVMFPTrunc = 37, + LLVMFPExt = 38, + LLVMPtrToInt = 39, + LLVMIntToPtr = 40, + LLVMBitCast = 41, + LLVMAddrSpaceCast = 60, + # Other Operators + LLVMICmp = 42, + LLVMFCmp = 43, + LLVMPHI = 44, + LLVMCall = 45, + LLVMSelect = 46, + LLVMUserOp1 = 47, + LLVMUserOp2 = 48, + LLVMVAArg = 49, + LLVMExtractElement = 50, + LLVMInsertElement = 51, + LLVMShuffleVector = 52, + LLVMExtractValue = 53, + LLVMInsertValue = 54, + LLVMFreeze = 68, + # Atomic operators + LLVMFence = 55, + LLVMAtomicCmpXchg = 56, + LLVMAtomicRMW = 57, + # Exception Handling Operators + LLVMResume = 58, + LLVMLandingPad = 59, + LLVMCleanupRet = 61, + LLVMCatchRet = 62, + LLVMCatchPad = 63, + LLVMCleanupPad = 64, + LLVMCatchSwitch = 65 + + ctypedef enum LLVMTypeKind: + LLVMVoidTypeKind, # type with no size + LLVMHalfTypeKind, #16 bit floating point type + LLVMFloatTypeKind, # 32 bit floating point type + LLVMDoubleTypeKind, # 64 bit floating point type + LLVMX86_FP80TypeKind, # 80 bit floating point type(X87) + LLVMFP128TypeKind, # 128 bit floating point type(112 - bit mantissa) + LLVMPPC_FP128TypeKind, # 128 bit floating point type(two 64 - bits) + LLVMLabelTypeKind, # Labels + LLVMIntegerTypeKind, # Arbitrary bit width integers + LLVMFunctionTypeKind, # Functions + LLVMStructTypeKind, # Structures + LLVMArrayTypeKind, # Arrays + LLVMPointerTypeKind, # Pointers + LLVMVectorTypeKind, # Fixed width SIMD vector type + LLVMMetadataTypeKind, # Metadata + LLVMX86_MMXTypeKind, # X86 MMX + LLVMTokenTypeKind, # Tokens + LLVMScalableVectorTypeKind, # Scalable SIMD vector type + LLVMBFloatTypeKind, # 16 bit brain floating point type + LLVMX86_AMXTypeKind, # X86 AMX + LLVMTargetExtTypeKind, # Target extension type + + ctypedef enum LLVMLinkage: + LLVMExternalLinkage, # Externally visible function */ + LLVMAvailableExternallyLinkage, + LLVMLinkOnceAnyLinkage, # Keep one copy of function when linking (inline)*/ + LLVMLinkOnceODRLinkage, # Same, but only replaced by something + # equivalent. */ + LLVMLinkOnceODRAutoHideLinkage, # Obsolete */ + LLVMWeakAnyLinkage, # Keep one copy of function when linking (weak) */ + LLVMWeakODRLinkage, # Same, but only replaced by something + # equivalent. */ + LLVMAppendingLinkage, # Special purpose, only applies to global arrays */ + LLVMInternalLinkage, # Rename collisions when linking (static + # functions) */ + LLVMPrivateLinkage, # Like Internal, but omit from symbol table */ + LLVMDLLImportLinkage, # Obsolete */ + LLVMDLLExportLinkage, # Obsolete */ + LLVMExternalWeakLinkage, # ExternalWeak linkage description */ + LLVMGhostLinkage, # Obsolete */ + LLVMCommonLinkage, # Tentative definitions */ + LLVMLinkerPrivateLinkage, # Like Private, but linker removes. */ + LLVMLinkerPrivateWeakLinkage # Like LinkerPrivate, but is weak. */ + + ctypedef enum LLVMVisibility: + LLVMDefaultVisibility, # The GV is visible */ + LLVMHiddenVisibility, # The GV is hidden */ + LLVMProtectedVisibility # The GV is protected */ + + ctypedef enum LLVMUnnamedAddr: + LLVMNoUnnamedAddr, # Address of the GV is significant. */ + LLVMLocalUnnamedAddr, # Address of the GV is locally insignificant. */ + LLVMGlobalUnnamedAddr # Address of the GV is globally insignificant. */ + + ctypedef enum LLVMDLLStorageClass: + LLVMDefaultStorageClass = 0, + LLVMDLLImportStorageClass = 1, # Function to be imported from DLL. */ + LLVMDLLExportStorageClass = 2 # Function to be accessible from DLL. */ + + ctypedef enum LLVMCallConv: + LLVMCCallConv = 0, + LLVMFastCallConv = 8, + LLVMColdCallConv = 9, + LLVMGHCCallConv = 10, + LLVMHiPECallConv = 11, + LLVMWebKitJSCallConv = 12, + LLVMAnyRegCallConv = 13, + LLVMPreserveMostCallConv = 14, + LLVMPreserveAllCallConv = 15, + LLVMSwiftCallConv = 16, + LLVMCXXFASTTLSCallConv = 17, + LLVMX86StdcallCallConv = 64, + LLVMX86FastcallCallConv = 65, + LLVMARMAPCSCallConv = 66, + LLVMARMAAPCSCallConv = 67, + LLVMARMAAPCSVFPCallConv = 68, + LLVMMSP430INTRCallConv = 69, + LLVMX86ThisCallCallConv = 70, + LLVMPTXKernelCallConv = 71, + LLVMPTXDeviceCallConv = 72, + LLVMSPIRFUNCCallConv = 75, + LLVMSPIRKERNELCallConv = 76, + LLVMIntelOCLBICallConv = 77, + LLVMX8664SysVCallConv = 78, + LLVMWin64CallConv = 79, + LLVMX86VectorCallCallConv = 80, + LLVMHHVMCallConv = 81, + LLVMHHVMCCallConv = 82, + LLVMX86INTRCallConv = 83, + LLVMAVRINTRCallConv = 84, + LLVMAVRSIGNALCallConv = 85, + LLVMAVRBUILTINCallConv = 86, + LLVMAMDGPUVSCallConv = 87, + LLVMAMDGPUGSCallConv = 88, + LLVMAMDGPUPSCallConv = 89, + LLVMAMDGPUCSCallConv = 90, + LLVMAMDGPUKERNELCallConv = 91, + LLVMX86RegCallCallConv = 92, + LLVMAMDGPUHSCallConv = 93, + LLVMMSP430BUILTINCallConv = 94, + LLVMAMDGPULSCallConv = 95, + LLVMAMDGPUESCallConv = 96 + + ctypedef enum LLVMValueKind: + LLVMArgumentValueKind, + LLVMBasicBlockValueKind, + LLVMMemoryUseValueKind, + LLVMMemoryDefValueKind, + LLVMMemoryPhiValueKind, + LLVMFunctionValueKind, + LLVMGlobalAliasValueKind, + LLVMGlobalIFuncValueKind, + LLVMGlobalVariableValueKind, + LLVMBlockAddressValueKind, + LLVMConstantExprValueKind, + LLVMConstantArrayValueKind, + LLVMConstantStructValueKind, + LLVMConstantVectorValueKind, + LLVMUndefValueValueKind, + LLVMConstantAggregateZeroValueKind, + LLVMConstantDataArrayValueKind, + LLVMConstantDataVectorValueKind, + LLVMConstantIntValueKind, + LLVMConstantFPValueKind, + LLVMConstantPointerNullValueKind, + LLVMConstantTokenNoneValueKind, + LLVMMetadataAsValueValueKind, + LLVMInlineAsmValueKind, + LLVMInstructionValueKind, + LLVMPoisonValueValueKind, + LLVMConstantTargetNoneValueKind, + + ctypedef enum LLVMIntPredicate: + LLVMIntEQ = 32, # equal + LLVMIntNE, # not equal + LLVMIntUGT, # unsigned greater than + LLVMIntUGE, # unsigned greater or equal + LLVMIntULT, # unsigned less than + LLVMIntULE, # unsigned less or equal + LLVMIntSGT, # signed greater than + LLVMIntSGE, # signed greater or equal + LLVMIntSLT, # signed less than + LLVMIntSLE #signed less or equal + + ctypedef enum LLVMRealPredicate: + LLVMRealPredicateFalse, # Always false (always folded) + LLVMRealOEQ, # True if ordered and equal + LLVMRealOGT, # True if ordered and greater than + LLVMRealOGE, # True if ordered and greater than or equal + LLVMRealOLT, # True if ordered and less than + LLVMRealOLE, # True if ordered and less than or equal + LLVMRealONE, # True if ordered and operands are unequal + LLVMRealORD, # True if ordered (no nans) + LLVMRealUNO, # True if unordered: isnan(X) | isnan(Y) + LLVMRealUEQ, # True if unordered or equal + LLVMRealUGT, # True if unordered or greater than + LLVMRealUGE, # True if unordered, greater than, or equal + LLVMRealULT, # True if unordered or less than + LLVMRealULE, # True if unordered, less than, or equal + LLVMRealUNE, # True if unordered or not equal + LLVMRealPredicateTrue # Always true (always folded) + + ctypedef enum LLVMLandingPadClauseTy: + LLVMLandingPadCatch, # A catch clause * / + LLVMLandingPadFilter # A filter clause * / + + ctypedef enum LLVMThreadLocalMode: + LLVMNotThreadLocal = 0, + LLVMGeneralDynamicTLSModel, + LLVMLocalDynamicTLSModel, + LLVMInitialExecTLSModel, + LLVMLocalExecTLSModel + + ctypedef enum LLVMAtomicOrdering: + LLVMAtomicOrderingNotAtomic = 0, # A load or store which is not atomic + LLVMAtomicOrderingUnordered = 1, # Lowest level of atomicity, guarantees somewhat sane results, lock free. + LLVMAtomicOrderingMonotonic = 2, # guarantees that if you take all the operations affecting a specific + # address, a consistent ordering exists + LLVMAtomicOrderingAcquire = 4, # Acquire provides a barrier of the sort necessary to acquire a lock to + # access other memory with normal loads and stores. + LLVMAtomicOrderingRelease = 5, # Release is similar to Acquire, but with a barrier of the sort necessary + # to release a lock. + LLVMAtomicOrderingAcquireRelease = 6, # provides both an Acquire and a Release barrier (for fences and + # operations which both read and write memory). + LLVMAtomicOrderingSequentiallyConsistent = 7 # provides Acquire semantics for loads and Release semantics + # for stores. Additionally, it guarantees that a total ordering + # exists between all SequentiallyConsistent operations. + + ctypedef enum LLVMAtomicRMWBinOp: + LLVMAtomicRMWBinOpXchg, # Set the new value and return the one old + LLVMAtomicRMWBinOpAdd, # Add a value and return the old one + LLVMAtomicRMWBinOpSub, # Subtract a value and return the old one + LLVMAtomicRMWBinOpAnd, # And a value and return the old one + LLVMAtomicRMWBinOpNand, # Not-And a value and return the old one + LLVMAtomicRMWBinOpOr, # OR a value and return the old one + LLVMAtomicRMWBinOpXor, # Xor a value and return the old one + LLVMAtomicRMWBinOpMax, # Sets the value if it's greater than the original using a signed comparison and + # return the old one + LLVMAtomicRMWBinOpMin, # Sets the value if it's Smaller than the original using a signed comparison and + # return the old one + LLVMAtomicRMWBinOpUMax, # Sets the value if it's greater than the original using an unsigned comparison + # and return the old one + LLVMAtomicRMWBinOpUMin, # Sets the value if it's greater than the original using an unsigned comparison + # and return the old one + LLVMAtomicRMWBinOpFAdd, # Add a floating point value and return the old one + LLVMAtomicRMWBinOpFSub, # Subtract a floating point value and return the old one + LLVMAtomicRMWBinOpFMax, # Sets the value if it's greater than the original using an floating point + # comparison and return the old one + LLVMAtomicRMWBinOpFMin, # Sets the value if it's smaller than the original using an floating point + # comparison and return the old one + + ctypedef enum LLVMDiagnosticSeverity: + LLVMDSError, + LLVMDSWarning, + LLVMDSRemark, + LLVMDSNote + + ctypedef enum LLVMInlineAsmDialect: + LLVMInlineAsmDialectATT, + LLVMInlineAsmDialectIntel + + ctypedef enum LLVMModuleFlagBehavior: + LLVMModuleFlagBehaviorError, + LLVMModuleFlagBehaviorWarning, + LLVMModuleFlagBehaviorRequire, + LLVMModuleFlagBehaviorOverride, + LLVMModuleFlagBehaviorAppend, + LLVMModuleFlagBehaviorAppendUnique, + + ctypedef enum LLVMAttribute: + LLVMAttributeReturnIndex = 0U, + LLVMAttributeFunctionIndex = -1, + + ctypedef unsigned LLVMAttributeIndex + + void LLVMInitializeCore(LLVMPassRegistryRef R) + void LLVMShutdown() + void LLVMGetVersion(unsigned *Major, unsigned *Minor, unsigned *Patch) + char *LLVMCreateMessage(const char *Message) + void LLVMDisposeMessage(char *Message) + + ctypedef void(*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *) + ctypedef void(*LLVMYieldCallback)(LLVMContextRef, void *) + + LLVMContextRef LLVMContextCreate() + LLVMContextRef LLVMGetGlobalContext() + void LLVMContextSetDiagnosticHandler(LLVMContextRef C, LLVMDiagnosticHandler Handler, void *DiagnosticContext) + LLVMDiagnosticHandler LLVMContextGetDiagnosticHandler(LLVMContextRef C) + void *LLVMContextGetDiagnosticContext(LLVMContextRef C) + void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback, void *OpaqueHandle) + LLVMBool LLVMContextShouldDiscardValueNames(LLVMContextRef C) + void LLVMContextDispose(LLVMContextRef C) + char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI) + LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI) + unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char *Name, unsigned SLen) + unsigned LLVMGetMDKindID(const char *Name, unsigned SLen) + unsigned LLVMGetEnumAttributeKindForName(const char *Name, size_t SLen) + unsigned LLVMGetLastEnumAttributeKind() + LLVMAttributeRef LLVMCreateEnumAttribute(LLVMContextRef C, unsigned KindID, uint64_t Val) + unsigned LLVMGetEnumAttributeKind(LLVMAttributeRef A) + uint64_t LLVMGetEnumAttributeValue(LLVMAttributeRef A) + LLVMAttributeRef LLVMCreateTypeAttribute(LLVMContextRef C, unsigned KindID, LLVMTypeRef type_ref) + LLVMTypeRef LLVMGetTypeAttributeValue(LLVMAttributeRef A) + LLVMAttributeRef LLVMCreateStringAttribute(LLVMContextRef C, const char *K, unsigned KLength, const char *V, + unsigned VLength) + const char *LLVMGetStringAttributeKind(LLVMAttributeRef A, unsigned *Length) + const char *LLVMGetStringAttributeValue(LLVMAttributeRef A, unsigned *Length) + LLVMBool LLVMIsEnumAttribute(LLVMAttributeRef A) + LLVMBool LLVMIsStringAttribute(LLVMAttributeRef A) + LLVMBool LLVMIsTypeAttribute(LLVMAttributeRef A) + LLVMTypeRef LLVMGetTypeByName2(LLVMContextRef C, const char *Name) + LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID) + LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID, LLVMContextRef C) + LLVMModuleRef LLVMCloneModule(LLVMModuleRef M) + void LLVMDisposeModule(LLVMModuleRef M) + const char *LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len) + void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len) + const char *LLVMGetSourceFileName(LLVMModuleRef M, size_t *Len) + void LLVMSetSourceFileName(LLVMModuleRef M, const char *Name, size_t Len) + const char *LLVMGetDataLayoutStr(LLVMModuleRef M) + const char *LLVMGetDataLayout(LLVMModuleRef M) + void LLVMSetDataLayout(LLVMModuleRef M, const char *DataLayoutStr) + const char *LLVMGetTarget(LLVMModuleRef M) + void LLVMSetTarget(LLVMModuleRef M, const char *Triple) + LLVMModuleFlagEntry *LLVMCopyModuleFlagsMetadata(LLVMModuleRef M, size_t *Len) + void LLVMDisposeModuleFlagsMetadata(LLVMModuleFlagEntry *Entries) + LLVMModuleFlagBehavior LLVMModuleFlagEntriesGetFlagBehavior(LLVMModuleFlagEntry *Entries, unsigned Index) + const char *LLVMModuleFlagEntriesGetKey(LLVMModuleFlagEntry *Entries, unsigned Index, size_t *Len) + LLVMMetadataRef LLVMModuleFlagEntriesGetMetadata(LLVMModuleFlagEntry *Entries, unsigned Index) + LLVMMetadataRef LLVMGetModuleFlag(LLVMModuleRef M, const char *Key, size_t KeyLen) + void LLVMAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior, const char *Key, size_t KeyLen, + LLVMMetadataRef Val) + void LLVMDumpModule(LLVMModuleRef M) + LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename, char ** ErrorMessage) + char *LLVMPrintModuleToString(LLVMModuleRef M) + const char *LLVMGetModuleInlineAsm(LLVMModuleRef M, size_t *Len) + void LLVMSetModuleInlineAsm2(LLVMModuleRef M, const char *Asm, size_t Len) + void LLVMAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm, size_t Len) + LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty, char *AsmString, size_t AsmStringSize, char *Constraints, + size_t ConstraintsSize, LLVMBool HasSideEffects, LLVMBool IsAlignStack, + LLVMInlineAsmDialect Dialect, LLVMBool CanThrow) + LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M) + LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name) + LLVMNamedMDNodeRef LLVMGetFirstNamedMetadata(LLVMModuleRef M) + LLVMNamedMDNodeRef LLVMGetLastNamedMetadata(LLVMModuleRef M) + LLVMNamedMDNodeRef LLVMGetNextNamedMetadata(LLVMNamedMDNodeRef NamedMDNode) + LLVMNamedMDNodeRef LLVMGetPreviousNamedMetadata(LLVMNamedMDNodeRef NamedMDNode) + LLVMNamedMDNodeRef LLVMGetNamedMetadata(LLVMModuleRef M, const char *Name, size_t NameLen) + LLVMNamedMDNodeRef LLVMGetOrInsertNamedMetadata(LLVMModuleRef M, const char *Name, size_t NameLen) + const char *LLVMGetNamedMetadataName(LLVMNamedMDNodeRef NamedMD, size_t *NameLen) + unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char *Name) + void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char *Name, LLVMValueRef *Dest) + void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char *Name, LLVMValueRef Val) + const char *LLVMGetDebugLocDirectory(LLVMValueRef Val, unsigned *Length) + const char *LLVMGetDebugLocFilename(LLVMValueRef Val, unsigned *Length) + unsigned LLVMGetDebugLocLine(LLVMValueRef Val) + unsigned LLVMGetDebugLocColumn(LLVMValueRef Val) + LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name, LLVMTypeRef FunctionTy) + LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name) + LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M) + LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M) + LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn) + LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn) + void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm) + LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty) + LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty) + LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty) + void LLVMDumpType(LLVMTypeRef Val) + char *LLVMPrintTypeToString(LLVMTypeRef Val) + LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMInt128TypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits) + LLVMTypeRef LLVMInt1Type() + LLVMTypeRef LLVMInt8Type() + LLVMTypeRef LLVMInt16Type() + LLVMTypeRef LLVMInt32Type() + LLVMTypeRef LLVMInt64Type() + LLVMTypeRef LLVMInt128Type() + LLVMTypeRef LLVMIntType(unsigned NumBits) + unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy) + LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMBFloatTypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMHalfType() + LLVMTypeRef LLVMBFloatType() + LLVMTypeRef LLVMFloatType() + LLVMTypeRef LLVMDoubleType() + LLVMTypeRef LLVMX86FP80Type() + LLVMTypeRef LLVMFP128Type() + LLVMTypeRef LLVMPPCFP128Type() + LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType, LLVMTypeRef *ParamTypes, unsigned ParamCount, + LLVMBool IsVarArg) + LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy) + LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy) + unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy) + void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest) + LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes, unsigned ElementCount, + LLVMBool Packed) + LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount, LLVMBool Packed) + LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name) + const char *LLVMGetStructName(LLVMTypeRef Ty) + void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes, unsigned ElementCount, LLVMBool Packed) + unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy) + void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest) + LLVMTypeRef LLVMStructGetTypeAtIndex(LLVMTypeRef StructTy, unsigned i) + LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy) + LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy) + LLVMBool LLVMIsLiteralStruct(LLVMTypeRef StructTy) + LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty) + void LLVMGetSubtypes(LLVMTypeRef Tp, LLVMTypeRef *Arr) + unsigned LLVMGetNumContainedTypes(LLVMTypeRef Tp) + LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount) + LLVMTypeRef LLVMArrayType2(LLVMTypeRef ElementType, uint64_t ElementCount) + unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy) + uint64_t LLVMGetArrayLength2(LLVMTypeRef ArrayTy) + LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace) + LLVMBool LLVMPointerTypeIsOpaque(LLVMTypeRef Ty) + LLVMTypeRef LLVMPointerTypeInContext(LLVMContextRef C, unsigned AddressSpace) + unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy) + LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount) + LLVMTypeRef LLVMScalableVectorType(LLVMTypeRef ElementType, unsigned ElementCount) + unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy) + LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMX86AMXTypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMTokenTypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMMetadataTypeInContext(LLVMContextRef C) + LLVMTypeRef LLVMVoidType() + LLVMTypeRef LLVMLabelType() + LLVMTypeRef LLVMX86MMXType() + LLVMTypeRef LLVMX86AMXType() + LLVMTypeRef LLVMTargetExtTypeInContext(LLVMContextRef C, const char *Name, LLVMTypeRef *TypeParams, + unsigned TypeParamCount, unsigned *IntParams, unsigned IntParamCount) + LLVMTypeRef LLVMTypeOf(LLVMValueRef Val) + LLVMValueKind LLVMGetValueKind(LLVMValueRef Val) + const char *LLVMGetValueName2(LLVMValueRef Val, size_t *Length) + void LLVMSetValueName2(LLVMValueRef Val, const char *Name, size_t NameLen) + void LLVMDumpValue(LLVMValueRef Val) + const char *LLVMPrintValueToString(LLVMValueRef Val) + void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal) + LLVMBool LLVMIsConstant(LLVMValueRef Val) + LLVMBool LLVMIsUndef(LLVMValueRef Val) + LLVMBool LLVMIsPoison(LLVMValueRef Val) + LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val) + LLVMValueRef LLVMIsAValueAsMetadata(LLVMValueRef Val) + LLVMValueRef LLVMIsAMDString(LLVMValueRef Val) + LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val) + LLVMUseRef LLVMGetNextUse(LLVMUseRef U) + LLVMValueRef LLVMGetUser(LLVMUseRef U) + LLVMValueRef LLVMGetUsedValue(LLVMUseRef U) + LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index) + LLVMUseRef LLVMGetOperandUse(LLVMValueRef Val, unsigned Index) + void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val) + int LLVMGetNumOperands(LLVMValueRef Val) + LLVMValueRef LLVMConstNull(LLVMTypeRef Ty) + LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty) + LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty) + LLVMValueRef LLVMGetPoison(LLVMTypeRef Ty) + LLVMBool LLVMIsNull(LLVMValueRef Val) + LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty) + LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N, LLVMBool SignExtend) + LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy, unsigned NumWords, const uint64_t Words[]) + LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text, uint8_t Radix) + LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text, unsigned SLen, uint8_t Radix) + LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N) + LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text) + LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text, unsigned SLen) + unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal) + long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal) + double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo) + LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str, unsigned Length, + LLVMBool DontNullTerminate) + LLVMValueRef LLVMConstString(const char *Str, unsigned Length, LLVMBool DontNullTerminate) + LLVMBool LLVMIsConstantString(LLVMValueRef c) + const char *LLVMGetAsString(LLVMValueRef c, size_t *Length) + LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed) + LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed) + LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy, LLVMValueRef *ConstantVals, unsigned Length) + LLVMValueRef LLVMConstArray2(LLVMTypeRef ElementTy, LLVMValueRef *ConstantVals, uint64_t Length) + LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy, LLVMValueRef *ConstantVals, unsigned Count) + LLVMValueRef LLVMGetAggregateElement(LLVMValueRef C, unsigned Idx) + LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size) + LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal) + LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty) + LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty) + LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal) + LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal) + LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal) + LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal) + LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate, LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate, LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) + LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal, LLVMValueRef *ConstantIndices, + unsigned NumIndices) + LLVMValueRef LLVMConstInBoundsGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal, LLVMValueRef *ConstantIndices, + unsigned NumIndices) + LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType, LLVMBool isSigned) + LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) + LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition, LLVMValueRef ConstantIfTrue, + LLVMValueRef ConstantIfFalse) + LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant, LLVMValueRef IndexConstant) + LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant, LLVMValueRef ElementValueConstant, + LLVMValueRef IndexConstant) + LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant, LLVMValueRef VectorBConstant, + LLVMValueRef MaskConstant) + LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB) + LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global) + LLVMBool LLVMIsDeclaration(LLVMValueRef Global) + LLVMLinkage LLVMGetLinkage(LLVMValueRef Global) + void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage) + const char *LLVMGetSection(LLVMValueRef Global) + void LLVMSetSection(LLVMValueRef Global, const char *Section) + LLVMVisibility LLVMGetVisibility(LLVMValueRef Global) + void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz) + LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global) + void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class) + LLVMUnnamedAddr LLVMGetUnnamedAddress(LLVMValueRef Global) + void LLVMSetUnnamedAddress(LLVMValueRef Global, LLVMUnnamedAddr UnnamedAddr) + LLVMTypeRef LLVMGlobalGetValueType(LLVMValueRef Global) + LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global) + void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr) + unsigned LLVMGetAlignment(LLVMValueRef V) + void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes) + void LLVMGlobalSetMetadata(LLVMValueRef Global, unsigned Kind, LLVMMetadataRef MD) + void LLVMGlobalEraseMetadata(LLVMValueRef Global, unsigned Kind) + void LLVMGlobalClearMetadata(LLVMValueRef Global) + LLVMValueMetadataEntry *LLVMGlobalCopyAllMetadata(LLVMValueRef Value, size_t *NumEntries) + void LLVMDisposeValueMetadataEntries(LLVMValueMetadataEntry *Entries) + unsigned LLVMValueMetadataEntriesGetKind(LLVMValueMetadataEntry *Entries, unsigned Index) + LLVMMetadataRef LLVMValueMetadataEntriesGetMetadata(LLVMValueMetadataEntry *Entries, unsigned Index) + LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name) + LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name, unsigned AddressSpace) + LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name) + LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M) + LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M) + LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar) + LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar) + void LLVMDeleteGlobal(LLVMValueRef GlobalVar) + LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar) + void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal) + LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar) + void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal) + LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar) + void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant) + LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar) + void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode) + LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar) + void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit) + LLVMValueRef LLVMAddAlias2(LLVMModuleRef M, LLVMTypeRef ValueTy, unsigned AddrSpace, LLVMValueRef Aliasee, + const char *Name) + LLVMValueRef LLVMGetNamedGlobalAlias(LLVMModuleRef M, const char *Name, size_t NameLen) + LLVMValueRef LLVMGetFirstGlobalAlias(LLVMModuleRef M) + LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M) + LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA) + LLVMValueRef LLVMGetPreviousGlobalAlias(LLVMValueRef GA) + LLVMValueRef LLVMAliasGetAliasee(LLVMValueRef Alias) + void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee) + void LLVMDeleteFunction(LLVMValueRef Fn) + LLVMBool LLVMHasPersonalityFn(LLVMValueRef Fn) + LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn) + void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn) + unsigned LLVMLookupIntrinsicID(const char *Name, size_t NameLen) + unsigned LLVMGetIntrinsicID(LLVMValueRef Fn) + LLVMValueRef LLVMGetIntrinsicDeclaration(LLVMModuleRef Mod, unsigned ID, LLVMTypeRef *ParamTypes, size_t ParamCount) + LLVMTypeRef LLVMIntrinsicGetType(LLVMContextRef Ctx, unsigned ID, LLVMTypeRef *ParamTypes, size_t ParamCount) + const char *LLVMIntrinsicGetName(unsigned ID, size_t *NameLength) + const char *LLVMIntrinsicCopyOverloadedName(unsigned ID, + LLVMTypeRef *ParamTypes, + size_t ParamCount, + size_t *NameLength) + const char *LLVMIntrinsicCopyOverloadedName2(LLVMModuleRef Mod, unsigned ID, + LLVMTypeRef *ParamTypes, + size_t ParamCount, + size_t *NameLength) + LLVMBool LLVMIntrinsicIsOverloaded(unsigned ID) + unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn) + void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC) + const char *LLVMGetGC(LLVMValueRef Fn) + void LLVMSetGC(LLVMValueRef Fn, const char *Name) + void LLVMAddAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, + LLVMAttributeRef A); + unsigned LLVMGetAttributeCountAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx); + void LLVMGetAttributesAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, + LLVMAttributeRef *Attrs); + LLVMAttributeRef LLVMGetEnumAttributeAtIndex(LLVMValueRef F, + LLVMAttributeIndex Idx, + unsigned KindID); + LLVMAttributeRef LLVMGetStringAttributeAtIndex(LLVMValueRef F, + LLVMAttributeIndex Idx, + const char *K, unsigned KLen); + void LLVMRemoveEnumAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, + unsigned KindID); + void LLVMRemoveStringAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, + const char *K, unsigned KLen); + void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A, + const char *V); + unsigned LLVMCountParams(LLVMValueRef Fn); + void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params); + LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index); + LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst); + LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn); + LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn); + LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg); + LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg); + void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned Align); + LLVMValueRef LLVMAddGlobalIFunc(LLVMModuleRef M, + const char *Name, size_t NameLen, + LLVMTypeRef Ty, unsigned AddrSpace, + LLVMValueRef Resolver); + LLVMValueRef LLVMGetNamedGlobalIFunc(LLVMModuleRef M, + const char *Name, size_t NameLen); + LLVMValueRef LLVMGetFirstGlobalIFunc(LLVMModuleRef M); + LLVMValueRef LLVMGetLastGlobalIFunc(LLVMModuleRef M); + LLVMValueRef LLVMGetNextGlobalIFunc(LLVMValueRef IFunc); + LLVMValueRef LLVMGetPreviousGlobalIFunc(LLVMValueRef IFunc); + LLVMValueRef LLVMGetGlobalIFuncResolver(LLVMValueRef IFunc); + void LLVMSetGlobalIFuncResolver(LLVMValueRef IFunc, LLVMValueRef Resolver); + void LLVMEraseGlobalIFunc(LLVMValueRef IFunc); + void LLVMRemoveGlobalIFunc(LLVMValueRef IFunc); + LLVMMetadataRef LLVMMDStringInContext2(LLVMContextRef C, const char *Str, + size_t SLen); + LLVMMetadataRef LLVMMDNodeInContext2(LLVMContextRef C, LLVMMetadataRef *MDs, + size_t Count); + LLVMValueRef LLVMMetadataAsValue(LLVMContextRef C, LLVMMetadataRef MD); + LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Val); + const char *LLVMGetMDString(LLVMValueRef V, unsigned *Length); + unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V); + void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest); + void LLVMReplaceMDNodeOperandWith(LLVMValueRef V, unsigned Index, + LLVMMetadataRef Replacement); + LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str, + unsigned SLen); + LLVMValueRef LLVMMDString(const char *Str, unsigned SLen); + LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals, + unsigned Count); + LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count); + LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB); + LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val); + LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val); + const char *LLVMGetBasicBlockName(LLVMBasicBlockRef BB); + LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB); + LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB); + unsigned LLVMCountBasicBlocks(LLVMValueRef Fn); + void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks); + LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn); + LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn); + LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB); + LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB); + LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn); + void LLVMInsertExistingBasicBlockAfterInsertBlock(LLVMBuilderRef Builder, + LLVMBasicBlockRef BB); + void LLVMAppendExistingBasicBlock(LLVMValueRef Fn, + LLVMBasicBlockRef BB); + LLVMBasicBlockRef LLVMCreateBasicBlockInContext(LLVMContextRef C, + const char *Name); + LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C, + LLVMValueRef Fn, + const char *Name); + LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name); + LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C, + LLVMBasicBlockRef BB, + const char *Name); + LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB, + const char *Name); + void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB); + void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB); + void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos); + void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos); + LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB); + LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB); + int LLVMHasMetadata(LLVMValueRef Val); + LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID); + void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node); + LLVMValueMetadataEntry * LLVMInstructionGetAllMetadataOtherThanDebugLoc(LLVMValueRef Instr, + size_t *NumEntries); + LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst); + LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst); + LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst); + void LLVMInstructionRemoveFromParent(LLVMValueRef Inst); + void LLVMInstructionEraseFromParent(LLVMValueRef Inst); + void LLVMDeleteInstruction(LLVMValueRef Inst); + LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst); + LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst); + LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst); + LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst); + LLVMValueRef LLVMIsATerminatorInst(LLVMValueRef Inst); + unsigned LLVMGetNumArgOperands(LLVMValueRef Instr); + void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC); + void LLVMSetInstrParamAlignment(LLVMValueRef Instr, LLVMAttributeIndex Idx, + unsigned Align); + + void LLVMAddCallSiteAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, + LLVMAttributeRef A); + unsigned LLVMGetCallSiteAttributeCount(LLVMValueRef C, LLVMAttributeIndex Idx); + void LLVMGetCallSiteAttributes(LLVMValueRef C, LLVMAttributeIndex Idx, + LLVMAttributeRef *Attrs); + LLVMAttributeRef LLVMGetCallSiteEnumAttribute(LLVMValueRef C, + LLVMAttributeIndex Idx, + unsigned KindID); + LLVMAttributeRef LLVMGetCallSiteStringAttribute(LLVMValueRef C, + LLVMAttributeIndex Idx, + const char *K, unsigned KLen); + void LLVMRemoveCallSiteEnumAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, + unsigned KindID); + void LLVMRemoveCallSiteStringAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, + const char *K, unsigned KLen); + LLVMTypeRef LLVMGetCalledFunctionType(LLVMValueRef C); + LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr); + LLVMBool LLVMIsTailCall(LLVMValueRef CallInst); + void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall); + LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef InvokeInst); + LLVMBasicBlockRef LLVMGetUnwindDest(LLVMValueRef InvokeInst); + void LLVMSetNormalDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B); + void LLVMSetUnwindDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B); + unsigned LLVMGetNumSuccessors(LLVMValueRef Term); + LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, unsigned i); + void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, LLVMBasicBlockRef block); + LLVMBool LLVMIsConditional(LLVMValueRef Branch); + LLVMValueRef LLVMGetCondition(LLVMValueRef Branch); + void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond); + LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr); + LLVMTypeRef LLVMGetAllocatedType(LLVMValueRef Alloca); + LLVMBool LLVMIsInBounds(LLVMValueRef GEP); + void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds); + LLVMTypeRef LLVMGetGEPSourceElementType(LLVMValueRef GEP); + void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues, + LLVMBasicBlockRef *IncomingBlocks, unsigned Count); + unsigned LLVMCountIncoming(LLVMValueRef PhiNode); + LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index); + LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index); + unsigned LLVMGetNumIndices(LLVMValueRef Inst); + const unsigned *LLVMGetIndices(LLVMValueRef Inst); + LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C); + LLVMBuilderRef LLVMCreateBuilder(); + void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block, + LLVMValueRef Instr); + void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr); + void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block); + LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder); + void LLVMClearInsertionPosition(LLVMBuilderRef Builder); + void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr); + void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr, + const char *Name); + void LLVMDisposeBuilder(LLVMBuilderRef Builder); + LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Builder); + void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Builder, LLVMMetadataRef Loc); + void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst); + void LLVMAddMetadataToInst(LLVMBuilderRef Builder, LLVMValueRef Inst); + LLVMMetadataRef LLVMBuilderGetDefaultFPMathTag(LLVMBuilderRef Builder); + void LLVMBuilderSetDefaultFPMathTag(LLVMBuilderRef Builder, + LLVMMetadataRef FPMathTag); + void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L); + LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder); + LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef); + LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V); + LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals, + unsigned N); + LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest); + LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If, + LLVMBasicBlockRef Then, LLVMBasicBlockRef Else); + LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V, + LLVMBasicBlockRef Else, unsigned NumCases); + LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr, + unsigned NumDests); + LLVMValueRef LLVMBuildInvoke2(LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Fn, + LLVMValueRef *Args, unsigned NumArgs, + LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, + const char *Name); + LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef); + LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn); + LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty, + LLVMValueRef PersFn, unsigned NumClauses, + const char *Name); + LLVMValueRef LLVMBuildCleanupRet(LLVMBuilderRef B, LLVMValueRef CatchPad, + LLVMBasicBlockRef BB); + LLVMValueRef LLVMBuildCatchRet(LLVMBuilderRef B, LLVMValueRef CatchPad, + LLVMBasicBlockRef BB); + LLVMValueRef LLVMBuildCatchPad(LLVMBuilderRef B, LLVMValueRef ParentPad, + LLVMValueRef *Args, unsigned NumArgs, + const char *Name); + LLVMValueRef LLVMBuildCleanupPad(LLVMBuilderRef B, LLVMValueRef ParentPad, + LLVMValueRef *Args, unsigned NumArgs, + const char *Name); + LLVMValueRef LLVMBuildCatchSwitch(LLVMBuilderRef B, LLVMValueRef ParentPad, + LLVMBasicBlockRef UnwindBB, + unsigned NumHandlers, const char *Name); + void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal, LLVMBasicBlockRef Dest) + void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest); + unsigned LLVMGetNumClauses(LLVMValueRef LandingPad); + LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, unsigned Idx); + void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal); + LLVMBool LLVMIsCleanup(LLVMValueRef LandingPad); + void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val); + void LLVMAddHandler(LLVMValueRef CatchSwitch, LLVMBasicBlockRef Dest); + unsigned LLVMGetNumHandlers(LLVMValueRef CatchSwitch); + void LLVMGetHandlers(LLVMValueRef CatchSwitch, LLVMBasicBlockRef *Handlers); + LLVMValueRef LLVMGetArgOperand(LLVMValueRef Funclet, unsigned i); + void LLVMSetArgOperand(LLVMValueRef Funclet, unsigned i, LLVMValueRef value); + LLVMValueRef LLVMGetParentCatchSwitch(LLVMValueRef CatchPad); + void LLVMSetParentCatchSwitch(LLVMValueRef CatchPad, LLVMValueRef CatchSwitch); + LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildExactUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op, + LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name); + LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V, + const char *Name); + LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V, + const char *Name); + LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name); + LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name); + LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); + LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty, + LLVMValueRef Val, const char *Name); + LLVMValueRef LLVMBuildMemSet(LLVMBuilderRef B, LLVMValueRef Ptr, + LLVMValueRef Val, LLVMValueRef Len, + unsigned Align); + LLVMValueRef LLVMBuildMemCpy(LLVMBuilderRef B, + LLVMValueRef Dst, unsigned DstAlign, + LLVMValueRef Src, unsigned SrcAlign, + LLVMValueRef Size); + LLVMValueRef LLVMBuildMemMove(LLVMBuilderRef B, + LLVMValueRef Dst, unsigned DstAlign, + LLVMValueRef Src, unsigned SrcAlign, + LLVMValueRef Size); + + LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name) + LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Val, const char *Name) + LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal) + LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef PointerVal, const char *Name) + LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr) + LLVMValueRef LLVMBuildGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Pointer, LLVMValueRef *Indices, + unsigned NumIndices, const char *Name) + LLVMValueRef LLVMBuildInBoundsGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, + LLVMValueRef Pointer, LLVMValueRef *Indices, + unsigned NumIndices, const char *Name); + LLVMValueRef LLVMBuildStructGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Pointer, unsigned Idx, + const char *Name) + LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str, const char *Name) + LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str, const char *Name) + LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst) + void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile) + LLVMBool LLVMGetWeak(LLVMValueRef CmpXchgInst) + void LLVMSetWeak(LLVMValueRef CmpXchgInst, LLVMBool IsWeak) + LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst) + void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, LLVMAtomicOrdering Ordering) + LLVMAtomicRMWBinOp LLVMGetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst) + void LLVMSetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst, LLVMAtomicRMWBinOp BinOp) + LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); + LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); + LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); + LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); + LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); + LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildIntCast2(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, LLVMBool IsSigned, + const char *Name) + LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name) + LLVMOpcode LLVMGetCastOpcode(LLVMValueRef Src, LLVMBool SrcIsSigned, LLVMTypeRef DestTy, LLVMBool DestIsSigned) + LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op, + LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op, + LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); + LLVMValueRef LLVMBuildCall2(LLVMBuilderRef, LLVMTypeRef, LLVMValueRef Fn, + LLVMValueRef *Args, unsigned NumArgs, + const char *Name); + LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If, + LLVMValueRef Then, LLVMValueRef Else, + const char *Name); + LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty, + const char *Name); + LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal, + LLVMValueRef Index, const char *Name); + LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal, + LLVMValueRef EltVal, LLVMValueRef Index, + const char *Name); + LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1, + LLVMValueRef V2, LLVMValueRef Mask, + const char *Name); + LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal, + unsigned Index, const char *Name); + LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal, + LLVMValueRef EltVal, unsigned Index, + const char *Name); + LLVMValueRef LLVMBuildFreeze(LLVMBuilderRef, LLVMValueRef Val, + const char *Name); + + LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val, + const char *Name); + LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val, + const char *Name); + LLVMValueRef LLVMBuildPtrDiff2(LLVMBuilderRef, LLVMTypeRef ElemTy, + LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); + LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering, + LLVMBool singleThread, const char *Name); + LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op, + LLVMValueRef PTR, LLVMValueRef Val, + LLVMAtomicOrdering ordering, + LLVMBool singleThread); + LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr, + LLVMValueRef Cmp, LLVMValueRef New, + LLVMAtomicOrdering SuccessOrdering, + LLVMAtomicOrdering FailureOrdering, + LLVMBool SingleThread); + unsigned LLVMGetNumMaskElements(LLVMValueRef ShuffleVectorInst); + int LLVMGetUndefMaskElem(); + int LLVMGetMaskValue(LLVMValueRef ShuffleVectorInst, unsigned Elt); + + LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst); + void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, LLVMBool SingleThread); + + LLVMAtomicOrdering LLVMGetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst); + void LLVMSetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst, + LLVMAtomicOrdering Ordering); + LLVMAtomicOrdering LLVMGetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst); + void LLVMSetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst, + LLVMAtomicOrdering Ordering); + LLVMModuleProviderRef LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M); + void LLVMDisposeModuleProvider(LLVMModuleProviderRef M); + LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path, + LLVMMemoryBufferRef *OutMemBuf, + char ** OutMessage); + LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf, + char ** OutMessage); + LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData, + size_t InputDataLength, + const char *BufferName, + LLVMBool RequiresNullTerminator); + LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData, + size_t InputDataLength, + const char *BufferName); + const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf); + size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf); + void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf); + LLVMPassRegistryRef LLVMGetGlobalPassRegistry(); + LLVMPassManagerRef LLVMCreatePassManager(); + LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M); + LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP); + LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M); + LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM); + LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F); + LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM); + void LLVMDisposePassManager(LLVMPassManagerRef PM); + LLVMBool LLVMStartMultithreaded(); + void LLVMStopMultithreaded(); + LLVMBool LLVMIsMultithreaded(); + +cdef extern from "llvm-c/IRReader.h": + LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef, + LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, + char ** OutMessage); + + +cdef extern from "llvm-c/DisassemblerTypes.h": + ctypedef void* LLVMDisasmContextRef + ctypedef int (*LLVMOpInfoCallback)(void *DisInfo, uint64_t PC, uint64_t Offset, uint64_t OpSize, uint64_t InstSize, int TagType, void *TagBuf) + + ctypedef struct LLVMOpInfoSymbol1: + uint64_t Present + const char *Name + uint64_t Value + + + cdef struct LLVMOpInfo1: + LLVMOpInfoSymbol1 AddSymbol + LLVMOpInfoSymbol1 SubtractSymbol + uint64_t Value + uint64_t VariantKind + + ctypedef const char *(*LLVMSymbolLookupCallback)(void *DisInfo, uint64_t ReferenceValue, uint64_t *ReferenceType, uint64_t ReferencePC, const char **ReferenceName); + +cdef extern from "llvm-c/Disassembler.h": + LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo, + int TagType, LLVMOpInfoCallback GetOpInfo, + LLVMSymbolLookupCallback SymbolLookUp); + LLVMDisasmContextRef LLVMCreateDisasmCPU(const char *Triple, const char *CPU, + void *DisInfo, int TagType, + LLVMOpInfoCallback GetOpInfo, + LLVMSymbolLookupCallback SymbolLookUp); + LLVMDisasmContextRef LLVMCreateDisasmCPUFeatures(const char *Triple, const char *CPU, + const char *Features, void *DisInfo, int TagType, + LLVMOpInfoCallback GetOpInfo, + LLVMSymbolLookupCallback SymbolLookUp); + int LLVMSetDisasmOptions(LLVMDisasmContextRef DC, uint64_t Options); + void LLVMDisasmDispose(LLVMDisasmContextRef DC); + size_t LLVMDisasmInstruction(LLVMDisasmContextRef DC, uint8_t *Bytes, + uint64_t BytesSize, uint64_t PC, + char *OutString, size_t OutStringSize); + +cdef extern from "llvm-c/BitReader.h": + LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule, + char ** OutMessage); + LLVMBool LLVMParseBitcode2(LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutModule); + LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef, + LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutModule, char ** OutMessage); + LLVMBool LLVMParseBitcodeInContext2(LLVMContextRef ContextRef, + LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutModule); + LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef, + LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutM, char ** OutMessage); + LLVMBool LLVMGetBitcodeModuleInContext2(LLVMContextRef ContextRef, + LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutM); + LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, + char ** OutMessage); + LLVMBool LLVMGetBitcodeModule2(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM); + +cdef extern from "llvm-c/BitWriter.h": + int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path); + int LLVMWriteBitcodeToFD(LLVMModuleRef M, int FD, int ShouldClose, + int Unbuffered); + int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int Handle); + LLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M); + +cdef extern from "llvm-c/Comdat.h": + cdef enum LLVMComdatSelectionKind: + LLVMAnyComdatSelectionKind + LLVMExactMatchComdatSelectionKind + LLVMLargestComdatSelectionKind + LLVMNoDeduplicateComdatSelectionKind + LLVMSameSizeComdatSelectionKind + + LLVMComdatRef LLVMGetOrInsertComdat(LLVMModuleRef M, const char *Name); + LLVMComdatRef LLVMGetComdat(LLVMValueRef V); + void LLVMSetComdat(LLVMValueRef V, LLVMComdatRef C); + LLVMComdatSelectionKind LLVMGetComdatSelectionKind(LLVMComdatRef C); + void LLVMSetComdatSelectionKind(LLVMComdatRef C, LLVMComdatSelectionKind Kind); + +cdef extern from "llvm-c/Object.h": + cdef struct LLVMOpaqueSectionIterator: + pass + ctypedef LLVMOpaqueSectionIterator* LLVMSectionIteratorRef + + cdef struct LLVMOpaqueSymbolIterator: + pass + ctypedef LLVMOpaqueSymbolIterator* LLVMSymbolIteratorRef + + cdef struct LLVMOpaqueRelocationIterator: + pass + ctypedef LLVMOpaqueRelocationIterator LLVMRelocationIteratorRef + + cdef enum LLVMBinaryType: + LLVMBinaryTypeArchive, + LLVMBinaryTypeMachOUniversalBinary, + LLVMBinaryTypeCOFFImportFile, + LLVMBinaryTypeIR, + LLVMBinaryTypeWinRes, + LLVMBinaryTypeCOFF, + LLVMBinaryTypeELF32L, + LLVMBinaryTypeELF32B, + LLVMBinaryTypeELF64L, + LLVMBinaryTypeELF64B, + LLVMBinaryTypeMachO32L, + LLVMBinaryTypeMachO32B, + LLVMBinaryTypeMachO64L, + LLVMBinaryTypeMachO64B, + LLVMBinaryTypeWasm, + LLVMBinaryTypeOffload, + + LLVMBinaryRef LLVMCreateBinary(LLVMMemoryBufferRef MemBuf, + LLVMContextRef Context, + char **ErrorMessage) + void LLVMDisposeBinary(LLVMBinaryRef BR); + LLVMMemoryBufferRef LLVMBinaryCopyMemoryBuffer(LLVMBinaryRef BR); + LLVMBinaryType LLVMBinaryGetType(LLVMBinaryRef BR); + LLVMBinaryRef LLVMMachOUniversalBinaryCopyObjectForArch(LLVMBinaryRef BR, + const char *Arch, + size_t ArchLen, + char ** ErrorMessage); + LLVMSectionIteratorRef LLVMObjectFileCopySectionIterator(LLVMBinaryRef BR); + LLVMBool LLVMObjectFileIsSectionIteratorAtEnd(LLVMBinaryRef BR, + LLVMSectionIteratorRef SI); + LLVMSymbolIteratorRef LLVMObjectFileCopySymbolIterator(LLVMBinaryRef BR); + LLVMBool LLVMObjectFileIsSymbolIteratorAtEnd(LLVMBinaryRef BR, + LLVMSymbolIteratorRef SI); + + void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI); + + void LLVMMoveToNextSection(LLVMSectionIteratorRef SI); + void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect, + LLVMSymbolIteratorRef Sym); + + void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI); + void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI); + const char *LLVMGetSectionName(LLVMSectionIteratorRef SI); + uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI); + const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI); + uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI); + LLVMBool LLVMGetSectionContainsSymbol(LLVMSectionIteratorRef SI, + LLVMSymbolIteratorRef Sym); + LLVMRelocationIteratorRef LLVMGetRelocations(LLVMSectionIteratorRef Section); + void LLVMDisposeRelocationIterator(LLVMRelocationIteratorRef RI); + LLVMBool LLVMIsRelocationIteratorAtEnd(LLVMSectionIteratorRef Section, + LLVMRelocationIteratorRef RI); + void LLVMMoveToNextRelocation(LLVMRelocationIteratorRef RI); + const char *LLVMGetSymbolName(LLVMSymbolIteratorRef SI); + uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI); + uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI); + uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI); + LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI); + uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI); + const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI); + const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI); + diff --git a/llvm/bindings/python/llvm/llvm_c.pyx b/llvm/bindings/python/llvm/llvm_c.pyx new file mode 100644 --- /dev/null +++ b/llvm/bindings/python/llvm/llvm_c.pyx @@ -0,0 +1,1023 @@ +#cython: language_level=3 + +import weakref +from typing import Union, ClassVar, Generator, Optional + +cimport llvm_c +from libc.stdint cimport uintptr_t +from libc.stdlib cimport malloc, free + +cdef class LLVMException(Exception): + cdef llvm_c.LLVMErrorRef llvm_error + cdef llvm_c.LLVMErrorTypeId type_id + + def __init__(self, error: Union[str, bytes]): + cdef llvm_c.LLVMErrorRef error_ref + if isinstance(error, str): + error = error.encode('UTF-8') + + if isinstance(error, bytes): + message_text = error + error_ref = llvm_c.LLVMCreateStringError( message_text) + + Exception.__init__(self, error) + self.llvm_error = error_ref + self.type_id = llvm_c.LLVMGetErrorTypeId(error_ref) + + def __str__(self): + cdef char * error_message + error_message = llvm_c.LLVMGetErrorMessage(self.llvm_error) + return ( error_message).decode('UTF-8') + + @staticmethod + cdef LLVMException from_error(llvm_c.LLVMErrorRef error): + result = LLVMException.__new__(LLVMException) + result.llvm_error = error + return result + + def consume(self): + if self.llvm_error is not NULL: + llvm_c.LLVMConsumeError(self.llvm_error) + self.llvm_error = NULL + + @property + def is_string_error(self): + cdef llvm_c.LLVMErrorTypeId string_type = llvm_c.LLVMGetStringErrorTypeId() + return self.type_id == string_type + + +class LLVMConstructionException(Exception): + cls: type + + def __init__(self, cls: type): + Exception.__init__(self, cls) + self.cls = cls + + def __str__(self): + return f"Unable to construct types of {self.cls} directly." + + +cdef class MemoryBuffer: + cdef llvm_c.LLVMMemoryBufferRef buffer + + def __init__(self, input_value: Union[str, bytes]): + if isinstance(input_value, str): + input_value = input_value.encode('UTF-8') + + self.buffer = llvm_c.LLVMCreateMemoryBufferWithMemoryRangeCopy( input_value, len(input_value), NULL) + + def __del__(self): + if self.buffer is not NULL: + llvm_c.LLVMDisposeMemoryBuffer(self.buffer) + self.buffer = NULL + + cdef const char * buffer_start(self): + return llvm_c.LLVMGetBufferStart(self.buffer) + + cdef size_t buffer_size(self): + return llvm_c.LLVMGetBufferSize(self.buffer) + + @staticmethod + def with_contents_of_file(path: Union[str, bytes]) -> MemoryBuffer: + cdef llvm_c.LLVMMemoryBufferRef buffer + cdef char * message + cdef char * path_buffer + + if isinstance(path, str): + path_bytes = ( path).encode('UTF-8') + else: + path_bytes = path + + path_buffer = path_bytes + + if llvm_c.LLVMCreateMemoryBufferWithContentsOfFile(path_buffer, &buffer, &message): + raise LLVMException(message.decode('UTF-8')) + result: MemoryBuffer = MemoryBuffer.__new__(MemoryBuffer) + result.buffer = buffer + return result + + @classmethod + def with_stdin(cls) -> MemoryBuffer: + cdef llvm_c.LLVMMemoryBufferRef buffer + cdef char * message + + if llvm_c.LLVMCreateMemoryBufferWithSTDIN(&buffer, &message): + raise LLVMException(message.decode('UTF-8')) + result: MemoryBuffer = cls.__new__() + result.buffer = buffer + return result + + @classmethod + def with_bytes(cls, input_bytes: bytes, buffer_name: Union[None, str, bytes] = None) -> MemoryBuffer: + cdef llvm_c.LLVMMemoryBufferRef buffer + cdef char *string_buffer + cdef char *string_buffer_name + + if buffer_name: + if isinstance(buffer_name, str): + buffer_name = buffer_name.decode('UTF-8') + + string_buffer = input_bytes + + string_buffer_name = buffer_name + else: + string_buffer_name = NULL + + buffer = llvm_c.LLVMCreateMemoryBufferWithMemoryRangeCopy(string_buffer, len(input_bytes), string_buffer_name) + result: MemoryBuffer = cls.__new__() + result.buffer = buffer + return result + +cdef class LLVMObjectCache: + cached_values: dict[uintptr_t, weakref.ref] + context: weakref.ref[LLVMContext] + + def __init__(self, context: LLVMContext): + self.cached_values = {} + self.context = weakref.ref(context) + + cdef object get(self, llvm_c.LLVMValueRef value): + pointer = value + if pointer in self.cached_values: + weak_ref: weakref.ref = self.cached_values[pointer] + cached_value = weak_ref() + if cached_value: + return cached_value + del self.cached_values[pointer] + return None + + cdef void set(self, llvm_c.LLVMValueRef value, object instance): + pointer = value + self.cached_values[pointer] = weakref.ref(instance) + +cdef class LLVMContext: + cdef object __weakref__ + cdef llvm_c.LLVMContextRef context + cdef LLVMObjectCache object_cache + + global_context: ClassVar[LLVMContext] + + def __init__(self): + self.context = llvm_c.LLVMContextCreate() + self.object_cache = LLVMObjectCache(self) + + def __del__(self): + if self.context is not NULL: + llvm_c.LLVMContextDispose(self.context) + self.context = NULL + + @classmethod + def global_context(cls) -> LLVMContext: + cdef llvm_c.LLVMContextRef context + cdef LLVMContext context_object + + if cls.global_context is None: + context_object: LLVMContext = LLVMContext.__new__(LLVMContext) + context = llvm_c.LLVMGetGlobalContext() + context_object.context = context + context_object.object_cache = LLVMObjectCache( context_object) + LLVMContext.global_context = context_object + + return cls.global_context + + def module_from_buffer(self, buffer: MemoryBuffer) -> Module: + cdef llvm_c.LLVMModuleRef module + cdef char * error_message + if llvm_c.LLVMGetBitcodeModuleInContext(self.context, buffer.buffer, &module, &error_message): + raise LLVMException( error_message.decode('UTF-8')) + return Module.from_pointer(self, module) + + def module_from_bytes(self, input_data: bytes) -> Module: + cdef MemoryBuffer buffer = MemoryBuffer(input_data) + return self.module_from_buffer( buffer) + + def module_from_path(self, input_path: str) -> Module: + cdef llvm_c.LLVMModuleRef module + cdef char * error_message + cdef MemoryBuffer path_buffer = MemoryBuffer.with_contents_of_file( input_path) + + if llvm_c.LLVMParseBitcodeInContext(self.context, path_buffer.buffer, &module, &error_message): + raise LLVMException( error_message.decode('UTF-8')) + return Module.from_pointer(self, module) + + def create_module(self, name: Union[str, bytes]) -> Module: + cdef llvm_c.LLVMModuleRef module + if isinstance(name, str): + name = name.decode('UTF-8') + + module = llvm_c.LLVMModuleCreateWithNameInContext( name, self.context) + + return Module.from_pointer(self, module) + +cdef class Metadata: + cdef object __weakref__ + cdef llvm_c.LLVMValueRef value + cdef llvm_c.LLVMMetadataRef md_node + cdef LLVMContext context + + @staticmethod + cdef Metadata materialize(LLVMContext context, llvm_c.LLVMValueRef value, object instance_type): + cached_value = context.object_cache.get(value) + if cached_value: + return cached_value + + result: Metadata = instance_type.__new__(instance_type) + result.value = value + result.context = context + context.object_cache.set(value, result) + return result + + def __str__(self): + cdef const char * text = llvm_c.LLVMPrintValueToString(self.value) + return ( text).decode('UTF-8') + + @property + def identity(self): + pointer = self.md_node + return f"<{pointer:#016x}>" + + @property + def name(self): + cdef size_t length + cdef const char * name = llvm_c.LLVMGetValueName2(self.value, &length) + return name[:length].decode('UTF-8') + + @name.setter + def name(self, value: Union[str, bytes]): + pass + +cdef class MDString(Metadata): + @staticmethod + cdef MDString from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return Metadata.materialize(context, value, MDString) + + def __str__(self): + cdef unsigned length + cdef const char * value = llvm_c.LLVMGetMDString(self.value, &length) + return f"'{value[:length].decode('UTF-8')}'" + +cdef class MDValue(Metadata): + @staticmethod + cdef MDValue from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return Metadata.materialize(context, value, MDValue) + +cdef class MDNode(Metadata): + operand_list: Optional[list[Optional[Metadata]]] + + @staticmethod + cdef MDNode from_pointer(LLVMContext context, llvm_c.LLVMMetadataRef md_node): + cdef llvm_c.LLVMValueRef as_value = llvm_c.LLVMMetadataAsValue(context.context, md_node) + cached_value = context.object_cache.get(as_value) + if cached_value: + return cached_value + + result: MDNode = MDNode.__new__(MDNode) + result.md_node = md_node + result.value = as_value + result.context = context + result.operand_list = None + context.object_cache.set(result.value, result) + return result + + @property + def operand_count(self): + return llvm_c.LLVMGetMDNodeNumOperands(self.value) + + @property + def operands(self) -> list[Optional[Metadata]]: + cdef llvm_c.LLVMValueRef * operands + cdef llvm_c.LLVMValueRef md_value + cdef llvm_c.LLVMMetadataRef md_node + cdef llvm_c.LLVMValueKind kind + cdef size_t length + cdef const char * name + cdef unsigned operand_count + if self.operand_list is None: + operand_count = llvm_c.LLVMGetMDNodeNumOperands(self.value) + operands = malloc(operand_count * sizeof(llvm_c.LLVMValueRef)) + llvm_c.LLVMGetMDNodeOperands(self.value, operands) + self.operand_list = [] + + for index in range(operand_count): + if operands[index] is NULL: + self.operand_list.append(None) + continue + + kind = llvm_c.LLVMGetValueKind(operands[index]) + md_value = llvm_c.LLVMIsAMDNode(operands[index]) + if md_value is not NULL: + md_node = llvm_c.LLVMValueAsMetadata(md_value) + value = MDNode.from_pointer(self.context, md_node) + self.operand_list.append(value) + print(value) + continue + + md_value = llvm_c.LLVMIsAMDString(operands[index]) + if md_value is not NULL: + md_string = MDString.from_pointer(self.context, md_value) + self.operand_list.append(md_string) + continue + + other_value = MDValue.from_pointer(self.context, operands[index]) + self.operand_list.append(other_value) + + free(operands) + + return self.operand_list + +cdef class MDTuple(MDNode): + pass + +cdef class NamedMDNode: + cdef object __weakref__ + cdef Module module + cdef llvm_c.LLVMNamedMDNodeRef md_node + operand_list: Optional[list[Metadata]] + + @staticmethod + cdef NamedMDNode from_pointer(Module module, llvm_c.LLVMNamedMDNodeRef md_node): + result: NamedMDNode = NamedMDNode.__new__(NamedMDNode) + result.md_node = md_node + result.module = module + result.operand_list = None + return result + + def __init__(self): + raise LLVMConstructionException(NamedMDNode) + + def __str__(self): + return "!" + self.name.decode('UTF-8') + " = {" + ','.join([o.identity for o in self.operands]) + "}" + + @property + def name(self) -> bytes: + cdef size_t length + cdef const char * name = llvm_c.LLVMGetNamedMetadataName(self.md_node, &length) + return name[:length] + + @property + def operand_count(self): + cdef size_t length + cdef const char * name = llvm_c.LLVMGetNamedMetadataName(self.md_node, &length) + return llvm_c.LLVMGetNamedMetadataNumOperands(self.module.module, name) + + @property + def operands(self) -> list[Metadata]: + cdef llvm_c.LLVMValueRef * operands + cdef llvm_c.LLVMValueRef md_value + cdef llvm_c.LLVMMetadataRef md_node + cdef llvm_c.LLVMValueKind kind + cdef size_t length + cdef const char * name + cdef unsigned operand_count + if self.operand_list is None: + name = llvm_c.LLVMGetNamedMetadataName(self.md_node, &length) + operand_count = llvm_c.LLVMGetNamedMetadataNumOperands(self.module.module, name) + operands = malloc(operand_count * sizeof(llvm_c.LLVMValueRef)) + llvm_c.LLVMGetNamedMetadataOperands(self.module.module, name, operands) + self.operand_list = [] + + for index in range(operand_count): + md_value = llvm_c.LLVMIsAMDNode(operands[index]) + if md_value is not NULL: + md_node = llvm_c.LLVMValueAsMetadata(md_value) + value = MDNode.from_pointer(self.module.context, md_node) + self.operand_list.append(value) + continue + + md_value = llvm_c.LLVMIsAMDString(operands[index]) + if md_value is not NULL: + md_string = MDString.from_pointer(self.module.context, md_value) + self.operand_list.append(md_string) + continue + + md_value = llvm_c.LLVMIsAValueAsMetadata(operands[index]) + if md_value is not NULL: + wrapped_value = LLVMValue.from_pointer(self.module.context, md_value) + self.operand_list.append(wrapped_value) + continue + + kind = llvm_c.LLVMGetValueKind(operands[index]) + raise LLVMException(f"Unknown metadata value of {kind}") + + free(operands) + return self.operand_list + + else: + return self.operand_list + +cdef class Module: + cdef object __weakref__ + cdef llvm_c.LLVMModuleRef module + cdef LLVMContext context + + @staticmethod + cdef Module from_pointer(LLVMContext context, llvm_c.LLVMModuleRef module): + cdef Module result = Module.__new__(Module) + result.module = module + result.context = context + return result + + @staticmethod + def from_bytes(input_bytes: bytes) -> Module: + cdef LLVMContext context = LLVMContext.global_context() + return context.module_from_bytes(input_bytes) + + @staticmethod + def from_path(input_path: str) -> Module: + cdef LLVMContext context = LLVMContext.global_context() + return context.module_from_path(input_path) + + def __init__(self, name: Union[str, bytes]): + if isinstance(name, str): + name = name.decode('UTF-8') + + self.module = llvm_c.LLVMModuleCreateWithName( name) + + def __del__(self): + if self.module is not NULL: + llvm_c.LLVMDisposeModule(self.module) + self.module = NULL + + def __str__(self): + return "" + + def clone(self): + cdef llvm_c.LLVMModuleRef module + module = llvm_c.LLVMCloneModule(self.module) + return Module.from_pointer(self.context, module) + + @property + def module_identifier(self) -> bytes: + cdef size_t length + cdef const char * identifier = llvm_c.LLVMGetModuleIdentifier(self.module, &length) + return identifier[:length] + + @module_identifier.setter + def module_identifier(self, value: Union[str, bytes]): + if isinstance(value, str): + value = value.encode('UTF-8') + llvm_c.LLVMSetModuleIdentifier(self.module, value, len(value)) + + @property + def target(self) -> bytes: + cdef const char * target = llvm_c.LLVMGetTarget(self.module) + return target + + @target.setter + def target(self, value: Union[str, bytes]): + if isinstance(value, str): + value = value.encode('UTF-8') + llvm_c.LLVMSetTarget(self.module, value) + + @property + def source_file_name(self) -> bytes: + cdef size_t length + cdef const char * file_name = llvm_c.LLVMGetSourceFileName(self.module, &length) + return file_name[:length] + + @source_file_name.setter + def source_file_name(self, value: Union[str, bytes]): + if isinstance(value, str): + value = value.encode('UTF-8') + llvm_c.LLVMSetSourceFileName(self.module, value, len(value)) + + @property + def data_layout(self) -> bytes: + cdef const char * layout = llvm_c.LLVMGetDataLayout(self.module) + return layout + + @data_layout.setter + def data_layout(self, value: Union[str, bytes]): + if isinstance(value, str): + value = value.encode('UTF-8') + llvm_c.LLVMSetDataLayout(self.module, value) + + def get_type_by_name(self, name: Union[bytes, str]) -> LLVMType: + pass + + @property + def functions(self) -> Generator[Function]: + cdef llvm_c.LLVMValueRef function + function = llvm_c.LLVMGetFirstFunction(self.module) + while function is not NULL: + yield Function.from_pointer(self.context, function) + function = llvm_c.LLVMGetNextFunction(function) + + @property + def global_variables(self) -> Generator[GlobalVariable]: + cdef llvm_c.LLVMValueRef global_variable + global_variable = llvm_c.LLVMGetFirstGlobal(self.module) + while global_variable != NULL: + yield GlobalVariable.from_pointer(self.context, global_variable) + global_variable = llvm_c.LLVMGetNextGlobal(global_variable) + + @property + def named_metadata(self) -> Generator[NamedMDNode]: + cdef llvm_c.LLVMNamedMDNodeRef md_entry + md_entry = llvm_c.LLVMGetFirstNamedMetadata(self.module) + while md_entry != NULL: + yield NamedMDNode.from_pointer(self, md_entry) + md_entry = llvm_c.LLVMGetNextNamedMetadata(md_entry) + + def metadata_with_name(self, name: Union[str, bytes], create: bool = False) -> Optional[NamedMDNode]: + cdef llvm_c.LLVMNamedMDNodeRef md_node + if isinstance(name, str): + name = name.encode('UTF-8') + + if create: + md_node = llvm_c.LLVMGetNamedMetadata(self.module, name, len(name)) + else: + md_node = llvm_c.LLVMGetOrInsertNamedMetadata(self.module, name, len(name)) + + return NamedMDNode.from_pointer(self, md_node) + + def ensure_metadata_with_name(self, name: Union[str, bytes]) -> NamedMDNode: + result = self.metadata_with_name(name, True) + if not result: + raise LLVMException(f"Module {self} could not create metadata with name '{name}") + return result + +cdef class LLVMType: + cdef object __weakref__ + cdef llvm_c.LLVMTypeRef type + cdef LLVMContext context + + @staticmethod + cdef LLVMType from_pointer(LLVMContext context, llvm_c.LLVMTypeRef type_ref): + cached_object = context.object_cache.get( type_ref) + if cached_object: + return cached_object + + result = LLVMType.__new__(LLVMType) + result.type = type_ref + result.context = context + context.object_cache.set( type_ref, result) + return result + + def is_sized(self) -> bool: + if llvm_c.LLVMTypeIsSized(self.type) == 0: + return False + return True + + def __str__(self): + cdef char * value = llvm_c.LLVMPrintTypeToString(self.type) + return value.decode('UTF-8') + +cdef class LLVMValue: + cdef object __weakref__ + cdef llvm_c.LLVMValueRef value + cdef LLVMContext context + kind: ClassVar[llvm_c.LLVMValueKind] + + @staticmethod + cdef LLVMValue materialize(LLVMContext context, llvm_c.LLVMValueRef value, object instance_type): + cached_value = context.object_cache.get(value) + if cached_value: + return cached_value + + cdef LLVMValue instance_object = instance_type.__new__(instance_type) + instance_object.value = value + instance_object.context = context + instance_object.context.object_cache.set(value, instance_object) + return instance_object + + @staticmethod + cdef LLVMValue from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + cached_value = context.object_cache.get(value) + if cached_value is not None: + return cached_value + + cdef llvm_c.LLVMValueKind kind + kind = llvm_c.LLVMGetValueKind(value) + if kind is llvm_c.LLVMArgumentValueKind: + return Argument.from_pointer(context, value) + elif kind is llvm_c.LLVMBasicBlockValueKind: + return BasicBlock.from_pointer(context, value) + elif kind is llvm_c.LLVMFunctionValueKind: + return Function.from_pointer(context, value) + elif kind is llvm_c.LLVMGlobalAliasValueKind: + return GlobalAlias.from_pointer(context, value) + elif kind is llvm_c.LLVMGlobalIFuncValueKind: + return GlobalIFunc.from_pointer(context, value) + elif kind is llvm_c.LLVMGlobalVariableValueKind: + return GlobalVariable.from_pointer(context, value) + elif kind is llvm_c.LLVMBlockAddressValueKind: + return BlockAddress.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantExprValueKind: + return ConstantExpr.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantArrayValueKind: + return ConstantArray.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantStructValueKind: + return ConstantStruct.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantVectorValueKind: + return ConstantVector.from_pointer(context, value) + elif kind is llvm_c.LLVMUndefValueValueKind: + return UndefValue.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantAggregateZeroValueKind: + return ConstantAggregateZero.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantDataArrayValueKind: + return ConstantDataArray.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantDataVectorValueKind: + return ConstantDataVector.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantIntValueKind: + return ConstantInt.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantFPValueKind: + return ConstantFP.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantPointerNullValueKind: + return ConstantPointerNull.from_pointer(context, value) + elif kind is llvm_c.LLVMConstantTokenNoneValueKind: + return ConstantTokenNone.from_pointer(context, value) + elif kind is llvm_c.LLVMInlineAsmValueKind: + return InlineAsm.from_pointer(context, value) + elif kind is llvm_c.LLVMInstructionValueKind: + return Instruction.from_pointer(context, value) + elif kind is llvm_c.LLVMPoisonValueValueKind: + return PoisonValue.from_pointer(context, value) + elif kind is llvm_c.LLVMMetadataAsValueValueKind: + return MetadataAsValue.from_pointer(context, value) + else: + raise LLVMException(f"LLVMValue is of unknown kind: {kind}") + + def __str__(self): + cdef const char * value = llvm_c.LLVMPrintValueToString(self.value) + return value.decode('UTF-8') + + @property + def name(self) -> bytes: + cdef size_t length + cdef const char * name = llvm_c.LLVMGetValueName2(self.value, &length) + return name[:length] + + @property + def entry_block(self) -> BasicBlock: + cdef llvm_c.LLVMBasicBlockRef block + block = llvm_c.LLVMGetEntryBasicBlock(self.value) + return BasicBlock.from_basic_block_pointer(self.context, block) + + @property + def blocks(self) -> Generator[BasicBlock]: + cdef llvm_c.LLVMBasicBlockRef block + block = llvm_c.LLVMGetFirstBasicBlock(self.value) + while block is not NULL: + yield BasicBlock.from_basic_block_pointer(self.context, block) + block = llvm_c.LLVMGetNextBasicBlock(block) + + def replace_with(self, new_value: LLVMValue): + llvm_c.LLVMReplaceAllUsesWith(self.value, new_value.value) + + @property + def type(self) -> LLVMType: + cdef llvm_c.LLVMTypeRef type_ref + type_ref = llvm_c.LLVMTypeOf(self.value) + result = LLVMType.from_pointer(self.context, type_ref) + return result + +cdef class Argument(LLVMValue): + kind = llvm_c.LLVMArgumentValueKind + + @staticmethod + cdef Argument from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return LLVMValue.materialize(context, value, Argument) + +cdef class BasicBlock(LLVMValue): + kind = llvm_c.LLVMBasicBlockValueKind + + @staticmethod + cdef BasicBlock from_basic_block_pointer(LLVMContext context, llvm_c.LLVMBasicBlockRef block): + return BasicBlock.from_pointer(context, block) + + @staticmethod + cdef BasicBlock from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return LLVMValue.materialize(context, value, BasicBlock) + + @property + def instructions(self) -> Generator[Instruction]: + cdef llvm_c.LLVMValueRef instruction + instruction = llvm_c.LLVMGetFirstInstruction( self.value) + while instruction is not NULL: + yield Instruction.from_pointer(self.context, instruction) + instruction = llvm_c.LLVMGetNextInstruction(instruction) + +cdef class InlineAsm(LLVMValue): + pass + +cdef class MetadataAsValue(LLVMValue): + pass + +cdef class Use: + cdef User user + cdef LLVMValue used_value + cdef llvm_c.LLVMUseRef use_ref + + @staticmethod + cdef Use from_use_ref(llvm_c.LLVMUseRef use_ref): + use = Use.__new__(Use) + use.use_ref = use_ref + return use + +cdef class User(LLVMValue): + def uses(self) -> Generator[Use]: + cdef llvm_c.LLVMUseRef use + use = llvm_c.LLVMGetFirstUse(self.value) + while use is not NULL: + yield Use.from_use_ref(use) + use = llvm_c.LLVMGetNextUse(use) + + def __len__(self): + llvm_c.LLVMGetNumOperands(self.value) + + def __getitem__(self, item: int) -> LLVMValue: + return LLVMValue.from_pointer(self.context, llvm_c.LLVMGetOperand(self.value, item)) + + def __setitem__(self, key: int, value: LLVMValue): + llvm_c.LLVMSetOperand(self.value, key, value.value) + +cdef class Constant(User): + pass + +cdef class BlockAddress(Constant): + pass + +cdef class ConstantAggregateZero(Constant): + pass + +cdef class ConstantArray(Constant): + pass + +cdef class ConstantDataSequential(Constant): + pass + +cdef class ConstantDataArray(ConstantDataSequential): + pass + +cdef class ConstantDataVector(ConstantDataSequential): + @staticmethod + cdef ConstantDataVector from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return LLVMValue.materialize(context, value, ConstantDataVector) + +cdef class ConstantExpr(Constant): + @staticmethod + cdef ConstantExpr from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return LLVMValue.materialize(context, value, ConstantExpr) + +cdef class ConstantFP(Constant): + @staticmethod + cdef ConstantFP from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return LLVMValue.materialize(context, value, ConstantFP) + +cdef class ConstantInt(Constant): + @staticmethod + cdef ConstantInt from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return LLVMValue.materialize(context, value, ConstantInt) + +cdef class ConstantPointerNull(Constant): + pass + +cdef class ConstantStruct(Constant): + pass + +cdef class ConstantTokenNone(Constant): + pass + +cdef class ConstantVector(Constant): + kind = llvm_c.LLVMConstantVectorValueKind + +cdef class GlobalValue(Constant): + pass + +cdef class GlobalAlias(GlobalValue): + kind = llvm_c.LLVMGlobalAliasValueKind + +cdef class GlobalObject(GlobalValue): + pass + +cdef class Function(GlobalObject): + kind = llvm_c.LLVMFunctionValueKind + + @staticmethod + cdef Function from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return LLVMValue.materialize(context, value, Function) + + @property + def arguments(self) -> Generator[Argument]: + cdef llvm_c.LLVMValueRef arg + arg = llvm_c.LLVMGetFirstParam(self.value) + while arg is not NULL: + yield Argument.from_pointer(self.context, arg) + arg = llvm_c.LLVMGetNextParam(arg) + + @property + def return_type(self) -> LLVMType: + cdef LLVMType self_type = self.type + cdef llvm_c.LLVMTypeRef return_type = llvm_c.LLVMGetReturnType(self_type.type) + return LLVMType.from_pointer(self.context, return_type) + +cdef class GlobalVariable(GlobalObject): + kind = llvm_c.LLVMGlobalVariableValueKind + + @staticmethod + cdef GlobalVariable from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return LLVMValue.materialize(context, value, GlobalVariable) + +cdef class GlobalIFunc(GlobalObject): + kind = llvm_c.LLVMGlobalIFuncValueKind + +cdef class UndefValue(Constant): + kind = llvm_c.LLVMUndefValueValueKind + +cdef class PoisonValue(Constant): + kind = llvm_c.LLVMPoisonValueValueKind + + @staticmethod + cdef PoisonValue from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return LLVMValue.materialize(context, value, PoisonValue) + +cdef class Instruction(User): + kind = llvm_c.LLVMInstructionValueKind + + @staticmethod + cdef Instruction from_pointer(LLVMContext context, llvm_c.LLVMValueRef value): + return LLVMValue.materialize(context, value, Instruction) + +cdef class UnaryOperator(Instruction): + pass + +cdef class BinaryOperator(Instruction): + pass + +cdef class CallInst(Instruction): + pass + +cdef class IntrinsicInst(CallInst): + pass + +cdef class DbgInfoIntrinsic(IntrinsicInst): + pass + +cdef class DbgVariableIntrinsic(DbgInfoIntrinsic): + pass + +cdef class DbgDeclareInst(DbgVariableIntrinsic): + pass + +cdef class DbgLabelInst(DbgInfoIntrinsic): + pass + +cdef class MemIntrinsic(IntrinsicInst): + pass + +cdef class MemCpyInst(MemIntrinsic): + pass + +cdef class MemMoveInst(MemIntrinsic): + pass + +cdef class MemSetInst(MemIntrinsic): + pass + +cdef class CmpInst(Instruction): + pass + +cdef class FCmpInst(CmpInst): + pass + +cdef class ICmpInst(CmpInst): + pass + +cdef class ExtractElementInst(Instruction): + pass + +cdef class GetElementPtrInst(Instruction): + pass + +cdef class InsertElementInst(Instruction): + pass + +cdef class InsertValueInst(Instruction): + pass + +cdef class LandingPadInst(Instruction): + pass + +cdef class PHINode(Instruction): + pass + +cdef class SelectInst(Instruction): + pass + +cdef class ShuffleVectorInst(Instruction): + pass + +cdef class StoreInst(Instruction): + pass + +cdef class BranchInst(Instruction): + pass + +cdef class IndirectBrInst(Instruction): + pass + +cdef class InvokeInst(Instruction): + pass + +cdef class ReturnInst(Instruction): + pass + +cdef class SwitchInst(Instruction): + pass + +cdef class UnreachableInst(Instruction): + pass + +cdef class ResumeInst(Instruction): + pass + +cdef class CleanupReturnInst(Instruction): + pass + +cdef class CatchReturnInst(Instruction): + pass + +cdef class CatchSwitchInst(Instruction): + pass + +cdef class CallBrInst(Instruction): + pass + +cdef class FuncletPadInst(Instruction): + pass + +cdef class CatchPadInst(FuncletPadInst): + pass + +cdef class CleanupPadInst(FuncletPadInst): + pass + +cdef class UnaryInstruction(Instruction): + pass + +cdef class AllocaInst(UnaryInstruction): + pass + +cdef class CastInst(UnaryInstruction): + pass + +cdef class AddrSpaceCastInst(CastInst): + pass + +cdef class BitCastInst(CastInst): + pass + +cdef class FPExtInst(CastInst): + pass + +cdef class FPToSIInst(CastInst): + pass + +cdef class FPToUIInst(CastInst): + pass + +cdef class FPTruncInst(CastInst): + pass + +cdef class IntToPtrInst(CastInst): + pass + +cdef class PtrToIntInst(CastInst): + pass + +cdef class SExtInst(CastInst): + pass + +cdef class SIToFPInst(CastInst): + pass + +cdef class TruncInst(CastInst): + pass + +cdef class UIToFPInst(CastInst): + pass + +cdef class ZExtInst(CastInst): + pass + +cdef class ExtractValueInst(UnaryInstruction): + pass + +cdef class LoadInst(UnaryInstruction): + pass + +cdef class VAArgInst(UnaryInstruction): + pass + +cdef class FreezeInst(UnaryInstruction): + pass + +cdef class AtomicCmpXchgInst(Instruction): + pass + +cdef class AtomicRMWInst(Instruction): + pass + +cdef class FenceInst(Instruction): + pass