From b8340ead91be9da1c570b1d2c3c54b5c7becc2c6 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Fri, 8 Jun 2018 12:24:21 +0300 Subject: [PATCH] Added names to private functions and types --- .../jetbrains/kotlin/backend/konan/Context.kt | 5 +++-- .../jetbrains/kotlin/backend/konan/ir/KonanIr.kt | 4 +++- .../kotlin/backend/konan/llvm/BinaryInterface.kt | 4 ++-- .../kotlin/backend/konan/llvm/IrToBitcode.kt | 16 ++++++++-------- .../backend/konan/optimizations/DataFlowIR.kt | 4 ++-- .../konan/optimizations/Devirtualization.kt | 3 ++- 6 files changed, 20 insertions(+), 16 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt index 1c1470bcefe..7cce2ff60c4 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.backend.konan.library.LinkData import org.jetbrains.kotlin.backend.konan.llvm.* import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_BRIDGE_METHOD import org.jetbrains.kotlin.backend.konan.lower.bridgeTarget +import org.jetbrains.kotlin.backend.konan.optimizations.DataFlowIR import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl @@ -279,8 +280,8 @@ internal class Context(config: KonanConfig) : KonanBackendContext(config) { var phase: KonanPhase? = null var depth: Int = 0 - lateinit var privateFunctions: List - lateinit var privateClasses: List + lateinit var privateFunctions: List> + lateinit var privateClasses: List> // Cache used for source offset->(line,column) mapping. val fileEntryCache = mutableMapOf() diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/KonanIr.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/KonanIr.kt index 9aab4ac9388..a4b43827518 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/KonanIr.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/KonanIr.kt @@ -230,6 +230,7 @@ internal interface IrPrivateClassReference : IrClassReference { val moduleDescriptor: ModuleDescriptor val totalClasses: Int val classIndex: Int + val dfgSymbol: DataFlowIR.Type.Declared } internal class IrPrivateClassReferenceImpl(startOffset: Int, @@ -239,7 +240,8 @@ internal class IrPrivateClassReferenceImpl(startOffset: Int, override val classType: KotlinType, override val moduleDescriptor: ModuleDescriptor, override val totalClasses: Int, - override val classIndex: Int + override val classIndex: Int, + override val dfgSymbol: DataFlowIR.Type.Declared ) : IrPrivateClassReference, IrTerminalDeclarationReferenceBase( startOffset, endOffset, type, diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt index a3cb46fc435..bf3393b4d4a 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryInterface.kt @@ -300,9 +300,9 @@ internal val ClassDescriptor.objectInstanceShadowFieldSymbolName: String internal val ClassDescriptor.typeInfoHasVtableAttached: Boolean get() = !this.isAbstract() && !this.isExternalObjCClass() -internal fun ModuleDescriptor.privateFunctionSymbolName(index: Int) = "private_functions_${name.asString()}_$index" +internal fun ModuleDescriptor.privateFunctionSymbolName(index: Int, functionName: String?) = "private_functions_${name.asString()}_${functionName}_$index" -internal fun ModuleDescriptor.privateClassSymbolName(index: Int) = "private_classes_${name.asString()}_$index" +internal fun ModuleDescriptor.privateClassSymbolName(index: Int, className: String?) = "private_classes_${name.asString()}_${className}_$index" internal val String.moduleConstructorName get() = "_Konan_init_${this}" diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index 0c4151479b2..18d143d4ffa 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -94,12 +94,12 @@ internal fun emitLLVM(context: Context) { val privateFunctions = moduleDFG!!.symbolTable.getPrivateFunctionsTableForExport() privateFunctions.forEachIndexed { index, it -> - val function = codegenVisitor.codegen.llvmFunction(it) + val function = codegenVisitor.codegen.llvmFunction(it.first) LLVMAddAlias( context.llvmModule, function.type, function, - irModule.descriptor.privateFunctionSymbolName(index) + irModule.descriptor.privateFunctionSymbolName(index, it.second.name) )!! } context.privateFunctions = privateFunctions @@ -107,12 +107,12 @@ internal fun emitLLVM(context: Context) { val privateClasses = moduleDFG!!.symbolTable.getPrivateClassesTableForExport() privateClasses.forEachIndexed { index, it -> - val typeInfoPtr = codegenVisitor.codegen.typeInfoValue(it) + val typeInfoPtr = codegenVisitor.codegen.typeInfoValue(it.first) LLVMAddAlias( context.llvmModule, typeInfoPtr.type, typeInfoPtr, - irModule.descriptor.privateClassSymbolName(index) + irModule.descriptor.privateClassSymbolName(index, it.second.name) )!! } context.privateClasses = privateClasses @@ -2019,10 +2019,10 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map