[cfe-commits] r163057 - /cfe/trunk/bindings/python/clang/cindex.py
Sean Silva
silvas at purdue.edu
Sat Sep 1 07:19:00 PDT 2012
I would be nifty if we could generate all of these directly from
Index.h using cindex.py itself!
I've attached a little script that I hacked on a while ago which,
among other things, does something similar. The function
`clangty2ctypes()` is the core of the functionality which converts a
cindex cursor to a ctypes type.
(Note: I think I was doing this with some really minor changes to
cindex.py, like (I believe) being able to do cursor.type.filename
instead of cursor.type.file.name which will die if the file doesn't
have a name, instead of giving an empty string, which was really
annoying me for some reason.)
--Sean Silva
On Sat, Sep 1, 2012 at 4:55 AM, Tobias Grosser
<grosser at fim.uni-passau.de> wrote:
> Author: grosser
> Date: Sat Sep 1 03:55:17 2012
> New Revision: 163057
>
> URL: http://llvm.org/viewvc/llvm-project?rev=163057&view=rev
> Log:
> [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.
>
> Modified:
> cfe/trunk/bindings/python/clang/cindex.py
>
> Modified: cfe/trunk/bindings/python/clang/cindex.py
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/bindings/python/clang/cindex.py?rev=163057&r1=163056&r2=163057&view=diff
> ==============================================================================
> --- cfe/trunk/bindings/python/clang/cindex.py (original)
> +++ cfe/trunk/bindings/python/clang/cindex.py Sat Sep 1 03:55:17 2012
> @@ -2423,424 +2423,572 @@
> 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
> -
> - lib.clang_getCursorSemanticParent.argtypes = [Cursor]
> - lib.clang_getCursorSemanticParent.restype = Cursor
> - lib.clang_getCursorSemanticParent.errcheck = Cursor.from_cursor_result
> -
> - lib.clang_getCursorSpelling.argtypes = [Cursor]
> - lib.clang_getCursorSpelling.restype = _CXString
> - lib.clang_getCursorSpelling.errcheck = _CXString.from_result
> -
> - lib.clang_getCursorType.argtypes = [Cursor]
> - lib.clang_getCursorType.restype = Type
> - lib.clang_getCursorType.errcheck = Type.from_result
> -
> - lib.clang_getCursorUSR.argtypes = [Cursor]
> - lib.clang_getCursorUSR.restype = _CXString
> - lib.clang_getCursorUSR.errcheck = _CXString.from_result
> -
> - #lib.clang_getCXTUResourceUsage.argtypes = [TranslationUnit]
> - #lib.clang_getCXTUResourceUsage.restype = CXTUResourceUsage
> -
> - lib.clang_getCXXAccessSpecifier.argtypes = [Cursor]
> - lib.clang_getCXXAccessSpecifier.restype = c_uint
> -
> - lib.clang_getDeclObjCTypeEncoding.argtypes = [Cursor]
> - lib.clang_getDeclObjCTypeEncoding.restype = _CXString
> - lib.clang_getDeclObjCTypeEncoding.errcheck = _CXString.from_result
> -
> - lib.clang_getDiagnostic.argtypes = [c_object_p, c_uint]
> - lib.clang_getDiagnostic.restype = c_object_p
> -
> - lib.clang_getDiagnosticCategory.argtypes = [Diagnostic]
> - lib.clang_getDiagnosticCategory.restype = c_uint
> -
> - lib.clang_getDiagnosticCategoryName.argtypes = [c_uint]
> - lib.clang_getDiagnosticCategoryName.restype = _CXString
> - lib.clang_getDiagnosticCategoryName.errcheck = _CXString.from_result
> -
> - lib.clang_getDiagnosticFixIt.argtypes = [Diagnostic, c_uint,
> - POINTER(SourceRange)]
> - lib.clang_getDiagnosticFixIt.restype = _CXString
> - lib.clang_getDiagnosticFixIt.errcheck = _CXString.from_result
> -
> - lib.clang_getDiagnosticLocation.argtypes = [Diagnostic]
> - lib.clang_getDiagnosticLocation.restype = SourceLocation
> -
> - lib.clang_getDiagnosticNumFixIts.argtypes = [Diagnostic]
> - lib.clang_getDiagnosticNumFixIts.restype = c_uint
> -
> - lib.clang_getDiagnosticNumRanges.argtypes = [Diagnostic]
> - lib.clang_getDiagnosticNumRanges.restype = c_uint
> -
> - lib.clang_getDiagnosticOption.argtypes = [Diagnostic, POINTER(_CXString)]
> - lib.clang_getDiagnosticOption.restype = _CXString
> - lib.clang_getDiagnosticOption.errcheck = _CXString.from_result
> -
> - lib.clang_getDiagnosticRange.argtypes = [Diagnostic, c_uint]
> - lib.clang_getDiagnosticRange.restype = SourceRange
> -
> - lib.clang_getDiagnosticSeverity.argtypes = [Diagnostic]
> - lib.clang_getDiagnosticSeverity.restype = c_int
> -
> - lib.clang_getDiagnosticSpelling.argtypes = [Diagnostic]
> - lib.clang_getDiagnosticSpelling.restype = _CXString
> - lib.clang_getDiagnosticSpelling.errcheck = _CXString.from_result
> -
> - lib.clang_getElementType.argtypes = [Type]
> - lib.clang_getElementType.restype = Type
> - lib.clang_getElementType.errcheck = Type.from_result
> -
> - lib.clang_getEnumConstantDeclUnsignedValue.argtypes = [Cursor]
> - lib.clang_getEnumConstantDeclUnsignedValue.restype = c_ulonglong
> -
> - lib.clang_getEnumConstantDeclValue.argtypes = [Cursor]
> - lib.clang_getEnumConstantDeclValue.restype = c_longlong
> -
> - lib.clang_getEnumDeclIntegerType.argtypes = [Cursor]
> - lib.clang_getEnumDeclIntegerType.restype = Type
> - lib.clang_getEnumDeclIntegerType.errcheck = Type.from_result
> -
> - 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
> -
> - lib.clang_isStatement.argtypes = [CursorKind]
> - lib.clang_isStatement.restype = bool
> -
> - lib.clang_isTranslationUnit.argtypes = [CursorKind]
> - lib.clang_isTranslationUnit.restype = bool
> +# Functions strictly alphabetical order.
> +functionList = [
> + ("clang_annotateTokens",
> + [TranslationUnit, POINTER(Token), c_uint, POINTER(Cursor)]),
> +
> + ("clang_CompilationDatabase_dispose",
> + [c_object_p]),
> +
> + ("clang_CompilationDatabase_fromDirectory",
> + [c_char_p, POINTER(c_uint)],
> + c_object_p,
> + CompilationDatabase.from_result),
> +
> + ("clang_CompilationDatabase_getCompileCommands",
> + [c_object_p, c_char_p],
> + c_object_p,
> + CompileCommands.from_result),
> +
> + ("clang_CompileCommands_dispose",
> + [c_object_p]),
> +
> + ("clang_CompileCommands_getCommand",
> + [c_object_p, c_uint],
> + c_object_p),
> +
> + ("clang_CompileCommands_getSize",
> + [c_object_p],
> + c_uint),
> +
> + ("clang_CompileCommand_getArg",
> + [c_object_p, c_uint],
> + _CXString,
> + _CXString.from_result),
> +
> + ("clang_CompileCommand_getDirectory",
> + [c_object_p],
> + _CXString,
> + _CXString.from_result),
> +
> + ("clang_CompileCommand_getNumArgs",
> + [c_object_p],
> + c_uint),
> +
> + ("clang_codeCompleteAt",
> + [TranslationUnit, c_char_p, c_int, c_int, c_void_p, c_int, c_int],
> + POINTER(CCRStructure)),
> +
> + ("clang_codeCompleteGetDiagnostic",
> + [CodeCompletionResults, c_int],
> + Diagnostic),
> +
> + ("clang_codeCompleteGetNumDiagnostics",
> + [CodeCompletionResults],
> + c_int),
> +
> + ("clang_createIndex",
> + [c_int, c_int],
> + c_object_p),
> +
> + ("clang_createTranslationUnit",
> + [Index, c_char_p],
> + c_object_p),
> +
> + ("clang_CXXMethod_isStatic",
> + [Cursor],
> + bool),
> +
> + ("clang_CXXMethod_isVirtual",
> + [Cursor],
> + bool),
> +
> + ("clang_defaultSaveOptions",
> + [TranslationUnit],
> + c_uint),
> +
> + ("clang_disposeCodeCompleteResults",
> + [CodeCompletionResults]),
> +
> +# ("clang_disposeCXTUResourceUsage",
> +# [CXTUResourceUsage]),
> +
> + ("clang_disposeDiagnostic",
> + [Diagnostic]),
> +
> + ("clang_disposeIndex",
> + [Index]),
> +
> + ("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),
> +
> + ("clang_reparseTranslationUnit",
> + [TranslationUnit, c_int, c_void_p, c_int],
> + c_int),
> +
> + ("clang_saveTranslationUnit",
> + [TranslationUnit, c_char_p, c_uint],
> + c_int),
> +
> + ("clang_tokenize",
> + [TranslationUnit, SourceRange, POINTER(POINTER(Token)), POINTER(c_uint)]),
> +
> + ("clang_visitChildren",
> + [Cursor, callbacks['cursor_visit'], py_object],
> + c_uint),
> +]
>
> - lib.clang_isUnexposed.argtypes = [CursorKind]
> - lib.clang_isUnexposed.restype = bool
> +class LibclangError(Exception):
> + def __init__(self, message):
> + self.m = message
> +
> + def __str__(self):
> + return self.m + ". Please ensure that your python bindings are "\
> + "compatible with your libclang.so version."
> +
> +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)
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.py
Type: application/octet-stream
Size: 6960 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120901/f80a8c9f/attachment.obj>
More information about the cfe-commits
mailing list