diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt index 0eb79131df9..4d83f48ce6d 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt @@ -12,6 +12,7 @@ import llvm.* import org.jetbrains.kotlin.backend.common.phaser.ActionState import org.jetbrains.kotlin.backend.common.phaser.BeforeOrAfter import org.jetbrains.kotlin.backend.common.serialization.KlibIrVersion +import org.jetbrains.kotlin.backend.konan.cexport.produceCAdapterBitcode import org.jetbrains.kotlin.backend.konan.llvm.* import org.jetbrains.kotlin.backend.konan.llvm.objc.patchObjCRuntimeModule import org.jetbrains.kotlin.ir.declarations.IrModuleFragment diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt index 80d3fac65e4..487115c8014 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt @@ -9,6 +9,7 @@ import llvm.LLVMTypeRef import org.jetbrains.kotlin.backend.common.DefaultDelegateFactory import org.jetbrains.kotlin.backend.common.DefaultMapping import org.jetbrains.kotlin.backend.common.LoggingContext +import org.jetbrains.kotlin.backend.konan.cexport.CAdapterGenerator import org.jetbrains.kotlin.backend.konan.descriptors.BridgeDirections import org.jetbrains.kotlin.backend.konan.descriptors.ClassLayoutBuilder import org.jetbrains.kotlin.backend.konan.descriptors.GlobalHierarchyAnalysisResult diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/InteropUtils.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/InteropUtils.kt index 70cd0172329..6b284178284 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/InteropUtils.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/InteropUtils.kt @@ -161,3 +161,44 @@ private fun MemberScope.getContributedClass(name: String): ClassDescriptor = private fun MemberScope.getContributedFunctions(name: String) = this.getContributedFunctions(Name.identifier(name), NoLookupLocation.FROM_BUILTINS) + +internal val cKeywords = setOf( + // Actual C keywords. + "auto", "break", "case", + "char", "const", "continue", + "default", "do", "double", + "else", "enum", "extern", + "float", "for", "goto", + "if", "int", "long", + "register", "return", + "short", "signed", "sizeof", "static", "struct", "switch", + "typedef", "union", "unsigned", + "void", "volatile", "while", + // C99-specific. + "_Bool", "_Complex", "_Imaginary", "inline", "restrict", + // C11-specific. + "_Alignas", "_Alignof", "_Atomic", "_Generic", "_Noreturn", "_Static_assert", "_Thread_local", + // Not exactly keywords, but reserved or standard-defined. + "and", "not", "or", "xor", + "bool", "complex", "imaginary", + + // C++ keywords not listed above. + "alignas", "alignof", "and_eq", "asm", + "bitand", "bitor", "bool", + "catch", "char16_t", "char32_t", "class", "compl", "constexpr", "const_cast", + "decltype", "delete", "dynamic_cast", + "explicit", "export", + "false", "friend", + "inline", + "mutable", + "namespace", "new", "noexcept", "not_eq", "nullptr", + "operator", "or_eq", + "private", "protected", "public", + "reinterpret_cast", + "static_assert", + "template", "this", "thread_local", "throw", "true", "try", "typeid", "typename", + "using", + "virtual", + "wchar_t", + "xor_eq" +) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt index 7167567e80e..cc1484ee268 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.common.checkDeclarationParents import org.jetbrains.kotlin.backend.common.phaser.* import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataMonolithicSerializer +import org.jetbrains.kotlin.backend.konan.cexport.CAdapterGenerator import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary import org.jetbrains.kotlin.backend.konan.driver.phases.PsiToIrInput import org.jetbrains.kotlin.backend.konan.llvm.* diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterCompile.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cexport/CAdapterCompile.kt similarity index 91% rename from kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterCompile.kt rename to kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cexport/CAdapterCompile.kt index cd84b4c4392..6f0d90f0b18 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterCompile.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cexport/CAdapterCompile.kt @@ -3,7 +3,7 @@ * that can be found in the LICENSE file. */ -package org.jetbrains.kotlin.backend.konan +package org.jetbrains.kotlin.backend.konan.cexport import org.jetbrains.kotlin.konan.exec.* import org.jetbrains.kotlin.konan.target.* diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cexport/CAdapterGenerator.kt similarity index 96% rename from kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt rename to kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cexport/CAdapterGenerator.kt index c90a38c1b2b..d917f0592cf 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CAdapterGenerator.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cexport/CAdapterGenerator.kt @@ -1,16 +1,16 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the LICENSE file. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.backend.konan +package org.jetbrains.kotlin.backend.konan.cexport import kotlinx.cinterop.cValuesOf -import java.io.PrintWriter import llvm.* import org.jetbrains.kotlin.backend.common.descriptors.allParameters import org.jetbrains.kotlin.backend.common.pop import org.jetbrains.kotlin.backend.common.push +import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.llvm.* import org.jetbrains.kotlin.backend.konan.lower.getObjectClassInstanceFunction import org.jetbrains.kotlin.builtins.UnsignedType @@ -23,16 +23,15 @@ import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.isOverridable import org.jetbrains.kotlin.ir.util.referenceFunction import org.jetbrains.kotlin.konan.target.* -import org.jetbrains.kotlin.name.isChildOf import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.annotations.* +import org.jetbrains.kotlin.name.isChildOf import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.annotations.* import org.jetbrains.kotlin.resolve.descriptorUtil.* import org.jetbrains.kotlin.types.KotlinType -import org.jetbrains.kotlin.types.typeUtil.isNothing -import org.jetbrains.kotlin.types.typeUtil.isUnit -import org.jetbrains.kotlin.types.typeUtil.makeNullable +import org.jetbrains.kotlin.types.typeUtil.* +import java.io.PrintWriter private enum class ScopeKind { TOP, @@ -74,47 +73,6 @@ private val KotlinType.createNullableNameForPredefinedType private val KotlinType.createGetNonNullValueOfPredefinedType get() = "getNonNullValueOf${this.shortNameForPredefinedType}" -internal val cKeywords = setOf( - // Actual C keywords. - "auto", "break", "case", - "char", "const", "continue", - "default", "do", "double", - "else", "enum", "extern", - "float", "for", "goto", - "if", "int", "long", - "register", "return", - "short", "signed", "sizeof", "static", "struct", "switch", - "typedef", "union", "unsigned", - "void", "volatile", "while", - // C99-specific. - "_Bool", "_Complex", "_Imaginary", "inline", "restrict", - // C11-specific. - "_Alignas", "_Alignof", "_Atomic", "_Generic", "_Noreturn", "_Static_assert", "_Thread_local", - // Not exactly keywords, but reserved or standard-defined. - "and", "not", "or", "xor", - "bool", "complex", "imaginary", - - // C++ keywords not listed above. - "alignas", "alignof", "and_eq", "asm", - "bitand", "bitor", "bool", - "catch", "char16_t", "char32_t", "class", "compl", "constexpr", "const_cast", - "decltype", "delete", "dynamic_cast", - "explicit", "export", - "false", "friend", - "inline", - "mutable", - "namespace", "new", "noexcept", "not_eq", "nullptr", - "operator", "or_eq", - "private", "protected", "public", - "reinterpret_cast", - "static_assert", - "template", "this", "thread_local", "throw", "true", "try", "typeid", "typename", - "using", - "virtual", - "wchar_t", - "xor_eq" -) - private fun isExportedFunction(descriptor: FunctionDescriptor): Boolean { if (!descriptor.isEffectivelyPublicApi || !descriptor.kind.isReal || descriptor.isExpect) return false