From 9eba17d63152ac71c14d5b68e69ec57173d9f8a6 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Tue, 5 Sep 2023 16:55:34 +0200 Subject: [PATCH] [K/N] Move Native-specific mangle constants to more suitable places They shouldn't be mixed with target-independent constants. --- .../common/serialization/mangle/MangleConstant.kt | 8 -------- .../serialization/ObjCFunctionNameMangleComputer.kt | 10 +++++++--- .../kotlin/backend/konan/llvm/BinaryInterface.kt | 11 ++++++++--- .../kotlin/backend/konan/llvm/LlvmDeclarations.kt | 9 +++------ 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/MangleConstant.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/MangleConstant.kt index 03920cde660..7a43d5a5396 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/MangleConstant.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/MangleConstant.kt @@ -43,13 +43,5 @@ enum class MangleConstant(val prefix: Char, val separator: Char, val suffix: Cha const val LOCAL_DECLARATION_INDEX_PREFIX = '$' const val JAVA_FIELD_SUFFIX = "#jf" - - const val FUN_PREFIX = "kfun" - const val CLASS_PREFIX = "kclass" - const val FIELD_PREFIX = "kfield" - - const val OBJC_MARK = "objc:" - const val OBJC_CONSTRUCTOR_MARK = "#Constructor" - const val OBJC_PROPERTY_ACCESSOR_MARK = "#Accessor" } } \ No newline at end of file diff --git a/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/ObjCFunctionNameMangleComputer.kt b/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/ObjCFunctionNameMangleComputer.kt index 8d4f2373ae6..756180a7de0 100644 --- a/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/ObjCFunctionNameMangleComputer.kt +++ b/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/ObjCFunctionNameMangleComputer.kt @@ -20,6 +20,10 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.NativeStandardInteropNames import org.jetbrains.kotlin.native.interop.ObjCMethodInfo +private const val OBJC_MARK = "objc:" +private const val OBJC_CONSTRUCTOR_MARK = "#Constructor" +private const val OBJC_PROPERTY_ACCESSOR_MARK = "#Accessor" + abstract class ObjCFunctionNameMangleComputer : PlatformSpecificFunctionNameMangleComputer { abstract fun getObjCMethodInfo(): ObjCMethodInfo? @@ -45,13 +49,13 @@ abstract class ObjCFunctionNameMangleComputer : PlatformSp append(it) append(MangleConstant.FQN_SEPARATOR) } - append(MangleConstant.OBJC_MARK) + append(OBJC_MARK) append(objcMethodInfo.selector) if (isObjCConstructor()) { - append(MangleConstant.OBJC_CONSTRUCTOR_MARK) + append(OBJC_CONSTRUCTOR_MARK) } if (isPropertyAccessor()) { - append(MangleConstant.OBJC_PROPERTY_ACCESSOR_MARK) + append(OBJC_PROPERTY_ACCESSOR_MARK) } } } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt index 7ad60677bfc..95ec5ff4c9b 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt @@ -30,6 +30,11 @@ import org.jetbrains.kotlin.name.Name // TODO: do not serialize descriptors of non-exported declarations. object KonanBinaryInterface { + + internal const val MANGLE_FUN_PREFIX = "kfun" + internal const val MANGLE_CLASS_PREFIX = "kclass" + internal const val MANGLE_FIELD_PREFIX = "kfield" + private val mangler = object : AbstractKonanIrMangler(withReturnType = true, allowOutOfScopeTypeParameters = true) {} private val exportChecker = mangler.getExportChecker(compatibleMode = true) @@ -43,7 +48,7 @@ object KonanBinaryInterface { return funSymbolNameImpl(null) } - val IrField.symbolName: String get() = withPrefix(MangleConstant.FIELD_PREFIX, fieldSymbolNameImpl()) + val IrField.symbolName: String get() = withPrefix(MANGLE_FIELD_PREFIX, fieldSymbolNameImpl()) val IrClass.typeInfoSymbolName: String get() = typeInfoSymbolNameImpl(null) @@ -70,7 +75,7 @@ object KonanBinaryInterface { } val mangle = mangler.run { mangleString(compatibleMode = true) } - return withPrefix(MangleConstant.FUN_PREFIX, containerName?.plus(".$mangle") ?: mangle) + return withPrefix(MANGLE_FUN_PREFIX, containerName?.plus(".$mangle") ?: mangle) } private fun IrField.fieldSymbolNameImpl(): String { @@ -82,7 +87,7 @@ object KonanBinaryInterface { private fun IrClass.typeInfoSymbolNameImpl(containerName: String?): String { val fqName = fqNameForIrSerialization.toString() - return withPrefix(MangleConstant.CLASS_PREFIX, containerName?.plus(".$fqName") ?: fqName) + return withPrefix(MANGLE_CLASS_PREFIX, containerName?.plus(".$fqName") ?: fqName) } } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt index 95a5ff7deff..c57537fac45 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt @@ -7,19 +7,16 @@ package org.jetbrains.kotlin.backend.konan.llvm import kotlinx.cinterop.toCValues import llvm.* -import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleConstant import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.descriptors.ClassLayoutBuilder import org.jetbrains.kotlin.backend.konan.descriptors.isTypedIntrinsic import org.jetbrains.kotlin.backend.konan.descriptors.requiredAlignment import org.jetbrains.kotlin.backend.konan.ir.* -import org.jetbrains.kotlin.backend.konan.lower.isStaticInitializer -import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.objcinterop.* import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.util.* -import org.jetbrains.kotlin.ir.objcinterop.* import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.library.KotlinLibrary @@ -210,7 +207,7 @@ private class DeclarationsGeneratorVisitor(override val generationState: NativeG declaration.computeTypeInfoSymbolName() } else { if (!context.config.producePerFileCache) - "${MangleConstant.CLASS_PREFIX}:$internalName" + "${KonanBinaryInterface.MANGLE_CLASS_PREFIX}:$internalName" else { val containerName = (generationState.cacheDeserializationStrategy as CacheDeserializationStrategy.SingleFile).filePath declaration.computePrivateTypeInfoSymbolName(containerName) @@ -389,7 +386,7 @@ private class DeclarationsGeneratorVisitor(override val generationState: NativeG } } else { if (!context.config.producePerFileCache) - "${MangleConstant.FUN_PREFIX}:${qualifyInternalName(declaration)}" + "${KonanBinaryInterface.MANGLE_FUN_PREFIX}:${qualifyInternalName(declaration)}" else { val containerName = declaration.parentClassOrNull?.fqNameForIrSerialization?.asString() ?: (generationState.cacheDeserializationStrategy as CacheDeserializationStrategy.SingleFile).filePath