diff --git a/Interop/Indexer/prebuilt/nativeInteropStubs/kotlin/clang/clang.kt b/Interop/Indexer/prebuilt/nativeInteropStubs/kotlin/clang/clang.kt index bfd1a93bceb..f0dfd5c1429 100644 --- a/Interop/Indexer/prebuilt/nativeInteropStubs/kotlin/clang/clang.kt +++ b/Interop/Indexer/prebuilt/nativeInteropStubs/kotlin/clang/clang.kt @@ -2857,7 +2857,7 @@ class __darwin_pthread_handler_rec(override val rawPtr: NativePtr) : CStructVar( companion object : Type(24, 8) - val __routine: CPointerVar> + val __routine: CPointerVar> get() = memberAt(0) val __arg: COpaquePointerVar @@ -3261,7 +3261,7 @@ class CXCursorAndRangeVisitor(override val rawPtr: NativePtr) : CStructVar() { val context: COpaquePointerVar get() = memberAt(0) - val visit: CPointerVar> + val visit: CPointerVar> get() = memberAt(8) } @@ -3585,28 +3585,28 @@ class IndexerCallbacks(override val rawPtr: NativePtr) : CStructVar() { companion object : Type(64, 8) - val abortQuery: CPointerVar> + val abortQuery: CPointerVar> get() = memberAt(0) - val diagnostic: CPointerVar> + val diagnostic: CPointerVar> get() = memberAt(8) - val enteredMainFile: CPointerVar> + val enteredMainFile: CPointerVar> get() = memberAt(16) - val ppIncludedFile: CPointerVar> + val ppIncludedFile: CPointerVar> get() = memberAt(24) - val importedASTFile: CPointerVar> + val importedASTFile: CPointerVar> get() = memberAt(32) - val startedTranslationUnit: CPointerVar> + val startedTranslationUnit: CPointerVar> get() = memberAt(40) - val indexDeclaration: CPointerVar> + val indexDeclaration: CPointerVar> get() = memberAt(48) - val indexEntityReference: CPointerVar> + val indexEntityReference: CPointerVar> get() = memberAt(56) } @@ -4678,67 +4678,61 @@ object CFunctionType4 : CAdaptedFunctionTypeImpl<(CXCursor, COpaquePointer?) -> } } -object CFunctionType5 : CAdaptedFunctionTypeImpl<(COpaquePointer?) -> Unit>(Void, Pointer) { - override fun invoke(function: (COpaquePointer?) -> Unit, args: CArray, ret: COpaquePointer) { - val res = function(args[0].value!!.reinterpret().pointed.value) - } -} - -object CFunctionType6 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CXCursor, CXSourceRange) -> CXVisitorResult>(UInt32, Pointer, Struct(UInt32, SInt32, Struct(Pointer, Pointer, Pointer)), Struct(Struct(Pointer, Pointer), UInt32, UInt32)) { +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?, CXCursor, CXSourceRange) -> CXVisitorResult, args: CArray, ret: COpaquePointer) { val res = function(args[0].value!!.reinterpret().pointed.value, args[1].value!!.reinterpret().pointed, args[2].value!!.reinterpret().pointed) ret.reinterpret().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, ret: COpaquePointer) { val res = function(args[0].value!!.reinterpret().pointed.value, args[1].value!!.reinterpret().pointed.value) ret.reinterpret().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, ret: COpaquePointer) { val res = function(args[0].value!!.reinterpret().pointed.value, args[1].value!!.reinterpret().pointed.value, args[2].value!!.reinterpret().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, ret: COpaquePointer) { val res = function(args[0].value!!.reinterpret().pointed.value, args[1].value!!.reinterpret().pointed.value, args[2].value!!.reinterpret().pointed.value) ret.reinterpret().pointed.value = res } } -object CFunctionType10 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer?) -> COpaquePointer?>(Pointer, Pointer, Pointer) { +object CFunctionType9 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer?) -> COpaquePointer?>(Pointer, Pointer, Pointer) { override fun invoke(function: (COpaquePointer?, CPointer?) -> COpaquePointer?, args: CArray, ret: COpaquePointer) { val res = function(args[0].value!!.reinterpret().pointed.value, args[1].value!!.reinterpret>().pointed.value) ret.reinterpret().pointed.value = res } } -object CFunctionType11 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer?) -> COpaquePointer?>(Pointer, Pointer, Pointer) { +object CFunctionType10 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer?) -> COpaquePointer?>(Pointer, Pointer, Pointer) { override fun invoke(function: (COpaquePointer?, CPointer?) -> COpaquePointer?, args: CArray, ret: COpaquePointer) { val res = function(args[0].value!!.reinterpret().pointed.value, args[1].value!!.reinterpret>().pointed.value) ret.reinterpret().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, ret: COpaquePointer) { val res = function(args[0].value!!.reinterpret().pointed.value, args[1].value!!.reinterpret().pointed.value) ret.reinterpret().pointed.value = res } } -object CFunctionType13 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer?) -> Unit>(Void, Pointer, Pointer) { +object CFunctionType12 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer?) -> Unit>(Void, Pointer, Pointer) { override fun invoke(function: (COpaquePointer?, CPointer?) -> Unit, args: CArray, ret: COpaquePointer) { val res = function(args[0].value!!.reinterpret().pointed.value, args[1].value!!.reinterpret>().pointed.value) } } -object CFunctionType14 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer?) -> Unit>(Void, Pointer, Pointer) { +object CFunctionType13 : CAdaptedFunctionTypeImpl<(COpaquePointer?, CPointer?) -> Unit>(Void, Pointer, Pointer) { override fun invoke(function: (COpaquePointer?, CPointer?) -> Unit, args: CArray, ret: COpaquePointer) { val res = function(args[0].value!!.reinterpret().pointed.value, args[1].value!!.reinterpret>().pointed.value) } diff --git a/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Indexer.kt b/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Indexer.kt index eefcc5508d9..436863aeb78 100644 --- a/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Indexer.kt +++ b/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Indexer.kt @@ -193,12 +193,10 @@ internal class NativeIndexImpl(val language: Language) : NativeIndex() { CXType_Pointer -> { val pointeeType = clang_getPointeeType(type) - val canonicalPointeeType = clang_getCanonicalType(pointeeType) - if (clang_isConstQualifiedType(canonicalPointeeType) != 0) { - PointerToConstType(convertType(pointeeType)) - } else { - PointerType(convertType(pointeeType)) - } + val pointeeIsConst = + (clang_isConstQualifiedType(clang_getCanonicalType(pointeeType)) != 0) + + PointerType(convertType(pointeeType), pointeeIsConst = pointeeIsConst) } CXType_ConstantArray -> { diff --git a/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/NativeIndex.kt b/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/NativeIndex.kt index dbe36ae4f9d..c6d6d63be86 100644 --- a/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/NativeIndex.kt +++ b/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/NativeIndex.kt @@ -119,14 +119,8 @@ data class RecordType(val decl: StructDecl) : Type data class EnumType(val def: EnumDef) : Type -open class PointerType(val pointeeType : Type) : Type - -/** - * 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 PointerType(val pointeeType: Type, val pointeeIsConst: Boolean = false) : Type +// TODO: refactor type representation and support type modifiers more generally. data class FunctionType(val parameterTypes: List, val returnType: Type) : Type diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/StubGenerator.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/StubGenerator.kt index 8ef5ee1479f..9c9c3d64981 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/StubGenerator.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/StubGenerator.kt @@ -458,7 +458,8 @@ class StubGenerator( fun representCFunctionParameterAsString(type: Type): Boolean { 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 {