Refactor Pointer*Type in interop stub generation
All types should have correct `equals`/`hashCode` implementation. Also update Indexer prebuilts.
This commit is contained in:
committed by
SvyatoslavScherbina
parent
f402b3e180
commit
d6ba399e1e
@@ -2857,7 +2857,7 @@ class __darwin_pthread_handler_rec(override val rawPtr: NativePtr) : CStructVar(
|
|||||||
|
|
||||||
companion object : Type(24, 8)
|
companion object : Type(24, 8)
|
||||||
|
|
||||||
val __routine: CPointerVar<CFunction<CFunctionType5>>
|
val __routine: CPointerVar<CFunction<CFunctionType2>>
|
||||||
get() = memberAt(0)
|
get() = memberAt(0)
|
||||||
|
|
||||||
val __arg: COpaquePointerVar
|
val __arg: COpaquePointerVar
|
||||||
@@ -3261,7 +3261,7 @@ class CXCursorAndRangeVisitor(override val rawPtr: NativePtr) : CStructVar() {
|
|||||||
val context: COpaquePointerVar
|
val context: COpaquePointerVar
|
||||||
get() = memberAt(0)
|
get() = memberAt(0)
|
||||||
|
|
||||||
val visit: CPointerVar<CFunction<CFunctionType6>>
|
val visit: CPointerVar<CFunction<CFunctionType5>>
|
||||||
get() = memberAt(8)
|
get() = memberAt(8)
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3585,28 +3585,28 @@ class IndexerCallbacks(override val rawPtr: NativePtr) : CStructVar() {
|
|||||||
|
|
||||||
companion object : Type(64, 8)
|
companion object : Type(64, 8)
|
||||||
|
|
||||||
val abortQuery: CPointerVar<CFunction<CFunctionType7>>
|
val abortQuery: CPointerVar<CFunction<CFunctionType6>>
|
||||||
get() = memberAt(0)
|
get() = memberAt(0)
|
||||||
|
|
||||||
val diagnostic: CPointerVar<CFunction<CFunctionType8>>
|
val diagnostic: CPointerVar<CFunction<CFunctionType7>>
|
||||||
get() = memberAt(8)
|
get() = memberAt(8)
|
||||||
|
|
||||||
val enteredMainFile: CPointerVar<CFunction<CFunctionType9>>
|
val enteredMainFile: CPointerVar<CFunction<CFunctionType8>>
|
||||||
get() = memberAt(16)
|
get() = memberAt(16)
|
||||||
|
|
||||||
val ppIncludedFile: CPointerVar<CFunction<CFunctionType10>>
|
val ppIncludedFile: CPointerVar<CFunction<CFunctionType9>>
|
||||||
get() = memberAt(24)
|
get() = memberAt(24)
|
||||||
|
|
||||||
val importedASTFile: CPointerVar<CFunction<CFunctionType11>>
|
val importedASTFile: CPointerVar<CFunction<CFunctionType10>>
|
||||||
get() = memberAt(32)
|
get() = memberAt(32)
|
||||||
|
|
||||||
val startedTranslationUnit: CPointerVar<CFunction<CFunctionType12>>
|
val startedTranslationUnit: CPointerVar<CFunction<CFunctionType11>>
|
||||||
get() = memberAt(40)
|
get() = memberAt(40)
|
||||||
|
|
||||||
val indexDeclaration: CPointerVar<CFunction<CFunctionType13>>
|
val indexDeclaration: CPointerVar<CFunction<CFunctionType12>>
|
||||||
get() = memberAt(48)
|
get() = memberAt(48)
|
||||||
|
|
||||||
val indexEntityReference: CPointerVar<CFunction<CFunctionType14>>
|
val indexEntityReference: CPointerVar<CFunction<CFunctionType13>>
|
||||||
get() = memberAt(56)
|
get() = memberAt(56)
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4678,67 +4678,61 @@ object CFunctionType4 : CAdaptedFunctionTypeImpl<(CXCursor, COpaquePointer?) ->
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object CFunctionType5 : CAdaptedFunctionTypeImpl<(COpaquePointer?) -> Unit>(Void, Pointer) {
|
object CFunctionType5 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CXCursor, CXSourceRange) -> CXVisitorResult>(UInt32, Pointer, Struct(UInt32, SInt32, Struct(Pointer, Pointer, Pointer)), Struct(Struct(Pointer, Pointer), UInt32, UInt32)) {
|
||||||
override fun invoke(function: (COpaquePointer?) -> Unit, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
|
||||||
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
object CFunctionType6 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CXCursor, CXSourceRange) -> CXVisitorResult>(UInt32, Pointer, Struct(UInt32, SInt32, Struct(Pointer, Pointer, Pointer)), Struct(Struct(Pointer, Pointer), UInt32, UInt32)) {
|
|
||||||
override fun invoke(function: (COpaquePointer?, CXCursor, CXSourceRange) -> CXVisitorResult, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
override fun invoke(function: (COpaquePointer?, CXCursor, CXSourceRange) -> CXVisitorResult, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
||||||
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<CXCursor>().pointed, args[2].value!!.reinterpret<CXSourceRange>().pointed)
|
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<CXCursor>().pointed, args[2].value!!.reinterpret<CXSourceRange>().pointed)
|
||||||
ret.reinterpret<CXVisitorResult.Var>().pointed.value = res
|
ret.reinterpret<CXVisitorResult.Var>().pointed.value = res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object CFunctionType7 : CAdaptedFunctionTypeImpl<(COpaquePointer?, COpaquePointer?) -> Int>(SInt32, Pointer, Pointer) {
|
object CFunctionType6 : CAdaptedFunctionTypeImpl<(COpaquePointer?, COpaquePointer?) -> Int>(SInt32, Pointer, Pointer) {
|
||||||
override fun invoke(function: (COpaquePointer?, COpaquePointer?) -> Int, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
override fun invoke(function: (COpaquePointer?, COpaquePointer?) -> Int, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
||||||
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<COpaquePointerVar>().pointed.value)
|
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<COpaquePointerVar>().pointed.value)
|
||||||
ret.reinterpret<CInt32Var>().pointed.value = res
|
ret.reinterpret<CInt32Var>().pointed.value = res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object CFunctionType8 : CAdaptedFunctionTypeImpl<(COpaquePointer?, COpaquePointer?, COpaquePointer?) -> Unit>(Void, Pointer, Pointer, Pointer) {
|
object CFunctionType7 : CAdaptedFunctionTypeImpl<(COpaquePointer?, COpaquePointer?, COpaquePointer?) -> Unit>(Void, Pointer, Pointer, Pointer) {
|
||||||
override fun invoke(function: (COpaquePointer?, COpaquePointer?, COpaquePointer?) -> Unit, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
override fun invoke(function: (COpaquePointer?, COpaquePointer?, COpaquePointer?) -> Unit, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
||||||
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[2].value!!.reinterpret<COpaquePointerVar>().pointed.value)
|
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[2].value!!.reinterpret<COpaquePointerVar>().pointed.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object CFunctionType9 : CAdaptedFunctionTypeImpl<(COpaquePointer?, COpaquePointer?, COpaquePointer?) -> COpaquePointer?>(Pointer, Pointer, Pointer, Pointer) {
|
object CFunctionType8 : CAdaptedFunctionTypeImpl<(COpaquePointer?, COpaquePointer?, COpaquePointer?) -> COpaquePointer?>(Pointer, Pointer, Pointer, Pointer) {
|
||||||
override fun invoke(function: (COpaquePointer?, COpaquePointer?, COpaquePointer?) -> COpaquePointer?, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
override fun invoke(function: (COpaquePointer?, COpaquePointer?, COpaquePointer?) -> COpaquePointer?, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
||||||
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[2].value!!.reinterpret<COpaquePointerVar>().pointed.value)
|
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[2].value!!.reinterpret<COpaquePointerVar>().pointed.value)
|
||||||
ret.reinterpret<COpaquePointerVar>().pointed.value = res
|
ret.reinterpret<COpaquePointerVar>().pointed.value = res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object CFunctionType10 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer<CXIdxIncludedFileInfo>?) -> COpaquePointer?>(Pointer, Pointer, Pointer) {
|
object CFunctionType9 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer<CXIdxIncludedFileInfo>?) -> COpaquePointer?>(Pointer, Pointer, Pointer) {
|
||||||
override fun invoke(function: (COpaquePointer?, CPointer<CXIdxIncludedFileInfo>?) -> COpaquePointer?, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
override fun invoke(function: (COpaquePointer?, CPointer<CXIdxIncludedFileInfo>?) -> COpaquePointer?, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
||||||
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<CPointerVar<CXIdxIncludedFileInfo>>().pointed.value)
|
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<CPointerVar<CXIdxIncludedFileInfo>>().pointed.value)
|
||||||
ret.reinterpret<COpaquePointerVar>().pointed.value = res
|
ret.reinterpret<COpaquePointerVar>().pointed.value = res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object CFunctionType11 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer<CXIdxImportedASTFileInfo>?) -> COpaquePointer?>(Pointer, Pointer, Pointer) {
|
object CFunctionType10 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer<CXIdxImportedASTFileInfo>?) -> COpaquePointer?>(Pointer, Pointer, Pointer) {
|
||||||
override fun invoke(function: (COpaquePointer?, CPointer<CXIdxImportedASTFileInfo>?) -> COpaquePointer?, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
override fun invoke(function: (COpaquePointer?, CPointer<CXIdxImportedASTFileInfo>?) -> COpaquePointer?, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
||||||
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<CPointerVar<CXIdxImportedASTFileInfo>>().pointed.value)
|
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<CPointerVar<CXIdxImportedASTFileInfo>>().pointed.value)
|
||||||
ret.reinterpret<COpaquePointerVar>().pointed.value = res
|
ret.reinterpret<COpaquePointerVar>().pointed.value = res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object CFunctionType12 : CAdaptedFunctionTypeImpl<(COpaquePointer?, COpaquePointer?) -> COpaquePointer?>(Pointer, Pointer, Pointer) {
|
object CFunctionType11 : CAdaptedFunctionTypeImpl<(COpaquePointer?, COpaquePointer?) -> COpaquePointer?>(Pointer, Pointer, Pointer) {
|
||||||
override fun invoke(function: (COpaquePointer?, COpaquePointer?) -> COpaquePointer?, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
override fun invoke(function: (COpaquePointer?, COpaquePointer?) -> COpaquePointer?, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
||||||
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<COpaquePointerVar>().pointed.value)
|
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<COpaquePointerVar>().pointed.value)
|
||||||
ret.reinterpret<COpaquePointerVar>().pointed.value = res
|
ret.reinterpret<COpaquePointerVar>().pointed.value = res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object CFunctionType13 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer<CXIdxDeclInfo>?) -> Unit>(Void, Pointer, Pointer) {
|
object CFunctionType12 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer<CXIdxDeclInfo>?) -> Unit>(Void, Pointer, Pointer) {
|
||||||
override fun invoke(function: (COpaquePointer?, CPointer<CXIdxDeclInfo>?) -> Unit, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
override fun invoke(function: (COpaquePointer?, CPointer<CXIdxDeclInfo>?) -> Unit, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
||||||
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<CPointerVar<CXIdxDeclInfo>>().pointed.value)
|
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<CPointerVar<CXIdxDeclInfo>>().pointed.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object CFunctionType14 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer<CXIdxEntityRefInfo>?) -> Unit>(Void, Pointer, Pointer) {
|
object CFunctionType13 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer<CXIdxEntityRefInfo>?) -> Unit>(Void, Pointer, Pointer) {
|
||||||
override fun invoke(function: (COpaquePointer?, CPointer<CXIdxEntityRefInfo>?) -> Unit, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
override fun invoke(function: (COpaquePointer?, CPointer<CXIdxEntityRefInfo>?) -> Unit, args: CArray<COpaquePointerVar>, ret: COpaquePointer) {
|
||||||
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<CPointerVar<CXIdxEntityRefInfo>>().pointed.value)
|
val res = function(args[0].value!!.reinterpret<COpaquePointerVar>().pointed.value, args[1].value!!.reinterpret<CPointerVar<CXIdxEntityRefInfo>>().pointed.value)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-6
@@ -193,12 +193,10 @@ internal class NativeIndexImpl(val language: Language) : NativeIndex() {
|
|||||||
|
|
||||||
CXType_Pointer -> {
|
CXType_Pointer -> {
|
||||||
val pointeeType = clang_getPointeeType(type)
|
val pointeeType = clang_getPointeeType(type)
|
||||||
val canonicalPointeeType = clang_getCanonicalType(pointeeType)
|
val pointeeIsConst =
|
||||||
if (clang_isConstQualifiedType(canonicalPointeeType) != 0) {
|
(clang_isConstQualifiedType(clang_getCanonicalType(pointeeType)) != 0)
|
||||||
PointerToConstType(convertType(pointeeType))
|
|
||||||
} else {
|
PointerType(convertType(pointeeType), pointeeIsConst = pointeeIsConst)
|
||||||
PointerType(convertType(pointeeType))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CXType_ConstantArray -> {
|
CXType_ConstantArray -> {
|
||||||
|
|||||||
+2
-8
@@ -119,14 +119,8 @@ data class RecordType(val decl: StructDecl) : Type
|
|||||||
|
|
||||||
data class EnumType(val def: EnumDef) : Type
|
data class EnumType(val def: EnumDef) : Type
|
||||||
|
|
||||||
open class PointerType(val pointeeType : Type) : Type
|
data class PointerType(val pointeeType: Type, val pointeeIsConst: Boolean = false) : Type
|
||||||
|
// TODO: refactor type representation and support type modifiers more generally.
|
||||||
/**
|
|
||||||
* The type of pointer that can't be used to modify pointed data.
|
|
||||||
*
|
|
||||||
* TODO: refactor type representation and support type modifiers more generally.
|
|
||||||
*/
|
|
||||||
class PointerToConstType(pointeeType: Type) : PointerType(pointeeType)
|
|
||||||
|
|
||||||
data class FunctionType(val parameterTypes: List<Type>, val returnType: Type) : Type
|
data class FunctionType(val parameterTypes: List<Type>, val returnType: Type) : Type
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -458,7 +458,8 @@ class StubGenerator(
|
|||||||
|
|
||||||
fun representCFunctionParameterAsString(type: Type): Boolean {
|
fun representCFunctionParameterAsString(type: Type): Boolean {
|
||||||
val unwrappedType = type.unwrapTypedefs()
|
val unwrappedType = type.unwrapTypedefs()
|
||||||
return unwrappedType is PointerToConstType && unwrappedType.pointeeType.unwrapTypedefs() == CharType
|
return unwrappedType is PointerType && unwrappedType.pointeeIsConst &&
|
||||||
|
unwrappedType.pointeeType.unwrapTypedefs() == CharType
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCFunctionParamBinding(type: Type): OutValueBinding {
|
fun getCFunctionParamBinding(type: Type): OutValueBinding {
|
||||||
|
|||||||
Reference in New Issue
Block a user