aboutsummaryrefslogtreecommitdiff
path: root/bindings/python
diff options
context:
space:
mode:
authorTobias Grosser <grosser@fim.uni-passau.de>2012-09-01 08:55:17 +0000
committerTobias Grosser <grosser@fim.uni-passau.de>2012-09-01 08:55:17 +0000
commit010556ef87db723780ee52cf6c0348ca304e20dc (patch)
tree93fc949969f0b7b3a47879346ddad21484ded122 /bindings/python
parent296028e371777b21de3eebce6774d7eeb18ba4f2 (diff)
downloadclang-010556ef87db723780ee52cf6c0348ca304e20dc.tar.gz
[cindex.py] Add helper to initialize libclang functions
The helper allows us to define how the initialization of functions should behave. We use this patch to provide an informative error message, in case a function is not available: "LibclangError: /home/grosser/Projekte/llvm/install/lib/libclang.so: undefined symbol: clang_method_added_in_2020. Please ensure that your python bindings are compatible with your libclang.so version." This patch also ensures that no spelling mistakes slip into the library initialization. At the moment, there are a couple of 'argtype' -> 'argtypes' mispellings that have been overlooked. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163057 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings/python')
-rw-r--r--bindings/python/clang/cindex.py918
1 files changed, 533 insertions, 385 deletions
diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py
index 628ade1593..d69fb8e35a 100644
--- a/bindings/python/clang/cindex.py
+++ b/bindings/python/clang/cindex.py
@@ -2423,424 +2423,572 @@ callbacks['translation_unit_includes'] = CFUNCTYPE(None, c_object_p,
POINTER(SourceLocation), c_uint, py_object)
callbacks['cursor_visit'] = CFUNCTYPE(c_int, Cursor, Cursor, py_object)
-def register_functions(lib):
- """Register function prototypes with a libclang library instance.
-
- This must be called as part of library instantiation so Python knows how
- to call out to the shared library.
- """
- # Functions are registered in strictly alphabetical order.
- lib.clang_annotateTokens.argtype = [TranslationUnit, POINTER(Token),
- c_uint, POINTER(Cursor)]
-
- lib.clang_CompilationDatabase_dispose.argtypes = [c_object_p]
-
- lib.clang_CompilationDatabase_fromDirectory.argtypes = [c_char_p,
- POINTER(c_uint)]
- lib.clang_CompilationDatabase_fromDirectory.restype = c_object_p
- lib.clang_CompilationDatabase_fromDirectory.errcheck = CompilationDatabase.from_result
-
- lib.clang_CompilationDatabase_getCompileCommands.argtypes = [c_object_p, c_char_p]
- lib.clang_CompilationDatabase_getCompileCommands.restype = c_object_p
- lib.clang_CompilationDatabase_getCompileCommands.errcheck = CompileCommands.from_result
-
- lib.clang_CompileCommands_dispose.argtypes = [c_object_p]
-
- lib.clang_CompileCommands_getCommand.argtypes = [c_object_p, c_uint]
- lib.clang_CompileCommands_getCommand.restype = c_object_p
-
- lib.clang_CompileCommands_getSize.argtypes = [c_object_p]
- lib.clang_CompileCommands_getSize.restype = c_uint
-
- lib.clang_CompileCommand_getArg.argtypes = [c_object_p, c_uint]
- lib.clang_CompileCommand_getArg.restype = _CXString
- lib.clang_CompileCommand_getArg.errcheck = _CXString.from_result
-
- lib.clang_CompileCommand_getDirectory.argtypes = [c_object_p]
- lib.clang_CompileCommand_getDirectory.restype = _CXString
- lib.clang_CompileCommand_getDirectory.errcheck = _CXString.from_result
-
- lib.clang_CompileCommand_getNumArgs.argtypes = [c_object_p]
- lib.clang_CompileCommand_getNumArgs.restype = c_uint
-
- lib.clang_codeCompleteAt.argtypes = [TranslationUnit, c_char_p, c_int,
- c_int, c_void_p, c_int, c_int]
- lib.clang_codeCompleteAt.restype = POINTER(CCRStructure)
-
- lib.clang_codeCompleteGetDiagnostic.argtypes = [CodeCompletionResults,
- c_int]
- lib.clang_codeCompleteGetDiagnostic.restype = Diagnostic
-
- lib.clang_codeCompleteGetNumDiagnostics.argtypes = [CodeCompletionResults]
- lib.clang_codeCompleteGetNumDiagnostics.restype = c_int
-
- lib.clang_createIndex.argtypes = [c_int, c_int]
- lib.clang_createIndex.restype = c_object_p
-
- lib.clang_createTranslationUnit.argtypes = [Index, c_char_p]
- lib.clang_createTranslationUnit.restype = c_object_p
-
- lib.clang_CXXMethod_isStatic.argtypes = [Cursor]
- lib.clang_CXXMethod_isStatic.restype = bool
-
- lib.clang_CXXMethod_isVirtual.argtypes = [Cursor]
- lib.clang_CXXMethod_isVirtual.restype = bool
-
- lib.clang_defaultSaveOptions.argtypes = [TranslationUnit]
- lib.clang_defaultSaveOptions.restype = c_uint
-
- lib.clang_disposeCodeCompleteResults.argtypes = [CodeCompletionResults]
-
- #lib.clang_disposeCXTUResourceUsage.argtypes = [CXTUResourceUsage]
-
- lib.clang_disposeDiagnostic.argtypes = [Diagnostic]
-
- lib.clang_disposeIndex.argtypes = [Index]
-
- lib.clang_disposeString.argtypes = [_CXString]
-
- lib.clang_disposeTokens.argtype = [TranslationUnit, POINTER(Token), c_uint]
-
- lib.clang_disposeTranslationUnit.argtypes = [TranslationUnit]
-
- lib.clang_equalCursors.argtypes = [Cursor, Cursor]
- lib.clang_equalCursors.restype = bool
-
- lib.clang_equalLocations.argtypes = [SourceLocation, SourceLocation]
- lib.clang_equalLocations.restype = bool
-
- lib.clang_equalRanges.argtypes = [SourceRange, SourceRange]
- lib.clang_equalRanges.restype = bool
-
- lib.clang_equalTypes.argtypes = [Type, Type]
- lib.clang_equalTypes.restype = bool
-
- lib.clang_getArgType.argtypes = [Type, c_uint]
- lib.clang_getArgType.restype = Type
- lib.clang_getArgType.errcheck = Type.from_result
-
- lib.clang_getArrayElementType.argtypes = [Type]
- lib.clang_getArrayElementType.restype = Type
- lib.clang_getArrayElementType.errcheck = Type.from_result
-
- lib.clang_getArraySize.argtypes = [Type]
- lib.clang_getArraySize.restype = c_longlong
-
- lib.clang_getCanonicalCursor.argtypes = [Cursor]
- lib.clang_getCanonicalCursor.restype = Cursor
- lib.clang_getCanonicalCursor.errcheck = Cursor.from_cursor_result
-
- lib.clang_getCanonicalType.argtypes = [Type]
- lib.clang_getCanonicalType.restype = Type
- lib.clang_getCanonicalType.errcheck = Type.from_result
-
- lib.clang_getCompletionAvailability.argtypes = [c_void_p]
- lib.clang_getCompletionAvailability.restype = c_int
-
- lib.clang_getCompletionChunkCompletionString.argtypes = [c_void_p, c_int]
- lib.clang_getCompletionChunkCompletionString.restype = c_object_p
-
- lib.clang_getCompletionChunkKind.argtypes = [c_void_p, c_int]
- lib.clang_getCompletionChunkKind.restype = c_int
-
- lib.clang_getCompletionChunkText.argtypes = [c_void_p, c_int]
- lib.clang_getCompletionChunkText.restype = _CXString
-
- lib.clang_getCompletionPriority.argtypes = [c_void_p]
- lib.clang_getCompletionPriority.restype = c_int
-
- lib.clang_getCString.argtypes = [_CXString]
- lib.clang_getCString.restype = c_char_p
-
- lib.clang_getCursor.argtypes = [TranslationUnit, SourceLocation]
- lib.clang_getCursor.restype = Cursor
-
- lib.clang_getCursorDefinition.argtypes = [Cursor]
- lib.clang_getCursorDefinition.restype = Cursor
- lib.clang_getCursorDefinition.errcheck = Cursor.from_result
-
- lib.clang_getCursorDisplayName.argtypes = [Cursor]
- lib.clang_getCursorDisplayName.restype = _CXString
- lib.clang_getCursorDisplayName.errcheck = _CXString.from_result
-
- lib.clang_getCursorExtent.argtypes = [Cursor]
- lib.clang_getCursorExtent.restype = SourceRange
-
- lib.clang_getCursorLexicalParent.argtypes = [Cursor]
- lib.clang_getCursorLexicalParent.restype = Cursor
- lib.clang_getCursorLexicalParent.errcheck = Cursor.from_cursor_result
-
- lib.clang_getCursorLocation.argtypes = [Cursor]
- lib.clang_getCursorLocation.restype = SourceLocation
-
- lib.clang_getCursorReferenced.argtypes = [Cursor]
- lib.clang_getCursorReferenced.restype = Cursor
- lib.clang_getCursorReferenced.errcheck = Cursor.from_result
-
- lib.clang_getCursorReferenceNameRange.argtypes = [Cursor, c_uint, c_uint]
- lib.clang_getCursorReferenceNameRange.restype = SourceRange
+# Functions strictly alphabetical order.
+functionList = [
+ ("clang_annotateTokens",
+ [TranslationUnit, POINTER(Token), c_uint, POINTER(Cursor)]),
- lib.clang_getCursorSemanticParent.argtypes = [Cursor]
- lib.clang_getCursorSemanticParent.restype = Cursor
- lib.clang_getCursorSemanticParent.errcheck = Cursor.from_cursor_result
+ ("clang_CompilationDatabase_dispose",
+ [c_object_p]),
- lib.clang_getCursorSpelling.argtypes = [Cursor]
- lib.clang_getCursorSpelling.restype = _CXString
- lib.clang_getCursorSpelling.errcheck = _CXString.from_result
+ ("clang_CompilationDatabase_fromDirectory",
+ [c_char_p, POINTER(c_uint)],
+ c_object_p,
+ CompilationDatabase.from_result),
- lib.clang_getCursorType.argtypes = [Cursor]
- lib.clang_getCursorType.restype = Type
- lib.clang_getCursorType.errcheck = Type.from_result
+ ("clang_CompilationDatabase_getCompileCommands",
+ [c_object_p, c_char_p],
+ c_object_p,
+ CompileCommands.from_result),
- lib.clang_getCursorUSR.argtypes = [Cursor]
- lib.clang_getCursorUSR.restype = _CXString
- lib.clang_getCursorUSR.errcheck = _CXString.from_result
+ ("clang_CompileCommands_dispose",
+ [c_object_p]),
- #lib.clang_getCXTUResourceUsage.argtypes = [TranslationUnit]
- #lib.clang_getCXTUResourceUsage.restype = CXTUResourceUsage
+ ("clang_CompileCommands_getCommand",
+ [c_object_p, c_uint],
+ c_object_p),
- lib.clang_getCXXAccessSpecifier.argtypes = [Cursor]
- lib.clang_getCXXAccessSpecifier.restype = c_uint
+ ("clang_CompileCommands_getSize",
+ [c_object_p],
+ c_uint),
- lib.clang_getDeclObjCTypeEncoding.argtypes = [Cursor]
- lib.clang_getDeclObjCTypeEncoding.restype = _CXString
- lib.clang_getDeclObjCTypeEncoding.errcheck = _CXString.from_result
+ ("clang_CompileCommand_getArg",
+ [c_object_p, c_uint],
+ _CXString,
+ _CXString.from_result),
- lib.clang_getDiagnostic.argtypes = [c_object_p, c_uint]
- lib.clang_getDiagnostic.restype = c_object_p
+ ("clang_CompileCommand_getDirectory",
+ [c_object_p],
+ _CXString,
+ _CXString.from_result),
- lib.clang_getDiagnosticCategory.argtypes = [Diagnostic]
- lib.clang_getDiagnosticCategory.restype = c_uint
+ ("clang_CompileCommand_getNumArgs",
+ [c_object_p],
+ c_uint),
- lib.clang_getDiagnosticCategoryName.argtypes = [c_uint]
- lib.clang_getDiagnosticCategoryName.restype = _CXString
- lib.clang_getDiagnosticCategoryName.errcheck = _CXString.from_result
+ ("clang_codeCompleteAt",
+ [TranslationUnit, c_char_p, c_int, c_int, c_void_p, c_int, c_int],
+ POINTER(CCRStructure)),
- lib.clang_getDiagnosticFixIt.argtypes = [Diagnostic, c_uint,
- POINTER(SourceRange)]
- lib.clang_getDiagnosticFixIt.restype = _CXString
- lib.clang_getDiagnosticFixIt.errcheck = _CXString.from_result
+ ("clang_codeCompleteGetDiagnostic",
+ [CodeCompletionResults, c_int],
+ Diagnostic),
- lib.clang_getDiagnosticLocation.argtypes = [Diagnostic]
- lib.clang_getDiagnosticLocation.restype = SourceLocation
+ ("clang_codeCompleteGetNumDiagnostics",
+ [CodeCompletionResults],
+ c_int),
- lib.clang_getDiagnosticNumFixIts.argtypes = [Diagnostic]
- lib.clang_getDiagnosticNumFixIts.restype = c_uint
+ ("clang_createIndex",
+ [c_int, c_int],
+ c_object_p),
- lib.clang_getDiagnosticNumRanges.argtypes = [Diagnostic]
- lib.clang_getDiagnosticNumRanges.restype = c_uint
+ ("clang_createTranslationUnit",
+ [Index, c_char_p],
+ c_object_p),
- lib.clang_getDiagnosticOption.argtypes = [Diagnostic, POINTER(_CXString)]
- lib.clang_getDiagnosticOption.restype = _CXString
- lib.clang_getDiagnosticOption.errcheck = _CXString.from_result
+ ("clang_CXXMethod_isStatic",
+ [Cursor],
+ bool),
- lib.clang_getDiagnosticRange.argtypes = [Diagnostic, c_uint]
- lib.clang_getDiagnosticRange.restype = SourceRange
+ ("clang_CXXMethod_isVirtual",
+ [Cursor],
+ bool),
- lib.clang_getDiagnosticSeverity.argtypes = [Diagnostic]
- lib.clang_getDiagnosticSeverity.restype = c_int
+ ("clang_defaultSaveOptions",
+ [TranslationUnit],
+ c_uint),
- lib.clang_getDiagnosticSpelling.argtypes = [Diagnostic]
- lib.clang_getDiagnosticSpelling.restype = _CXString
- lib.clang_getDiagnosticSpelling.errcheck = _CXString.from_result
+ ("clang_disposeCodeCompleteResults",
+ [CodeCompletionResults]),
- lib.clang_getElementType.argtypes = [Type]
- lib.clang_getElementType.restype = Type
- lib.clang_getElementType.errcheck = Type.from_result
+# ("clang_disposeCXTUResourceUsage",
+# [CXTUResourceUsage]),
+
+ ("clang_disposeDiagnostic",
+ [Diagnostic]),
+
+ ("clang_disposeIndex",
+ [Index]),
- lib.clang_getEnumConstantDeclUnsignedValue.argtypes = [Cursor]
- lib.clang_getEnumConstantDeclUnsignedValue.restype = c_ulonglong
+ ("clang_disposeString",
+ [_CXString]),
+
+ ("clang_disposeTokens",
+ [TranslationUnit, POINTER(Token), c_uint]),
+
+ ("clang_disposeTranslationUnit",
+ [TranslationUnit]),
+
+ ("clang_equalCursors",
+ [Cursor, Cursor],
+ bool),
+
+ ("clang_equalLocations",
+ [SourceLocation, SourceLocation],
+ bool),
+
+ ("clang_equalRanges",
+ [SourceRange, SourceRange],
+ bool),
+
+ ("clang_equalTypes",
+ [Type, Type],
+ bool),
+
+ ("clang_getArgType",
+ [Type, c_uint],
+ Type,
+ Type.from_result),
+
+ ("clang_getArrayElementType",
+ [Type],
+ Type,
+ Type.from_result),
+
+ ("clang_getArraySize",
+ [Type],
+ c_longlong),
+
+ ("clang_getCanonicalCursor",
+ [Cursor],
+ Cursor,
+ Cursor.from_cursor_result),
+
+ ("clang_getCanonicalType",
+ [Type],
+ Type,
+ Type.from_result),
+
+ ("clang_getCompletionAvailability",
+ [c_void_p],
+ c_int),
+
+ ("clang_getCompletionChunkCompletionString",
+ [c_void_p, c_int],
+ c_object_p),
+
+ ("clang_getCompletionChunkKind",
+ [c_void_p, c_int],
+ c_int),
+
+ ("clang_getCompletionChunkText",
+ [c_void_p, c_int],
+ _CXString),
+
+ ("clang_getCompletionPriority",
+ [c_void_p],
+ c_int),
+
+ ("clang_getCString",
+ [_CXString],
+ c_char_p),
+
+ ("clang_getCursor",
+ [TranslationUnit, SourceLocation],
+ Cursor),
+
+ ("clang_getCursorDefinition",
+ [Cursor],
+ Cursor,
+ Cursor.from_result),
+
+ ("clang_getCursorDisplayName",
+ [Cursor],
+ _CXString,
+ _CXString.from_result),
+
+ ("clang_getCursorExtent",
+ [Cursor],
+ SourceRange),
+
+ ("clang_getCursorLexicalParent",
+ [Cursor],
+ Cursor,
+ Cursor.from_cursor_result),
+
+ ("clang_getCursorLocation",
+ [Cursor],
+ SourceLocation),
+
+ ("clang_getCursorReferenced",
+ [Cursor],
+ Cursor,
+ Cursor.from_result),
+
+ ("clang_getCursorReferenceNameRange",
+ [Cursor, c_uint, c_uint],
+ SourceRange),
+
+ ("clang_getCursorSemanticParent",
+ [Cursor],
+ Cursor,
+ Cursor.from_cursor_result),
+
+ ("clang_getCursorSpelling",
+ [Cursor],
+ _CXString,
+ _CXString.from_result),
+
+ ("clang_getCursorType",
+ [Cursor],
+ Type,
+ Type.from_result),
+
+ ("clang_getCursorUSR",
+ [Cursor],
+ _CXString,
+ _CXString.from_result),
+
+# ("clang_getCXTUResourceUsage",
+# [TranslationUnit],
+# CXTUResourceUsage),
+
+ ("clang_getCXXAccessSpecifier",
+ [Cursor],
+ c_uint),
+
+ ("clang_getDeclObjCTypeEncoding",
+ [Cursor],
+ _CXString,
+ _CXString.from_result),
+
+ ("clang_getDiagnostic",
+ [c_object_p, c_uint],
+ c_object_p),
+
+ ("clang_getDiagnosticCategory",
+ [Diagnostic],
+ c_uint),
+
+ ("clang_getDiagnosticCategoryName",
+ [c_uint],
+ _CXString,
+ _CXString.from_result),
+
+ ("clang_getDiagnosticFixIt",
+ [Diagnostic, c_uint, POINTER(SourceRange)],
+ _CXString,
+ _CXString.from_result),
+
+ ("clang_getDiagnosticLocation",
+ [Diagnostic],
+ SourceLocation),
+
+ ("clang_getDiagnosticNumFixIts",
+ [Diagnostic],
+ c_uint),
+
+ ("clang_getDiagnosticNumRanges",
+ [Diagnostic],
+ c_uint),
+
+ ("clang_getDiagnosticOption",
+ [Diagnostic, POINTER(_CXString)],
+ _CXString,
+ _CXString.from_result),
+
+ ("clang_getDiagnosticRange",
+ [Diagnostic, c_uint],
+ SourceRange),
+
+ ("clang_getDiagnosticSeverity",
+ [Diagnostic],
+ c_int),
+
+ ("clang_getDiagnosticSpelling",
+ [Diagnostic],
+ _CXString,
+ _CXString.from_result),
+
+ ("clang_getElementType",
+ [Type],
+ Type,
+ Type.from_result),
+
+ ("clang_getEnumConstantDeclUnsignedValue",
+ [Cursor],
+ c_ulonglong),
+
+ ("clang_getEnumConstantDeclValue",
+ [Cursor],
+ c_longlong),
+
+ ("clang_getEnumDeclIntegerType",
+ [Cursor],
+ Type,
+ Type.from_result),
+
+ ("clang_getFile",
+ [TranslationUnit, c_char_p],
+ c_object_p),
+
+ ("clang_getFileName",
+ [File],
+ _CXString), # TODO go through _CXString.from_result?
+
+ ("clang_getFileTime",
+ [File],
+ c_uint),
+
+ ("clang_getIBOutletCollectionType",
+ [Cursor],
+ Type,
+ Type.from_result),
+
+ ("clang_getIncludedFile",
+ [Cursor],
+ File,
+ File.from_cursor_result),
+
+ ("clang_getInclusions",
+ [TranslationUnit, callbacks['translation_unit_includes'], py_object]),
+
+ ("clang_getInstantiationLocation",
+ [SourceLocation, POINTER(c_object_p), POINTER(c_uint), POINTER(c_uint),
+ POINTER(c_uint)]),
+
+ ("clang_getLocation",
+ [TranslationUnit, File, c_uint, c_uint],
+ SourceLocation),
+
+ ("clang_getLocationForOffset",
+ [TranslationUnit, File, c_uint],
+ SourceLocation),
+
+ ("clang_getNullCursor",
+ None,
+ Cursor),
+
+ ("clang_getNumArgTypes",
+ [Type],
+ c_uint),
+
+ ("clang_getNumCompletionChunks",
+ [c_void_p],
+ c_int),
+
+ ("clang_getNumDiagnostics",
+ [c_object_p],
+ c_uint),
+
+ ("clang_getNumElements",
+ [Type],
+ c_longlong),
+
+ ("clang_getNumOverloadedDecls",
+ [Cursor],
+ c_uint),
+
+ ("clang_getOverloadedDecl",
+ [Cursor, c_uint],
+ Cursor,
+ Cursor.from_cursor_result),
+
+ ("clang_getPointeeType",
+ [Type],
+ Type,
+ Type.from_result),
+
+ ("clang_getRange",
+ [SourceLocation, SourceLocation],
+ SourceRange),
+
+ ("clang_getRangeEnd",
+ [SourceRange],
+ SourceLocation),
+
+ ("clang_getRangeStart",
+ [SourceRange],
+ SourceLocation),
+
+ ("clang_getResultType",
+ [Type],
+ Type,
+ Type.from_result),
+
+ ("clang_getSpecializedCursorTemplate",
+ [Cursor],
+ Cursor,
+ Cursor.from_cursor_result),
+
+ ("clang_getTemplateCursorKind",
+ [Cursor],
+ c_uint),
+
+ ("clang_getTokenExtent",
+ [TranslationUnit, Token],
+ SourceRange),
+
+ ("clang_getTokenKind",
+ [Token],
+ c_uint),
+
+ ("clang_getTokenLocation",
+ [TranslationUnit, Token],
+ SourceLocation),
+
+ ("clang_getTokenSpelling",
+ [TranslationUnit, Token],
+ _CXString,
+ _CXString.from_result),
+
+ ("clang_getTranslationUnitCursor",
+ [TranslationUnit],
+ Cursor,
+ Cursor.from_result),
+
+ ("clang_getTranslationUnitSpelling",
+ [TranslationUnit],
+ _CXString,
+ _CXString.from_result),
+
+ ("clang_getTUResourceUsageName",
+ [c_uint],
+ c_char_p),
+
+ ("clang_getTypeDeclaration",
+ [Type],
+ Cursor,
+ Cursor.from_result),
+
+ ("clang_getTypedefDeclUnderlyingType",
+ [Cursor],
+ Type,
+ Type.from_result),
+
+ ("clang_getTypeKindSpelling",
+ [c_uint],
+ _CXString,
+ _CXString.from_result),
+
+ ("clang_hashCursor",
+ [Cursor],
+ c_uint),
+
+ ("clang_isAttribute",
+ [CursorKind],
+ bool),
+
+ ("clang_isConstQualifiedType",
+ [Type],
+ bool),
+
+ ("clang_isCursorDefinition",
+ [Cursor],
+ bool),
+
+ ("clang_isDeclaration",
+ [CursorKind],
+ bool),
+
+ ("clang_isExpression",
+ [CursorKind],
+ bool),
+
+ ("clang_isFileMultipleIncludeGuarded",
+ [TranslationUnit, File],
+ bool),
+
+ ("clang_isFunctionTypeVariadic",
+ [Type],
+ bool),
+
+ ("clang_isInvalid",
+ [CursorKind],
+ bool),
+
+ ("clang_isPODType",
+ [Type],
+ bool),
+
+ ("clang_isPreprocessing",
+ [CursorKind],
+ bool),
+
+ ("clang_isReference",
+ [CursorKind],
+ bool),
+
+ ("clang_isRestrictQualifiedType",
+ [Type],
+ bool),
+
+ ("clang_isStatement",
+ [CursorKind],
+ bool),
+
+ ("clang_isTranslationUnit",
+ [CursorKind],
+ bool),
+
+ ("clang_isUnexposed",
+ [CursorKind],
+ bool),
+
+ ("clang_isVirtualBase",
+ [Cursor],
+ bool),
+
+ ("clang_isVolatileQualifiedType",
+ [Type],
+ bool),
+
+ ("clang_parseTranslationUnit",
+ [Index, c_char_p, c_void_p, c_int, c_void_p, c_int, c_int],
+ c_object_p),
- lib.clang_getEnumConstantDeclValue.argtypes = [Cursor]
- lib.clang_getEnumConstantDeclValue.restype = c_longlong
+ ("clang_reparseTranslationUnit",
+ [TranslationUnit, c_int, c_void_p, c_int],
+ c_int),
- lib.clang_getEnumDeclIntegerType.argtypes = [Cursor]
- lib.clang_getEnumDeclIntegerType.restype = Type
- lib.clang_getEnumDeclIntegerType.errcheck = Type.from_result
+ ("clang_saveTranslationUnit",
+ [TranslationUnit, c_char_p, c_uint],
+ c_int),
- lib.clang_getFile.argtypes = [TranslationUnit, c_char_p]
- lib.clang_getFile.restype = c_object_p
-
- lib.clang_getFileName.argtypes = [File]
- lib.clang_getFileName.restype = _CXString
- # TODO go through _CXString.from_result?
-
- lib.clang_getFileTime.argtypes = [File]
- lib.clang_getFileTime.restype = c_uint
-
- lib.clang_getIBOutletCollectionType.argtypes = [Cursor]
- lib.clang_getIBOutletCollectionType.restype = Type
- lib.clang_getIBOutletCollectionType.errcheck = Type.from_result
-
- lib.clang_getIncludedFile.argtypes = [Cursor]
- lib.clang_getIncludedFile.restype = File
- lib.clang_getIncludedFile.errcheck = File.from_cursor_result
-
- lib.clang_getInclusions.argtypes = [TranslationUnit,
- callbacks['translation_unit_includes'], py_object]
-
- lib.clang_getInstantiationLocation.argtypes = [SourceLocation,
- POINTER(c_object_p), POINTER(c_uint), POINTER(c_uint), POINTER(c_uint)]
-
- lib.clang_getLocation.argtypes = [TranslationUnit, File, c_uint, c_uint]
- lib.clang_getLocation.restype = SourceLocation
-
- lib.clang_getLocationForOffset.argtypes = [TranslationUnit, File, c_uint]
- lib.clang_getLocationForOffset.restype = SourceLocation
-
- lib.clang_getNullCursor.restype = Cursor
-
- lib.clang_getNumArgTypes.argtypes = [Type]
- lib.clang_getNumArgTypes.restype = c_uint
-
- lib.clang_getNumCompletionChunks.argtypes = [c_void_p]
- lib.clang_getNumCompletionChunks.restype = c_int
-
- lib.clang_getNumDiagnostics.argtypes = [c_object_p]
- lib.clang_getNumDiagnostics.restype = c_uint
-
- lib.clang_getNumElements.argtypes = [Type]
- lib.clang_getNumElements.restype = c_longlong
-
- lib.clang_getNumOverloadedDecls.argtypes = [Cursor]
- lib.clang_getNumOverloadedDecls.restyp = c_uint
-
- lib.clang_getOverloadedDecl.argtypes = [Cursor, c_uint]
- lib.clang_getOverloadedDecl.restype = Cursor
- lib.clang_getOverloadedDecl.errcheck = Cursor.from_cursor_result
-
- lib.clang_getPointeeType.argtypes = [Type]
- lib.clang_getPointeeType.restype = Type
- lib.clang_getPointeeType.errcheck = Type.from_result
-
- lib.clang_getRange.argtypes = [SourceLocation, SourceLocation]
- lib.clang_getRange.restype = SourceRange
-
- lib.clang_getRangeEnd.argtypes = [SourceRange]
- lib.clang_getRangeEnd.restype = SourceLocation
-
- lib.clang_getRangeStart.argtypes = [SourceRange]
- lib.clang_getRangeStart.restype = SourceLocation
-
- lib.clang_getResultType.argtypes = [Type]
- lib.clang_getResultType.restype = Type
- lib.clang_getResultType.errcheck = Type.from_result
-
- lib.clang_getSpecializedCursorTemplate.argtypes = [Cursor]
- lib.clang_getSpecializedCursorTemplate.restype = Cursor
- lib.clang_getSpecializedCursorTemplate.errcheck = Cursor.from_cursor_result
-
- lib.clang_getTemplateCursorKind.argtypes = [Cursor]
- lib.clang_getTemplateCursorKind.restype = c_uint
-
- lib.clang_getTokenExtent.argtypes = [TranslationUnit, Token]
- lib.clang_getTokenExtent.restype = SourceRange
-
- lib.clang_getTokenKind.argtypes = [Token]
- lib.clang_getTokenKind.restype = c_uint
-
- lib.clang_getTokenLocation.argtype = [TranslationUnit, Token]
- lib.clang_getTokenLocation.restype = SourceLocation
-
- lib.clang_getTokenSpelling.argtype = [TranslationUnit, Token]
- lib.clang_getTokenSpelling.restype = _CXString
- lib.clang_getTokenSpelling.errcheck = _CXString.from_result
-
- lib.clang_getTranslationUnitCursor.argtypes = [TranslationUnit]
- lib.clang_getTranslationUnitCursor.restype = Cursor
- lib.clang_getTranslationUnitCursor.errcheck = Cursor.from_result
-
- lib.clang_getTranslationUnitSpelling.argtypes = [TranslationUnit]
- lib.clang_getTranslationUnitSpelling.restype = _CXString
- lib.clang_getTranslationUnitSpelling.errcheck = _CXString.from_result
-
- lib.clang_getTUResourceUsageName.argtypes = [c_uint]
- lib.clang_getTUResourceUsageName.restype = c_char_p
-
- lib.clang_getTypeDeclaration.argtypes = [Type]
- lib.clang_getTypeDeclaration.restype = Cursor
- lib.clang_getTypeDeclaration.errcheck = Cursor.from_result
-
- lib.clang_getTypedefDeclUnderlyingType.argtypes = [Cursor]
- lib.clang_getTypedefDeclUnderlyingType.restype = Type
- lib.clang_getTypedefDeclUnderlyingType.errcheck = Type.from_result
-
- lib.clang_getTypeKindSpelling.argtypes = [c_uint]
- lib.clang_getTypeKindSpelling.restype = _CXString
- lib.clang_getTypeKindSpelling.errcheck = _CXString.from_result
-
- lib.clang_hashCursor.argtypes = [Cursor]
- lib.clang_hashCursor.restype = c_uint
-
- lib.clang_isAttribute.argtypes = [CursorKind]
- lib.clang_isAttribute.restype = bool
-
- lib.clang_isConstQualifiedType.argtypes = [Type]
- lib.clang_isConstQualifiedType.restype = bool
-
- lib.clang_isCursorDefinition.argtypes = [Cursor]
- lib.clang_isCursorDefinition.restype = bool
-
- lib.clang_isDeclaration.argtypes = [CursorKind]
- lib.clang_isDeclaration.restype = bool
-
- lib.clang_isExpression.argtypes = [CursorKind]
- lib.clang_isExpression.restype = bool
-
- lib.clang_isFileMultipleIncludeGuarded.argtypes = [TranslationUnit, File]
- lib.clang_isFileMultipleIncludeGuarded.restype = bool
-
- lib.clang_isFunctionTypeVariadic.argtypes = [Type]
- lib.clang_isFunctionTypeVariadic.restype = bool
-
- lib.clang_isInvalid.argtypes = [CursorKind]
- lib.clang_isInvalid.restype = bool
-
- lib.clang_isPODType.argtypes = [Type]
- lib.clang_isPODType.restype = bool
-
- lib.clang_isPreprocessing.argtypes = [CursorKind]
- lib.clang_isPreprocessing.restype = bool
-
- lib.clang_isReference.argtypes = [CursorKind]
- lib.clang_isReference.restype = bool
-
- lib.clang_isRestrictQualifiedType.argtypes = [Type]
- lib.clang_isRestrictQualifiedType.restype = bool
+ ("clang_tokenize",
+ [TranslationUnit, SourceRange, POINTER(POINTER(Token)), POINTER(c_uint)]),
+
+ ("clang_visitChildren",
+ [Cursor, callbacks['cursor_visit'], py_object],
+ c_uint),
+]
- lib.clang_isStatement.argtypes = [CursorKind]
- lib.clang_isStatement.restype = bool
+class LibclangError(Exception):
+ def __init__(self, message):
+ self.m = message
- lib.clang_isTranslationUnit.argtypes = [CursorKind]
- lib.clang_isTranslationUnit.restype = bool
+ def __str__(self):
+ return self.m + ". Please ensure that your python bindings are "\
+ "compatible with your libclang.so version."
- lib.clang_isUnexposed.argtypes = [CursorKind]
- lib.clang_isUnexposed.restype = bool
+def register_function(lib, item):
+ # A function may not exist, if these bindings are used with an older or
+ # incompatible version of libclang.so.
+ try:
+ func = getattr(lib, item[0])
+ except AttributeError as e:
+ raise LibclangError(str(e))
- lib.clang_isVirtualBase.argtypes = [Cursor]
- lib.clang_isVirtualBase.restype = bool
+ if len(item) >= 2:
+ func.argtypes = item[1]
- lib.clang_isVolatileQualifiedType.argtypes = [Type]
- lib.clang_isVolatileQualifiedType.restype = bool
+ if len(item) >= 3:
+ func.restype = item[2]
- lib.clang_parseTranslationUnit.argypes = [Index, c_char_p, c_void_p, c_int,
- c_void_p, c_int, c_int]
- lib.clang_parseTranslationUnit.restype = c_object_p
+ if len(item) == 4:
+ func.errcheck = item[3]
- lib.clang_reparseTranslationUnit.argtypes = [TranslationUnit, c_int,
- c_void_p, c_int]
- lib.clang_reparseTranslationUnit.restype = c_int
+def register_functions(lib):
+ """Register function prototypes with a libclang library instance.
- lib.clang_saveTranslationUnit.argtypes = [TranslationUnit, c_char_p,
- c_uint]
- lib.clang_saveTranslationUnit.restype = c_int
+ This must be called as part of library instantiation so Python knows how
+ to call out to the shared library.
+ """
- lib.clang_tokenize.argtypes = [TranslationUnit, SourceRange,
- POINTER(POINTER(Token)), POINTER(c_uint)]
+ def register(item):
+ return register_function(lib, item)
- lib.clang_visitChildren.argtypes = [Cursor, callbacks['cursor_visit'],
- py_object]
- lib.clang_visitChildren.restype = c_uint
+ map(register, functionList)
register_functions(lib)