Make interop callback types more precise

This commit is contained in:
Svyatoslav Scherbina
2017-04-20 16:44:23 +03:00
committed by SvyatoslavScherbina
parent c0b40ffedb
commit 8b148fd35c
2 changed files with 52 additions and 41 deletions
@@ -4707,37 +4707,37 @@ class IndexerCallbacks(override val rawPtr: NativePtr) : CStructVar() {
companion object : Type(64, 8) companion object : Type(64, 8)
var abortQuery: CPointer<CFunction<(COpaquePointer?, COpaquePointer?) -> Int>>? var abortQuery: CPointer<CFunction<(CXClientData?, COpaquePointer?) -> Int>>?
get() = memberAt<CPointerVar<CFunction<(COpaquePointer?, COpaquePointer?) -> Int>>>(0).value get() = memberAt<CPointerVar<CFunction<(CXClientData?, COpaquePointer?) -> Int>>>(0).value
set(value) { memberAt<CPointerVar<CFunction<(COpaquePointer?, COpaquePointer?) -> Int>>>(0).value = value } set(value) { memberAt<CPointerVar<CFunction<(CXClientData?, COpaquePointer?) -> Int>>>(0).value = value }
var diagnostic: CPointer<CFunction<(COpaquePointer?, COpaquePointer?, COpaquePointer?) -> Unit>>? var diagnostic: CPointer<CFunction<(CXClientData?, CXDiagnosticSet?, COpaquePointer?) -> Unit>>?
get() = memberAt<CPointerVar<CFunction<(COpaquePointer?, COpaquePointer?, COpaquePointer?) -> Unit>>>(8).value get() = memberAt<CPointerVar<CFunction<(CXClientData?, CXDiagnosticSet?, COpaquePointer?) -> Unit>>>(8).value
set(value) { memberAt<CPointerVar<CFunction<(COpaquePointer?, COpaquePointer?, COpaquePointer?) -> Unit>>>(8).value = value } set(value) { memberAt<CPointerVar<CFunction<(CXClientData?, CXDiagnosticSet?, COpaquePointer?) -> Unit>>>(8).value = value }
var enteredMainFile: CPointer<CFunction<(COpaquePointer?, COpaquePointer?, COpaquePointer?) -> COpaquePointer?>>? var enteredMainFile: CPointer<CFunction<(CXClientData?, CXFile?, COpaquePointer?) -> CXIdxClientFile?>>?
get() = memberAt<CPointerVar<CFunction<(COpaquePointer?, COpaquePointer?, COpaquePointer?) -> COpaquePointer?>>>(16).value get() = memberAt<CPointerVar<CFunction<(CXClientData?, CXFile?, COpaquePointer?) -> CXIdxClientFile?>>>(16).value
set(value) { memberAt<CPointerVar<CFunction<(COpaquePointer?, COpaquePointer?, COpaquePointer?) -> COpaquePointer?>>>(16).value = value } set(value) { memberAt<CPointerVar<CFunction<(CXClientData?, CXFile?, COpaquePointer?) -> CXIdxClientFile?>>>(16).value = value }
var ppIncludedFile: CPointer<CFunction<(COpaquePointer?, CPointer<CXIdxIncludedFileInfo>?) -> COpaquePointer?>>? var ppIncludedFile: CPointer<CFunction<(CXClientData?, CPointer<CXIdxIncludedFileInfo>?) -> CXIdxClientFile?>>?
get() = memberAt<CPointerVar<CFunction<(COpaquePointer?, CPointer<CXIdxIncludedFileInfo>?) -> COpaquePointer?>>>(24).value get() = memberAt<CPointerVar<CFunction<(CXClientData?, CPointer<CXIdxIncludedFileInfo>?) -> CXIdxClientFile?>>>(24).value
set(value) { memberAt<CPointerVar<CFunction<(COpaquePointer?, CPointer<CXIdxIncludedFileInfo>?) -> COpaquePointer?>>>(24).value = value } set(value) { memberAt<CPointerVar<CFunction<(CXClientData?, CPointer<CXIdxIncludedFileInfo>?) -> CXIdxClientFile?>>>(24).value = value }
var importedASTFile: CPointer<CFunction<(COpaquePointer?, CPointer<CXIdxImportedASTFileInfo>?) -> COpaquePointer?>>? var importedASTFile: CPointer<CFunction<(CXClientData?, CPointer<CXIdxImportedASTFileInfo>?) -> CXIdxClientASTFile?>>?
get() = memberAt<CPointerVar<CFunction<(COpaquePointer?, CPointer<CXIdxImportedASTFileInfo>?) -> COpaquePointer?>>>(32).value get() = memberAt<CPointerVar<CFunction<(CXClientData?, CPointer<CXIdxImportedASTFileInfo>?) -> CXIdxClientASTFile?>>>(32).value
set(value) { memberAt<CPointerVar<CFunction<(COpaquePointer?, CPointer<CXIdxImportedASTFileInfo>?) -> COpaquePointer?>>>(32).value = value } set(value) { memberAt<CPointerVar<CFunction<(CXClientData?, CPointer<CXIdxImportedASTFileInfo>?) -> CXIdxClientASTFile?>>>(32).value = value }
var startedTranslationUnit: CPointer<CFunction<(COpaquePointer?, COpaquePointer?) -> COpaquePointer?>>? var startedTranslationUnit: CPointer<CFunction<(CXClientData?, COpaquePointer?) -> CXIdxClientContainer?>>?
get() = memberAt<CPointerVar<CFunction<(COpaquePointer?, COpaquePointer?) -> COpaquePointer?>>>(40).value get() = memberAt<CPointerVar<CFunction<(CXClientData?, COpaquePointer?) -> CXIdxClientContainer?>>>(40).value
set(value) { memberAt<CPointerVar<CFunction<(COpaquePointer?, COpaquePointer?) -> COpaquePointer?>>>(40).value = value } set(value) { memberAt<CPointerVar<CFunction<(CXClientData?, COpaquePointer?) -> CXIdxClientContainer?>>>(40).value = value }
var indexDeclaration: CPointer<CFunction<(COpaquePointer?, CPointer<CXIdxDeclInfo>?) -> Unit>>? var indexDeclaration: CPointer<CFunction<(CXClientData?, CPointer<CXIdxDeclInfo>?) -> Unit>>?
get() = memberAt<CPointerVar<CFunction<(COpaquePointer?, CPointer<CXIdxDeclInfo>?) -> Unit>>>(48).value get() = memberAt<CPointerVar<CFunction<(CXClientData?, CPointer<CXIdxDeclInfo>?) -> Unit>>>(48).value
set(value) { memberAt<CPointerVar<CFunction<(COpaquePointer?, CPointer<CXIdxDeclInfo>?) -> Unit>>>(48).value = value } set(value) { memberAt<CPointerVar<CFunction<(CXClientData?, CPointer<CXIdxDeclInfo>?) -> Unit>>>(48).value = value }
var indexEntityReference: CPointer<CFunction<(COpaquePointer?, CPointer<CXIdxEntityRefInfo>?) -> Unit>>? var indexEntityReference: CPointer<CFunction<(CXClientData?, CPointer<CXIdxEntityRefInfo>?) -> Unit>>?
get() = memberAt<CPointerVar<CFunction<(COpaquePointer?, CPointer<CXIdxEntityRefInfo>?) -> Unit>>>(56).value get() = memberAt<CPointerVar<CFunction<(CXClientData?, CPointer<CXIdxEntityRefInfo>?) -> Unit>>>(56).value
set(value) { memberAt<CPointerVar<CFunction<(COpaquePointer?, CPointer<CXIdxEntityRefInfo>?) -> Unit>>>(56).value = value } set(value) { memberAt<CPointerVar<CFunction<(CXClientData?, CPointer<CXIdxEntityRefInfo>?) -> Unit>>>(56).value = value }
} }
@@ -5891,7 +5891,7 @@ typealias CXCursorSetVar = CPointerVarOf<CXCursorSet>
typealias CXCursorSet = CPointer<CXCursorSetImpl> typealias CXCursorSet = CPointer<CXCursorSetImpl>
typealias CXCursorVisitorVar = CPointerVarOf<CXCursorVisitor> typealias CXCursorVisitorVar = CPointerVarOf<CXCursorVisitor>
typealias CXCursorVisitor = CPointer<CFunction<(CValue<CXCursor>, CValue<CXCursor>, COpaquePointer?) -> CXChildVisitResult>> typealias CXCursorVisitor = CPointer<CFunction<(CValue<CXCursor>, CValue<CXCursor>, CXClientData?) -> CXChildVisitResult>>
typealias CXModuleVar = CPointerVarOf<CXModule> typealias CXModuleVar = CPointerVarOf<CXModule>
typealias CXModule = COpaquePointer typealias CXModule = COpaquePointer
@@ -5900,7 +5900,7 @@ typealias CXCompletionStringVar = CPointerVarOf<CXCompletionString>
typealias CXCompletionString = COpaquePointer typealias CXCompletionString = COpaquePointer
typealias CXInclusionVisitorVar = CPointerVarOf<CXInclusionVisitor> typealias CXInclusionVisitorVar = CPointerVarOf<CXInclusionVisitor>
typealias CXInclusionVisitor = CPointer<CFunction<(COpaquePointer?, CPointer<CXSourceLocation>?, Int, COpaquePointer?) -> Unit>> typealias CXInclusionVisitor = CPointer<CFunction<(CXFile?, CPointer<CXSourceLocation>?, Int, CXClientData?) -> Unit>>
typealias CXEvalResultVar = CPointerVarOf<CXEvalResult> typealias CXEvalResultVar = CPointerVarOf<CXEvalResult>
typealias CXEvalResult = COpaquePointer typealias CXEvalResult = COpaquePointer
@@ -5924,6 +5924,6 @@ typealias CXIndexActionVar = CPointerVarOf<CXIndexAction>
typealias CXIndexAction = COpaquePointer typealias CXIndexAction = COpaquePointer
typealias CXFieldVisitorVar = CPointerVarOf<CXFieldVisitor> typealias CXFieldVisitorVar = CPointerVarOf<CXFieldVisitor>
typealias CXFieldVisitor = CPointer<CFunction<(CValue<CXCursor>, COpaquePointer?) -> CXVisitorResult>> typealias CXFieldVisitor = CPointer<CFunction<(CValue<CXCursor>, CXClientData?) -> CXVisitorResult>>
private val loadLibrary = System.loadLibrary("clangstubs") private val loadLibrary = System.loadLibrary("clangstubs")
@@ -234,6 +234,9 @@ internal class NativeIndexImpl(val library: NativeLibrary) : NativeIndex() {
CXType_Elaborated -> convertType(clang_Type_getNamedType(type)) CXType_Elaborated -> convertType(clang_Type_getNamedType(type))
CXType_Unexposed -> { CXType_Unexposed -> {
if (clang_getResultType(type).kind != CXTypeKind.CXType_Invalid) {
convertFunctionType(type)
} else {
val canonicalType = clang_getCanonicalType(type) val canonicalType = clang_getCanonicalType(type)
if (canonicalType.kind != CXType_Unexposed) { if (canonicalType.kind != CXType_Unexposed) {
convertType(canonicalType) convertType(canonicalType)
@@ -241,6 +244,7 @@ internal class NativeIndexImpl(val library: NativeLibrary) : NativeIndex() {
throw NotImplementedError() throw NotImplementedError()
} }
} }
}
CXType_Void -> VoidType CXType_Void -> VoidType
@@ -269,7 +273,18 @@ internal class NativeIndexImpl(val library: NativeLibrary) : NativeIndex() {
} }
CXType_FunctionProto -> { CXType_FunctionProto -> {
if (clang_isFunctionTypeVariadic(type) != 0) { convertFunctionType(type)
}
else -> UnsupportedType
}
}
private fun convertFunctionType(type: CValue<CXType>): Type {
val kind = type.kind
assert (kind == CXType_Unexposed || kind == CXType_FunctionProto)
return if (clang_isFunctionTypeVariadic(type) != 0) {
UnsupportedType UnsupportedType
} else { } else {
val returnType = convertType(clang_getResultType(type)) val returnType = convertType(clang_getResultType(type))
@@ -281,10 +296,6 @@ internal class NativeIndexImpl(val library: NativeLibrary) : NativeIndex() {
} }
} }
else -> UnsupportedType
}
}
fun indexDeclaration(info: CXIdxDeclInfo): Unit { fun indexDeclaration(info: CXIdxDeclInfo): Unit {
val cursor = info.cursor.readValue() val cursor = info.cursor.readValue()
val entityInfo = info.entityInfo!!.pointed val entityInfo = info.entityInfo!!.pointed